2013-04-25 2 views
0

В игре, которую я сейчас делаю, мне нужно проверить, сталкиваются ли два врага друг с другом, если они сталкиваются только с теми двумя врагами, которые должны пострадать, а не с каждым врагом, который существует. Поэтому мне нужно получить двух врагов из ArrayList, когда они сталкиваются, так что только они будут затронуты. Как я могу это сделать?Как получить определенные объекты из ArrayList

Это код, который добавляет врагов в ArrayList

zombie.add(new Zombie(randomXSpawn,randomYSpawn)); 

Чтобы проверить, если враги colided друг с другом, я в настоящее время используют этот код

Zombie z = (Zombie) zombie.get(i); 
Rectangle r2 = z.getBounds(); 
if(r2.intersects(r2)){ 
    //Code goes here 
} 
+0

'if (r2.intersects (r2)) ...' Это не выглядит правильным. Я думаю, вам нужно разместить больше своего кода. Для проверки их пересечения вам нужны границы двух разных объектов. –

+0

Вам необходимо уточнить свой вопрос. Опубликовать более ** соответствующий ** код. Пока все очень загадочно. –

ответ

2

Вы будете должны проверьте каждую пару зомби, чтобы увидеть, столкнулись ли они. Самый простой способ сделать это проверить, как это:

for (int i = 0; i < zombie.size(); i++) { 
    Rectangle r1 = zombie.get(i).getBounds(); 
    for (int j = i+1; j < zombie.size(); j++) { 
     if (r1.intersects(zombie.get(j).getBounds())) { 
      // Code goes here 
     } 
    } 
} 

Обратите внимание, что j не начиная с нуля каждый раз. Это делает так, что до тех пор, пока каждый зомби находится в списке только один раз, вы никогда не будете проверять одну и ту же пару дважды, и вы не будете проверять зомби против себя.

Кроме того, в качестве общего указания на программирование, измените имя списка на zombies. Это немного яснее, и привычка использовать хорошие имена для ваших переменных избавит вас от головных болей позже.

0

Кроме того, если вы еще не сделали этого, вы можете создать границы вокруг, где зомби не может быть (дома, препятствия и т.д.)

ответы Роба очень хорошо, хотя.

Смежные вопросы