그래서 좀비 시뮬레이션 게임을 만들고 있습니다. 내가 가지고있는 것은이 시점에서 무작위로 뛰어 다니는 수많은 플레이어와 좀비 다. 생존자가 좀비와 충돌 할 때 생존자를 제거하고 좀비로 바꾸기를 원하지만 본질적으로 좀비로 변하게합니다.엔티티를 제거하고 그 자리에 새 엔티티를 추가하십시오.
충돌 감지가 잘 작동합니다 (필자는 intersect 메서드로 awt 사각형을 사용하고 있습니다). 그러나 나는 좀비의 배열 목록과 생존자의 배열 목록을 가지고 있습니다. 충돌이 발생하면 좀비 목록에 좀비를 추가합니다. 그런 다음 그 목록에서 생존자를 제거합니다. 몇 시간 동안 작동 한 다음 무작위로 범위를 벗어나는 인덱스 예외를 throw합니다.
java.lang.IndexOutOfBoundsException: Index: 13, Size: 13
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.remove(Unknown Source)
at com.caveragestudios.zombiesim.World.update(World.java:53)
at com.caveragestudios.zombiesim.Main.update(Main.java:93)
at com.caveragestudios.zombiesim.Main.run(Main.java:69)
at java.lang.Thread.run(Unknown Source)
고급 for 루프, 일반 for 루프 및 while 루프가있는 반복기를 사용해 보았습니다. 아무것도 작동하는 것 같지 않습니다. 이것은 지금 내 코드입니다. 다른
for (int i = 0; i < survivors.size(); i++) {
Survivor s = survivors.get(i);
for (int ii = 0; ii < zombies.size(); ii++) {
Zombie z = zombies.get(ii);
if (z.bounds.intersects(s.bounds)) {
zombies.add(new Zombie(s.position, this));
survivors.remove(i);
}
}
}
모든 나는 그것이 종류의 망쳐 놨과 범위 예외 중 인덱스를 던졌습니다 목록을 수정하려고 할 때 그것을 그냥 제대로 작동 할 것으로 보인다. 어떤 아이디어?
와우 나는 그것을 놓쳤다는 것을 믿을 수 없다. 그러나 나는 그것을 바꿨고, 여러 번 일하다가 부서지지 않고 첫 번째 충돌에서 깨졌습니다. 그래서 그게 유일한 문제는 아니라고 생각합니다. – Darren
Darren, Iterator.remove를 사용하여 컬렉션에서 요소를 제거하십시오. – Masudul
그래도 목록에서 특정 개체를 제거 할 수 없다고 생각합니다. while (survivors.iterator(). hasNext())와 같은 것을 사용해야합니다. 그렇다면 그것은 막혀서 프로그램의 나머지 부분을 계속 진행하지 않을 것입니다. 나는 그것을 시도하고 그것이 효과가 있다고 믿지 않는다. – Darren