У меня есть программа обработки с фигурами, которые перемещаются по экрану и теряют здоровье, когда они сталкиваются. Как битва. Но обнаружение столкновения работает только на одном наборе сталкивающихся блоков за раз. Если битва происходит в точке на экране, других сражений не произойдет, пока она не закончится.Обнаружение столкновений при обработке
for(int i = 0; i < enemies.size(); i++){
for(int j = 0; j < friendlies.size(); j++){
if(checkCollision(friendlies.get(j),enemies.get(i))){
if(ttime == 0){
ttime = millis();
}
if((millis()-ttime)>1000){
if(enemies.get(i).getXSpeed()==0 && enemies.get(i).getYSpeed()==0){
enemies.get(i).attackfriendly(friendlies.get(j));}
if(friendlies.get(j).getXSpeed()==0 && friendlies.get(j).getYSpeed()==0){
friendlies.get(j).attackenemy(enemies.get(i));
}
ttime=0;
}
}
}
}
boolean checkCollision(friendlyUnit f, enemyUnit e){
if(Math.abs(f.getX()-e.getX()) < 21 && Math.abs(f.getY()-e.getY()) < 21){
return true;
}
else{
return false;
}
}
void attackenemy(enemyUnit e){
int damage=0;
ArrayList<friendlyUnit>friendnear = new ArrayList<friendlyUnit>();
for (int i=0; i< friendlies.size(); i++){
if ((checkCollision(friendlies.get(i),e))&& friendlies.get(i).isAlive()){
friendnear.add(friendlies.get(i));
}
}
for (int j=0; j<friendnear.size();j++){
damage=damage+friendnear.get(j).getAttack();
}
e.changeHealth(damage);
}
Враги и товарищеские матчи - это массивы врагов и дружественные формы. Время ttime - таймер. getX и getY возвращают X и Y кооринаты.
Можете ли вы разместить свой код здесь как [MCVE] (http://stackoverflow.com/help/mcve)? –
Получил неправильную ссылку, мой плохой. – user3093270
Большинство людей не нажимают на такие ссылки. Вам будет гораздо лучше удалять этот код здесь как [MCVE] (http://stackoverflow.com/help/mcve). –