Sup парни.
Я пишу простую игру про зомби для своих классов Java, и у меня возникла небольшая проблема: Zombies - это класс, который я создал, и я рассматриваю их в ArrayListПримерно так:
horda.add(new Zumbi( (int)(Math.random()* 750), 0));
Где аргументы представляют позицию появления зомби на экране.Чтобы убить их, вы должны щелкнуть по ним, довольно просто, проверяя столкновение с итератором, здесь:
java.util.Iterator<Zumbi> itr = horda.iterator();
while (itr.hasNext()){
Zumbi z = itr.next();
if (tiroPos.x > z.zumbiPos.x &&
tiroPos.x < z.sprite.getWidth() + z.zumbiPos.x &&
tiroPos.y > z.zumbiPos.y &&
tiroPos.y < z.sprite.getHeight() + z.zumbiPos.y){
//things to do when it hits
}
tiroPos - указатель, который содержит координаты, где стреляет игрок.Дело в том, что иногда то, что должно произойти, когда вы попадаете в зомби, не происходит.Я не знаю, так ли это, потому что итератор работает недостаточно быстро или что-то еще.
Может быть, создание отдельного потока для каждого зомби работает, но это изменило бы код - это несколько фундаментальных способов, и яне хотел рисковать потерять все это время, если это не поможет.
Итак, есть мысли?
// РЕДАКТИРОВАТЬ: Забыл сказать: я проверяюколлизии в переопределенном методе рисования, потому что я не знаю, как рисовать вещи в других методах, и когда я пытался получить доступ к ArrayList (это Sync'd ArrayList) в другом потоке, это вызывало у меня исключение совместной модификации.
// РЕДАКТИРОВАТЬ2: Проблема решена (чего никогда не было).
Объект MouseEvent
, переданный MouseListener
, проходит через кординат нижнегоконец указателя мыши.Так что это была не проблема столкновений, а скорее математическая проблема.Я должен был сравнить clickPoint.y
- 25 , чтобы понять это правильно.
Спасибо всем, кто пытался помочь!