我有一个处理程序,其形状在屏幕上移动,并在碰撞时失去健康。像一场战斗。但是碰撞检测一次只能对一组碰撞单元起作用。如果战斗在屏幕上的某个点发生,则其他战斗将不会发生,直到完成。
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 coorinates。
答案 0 :(得分:0)
似乎ttime是全局的,并且正在为所有友好/敌人交互进行检查/重置,而不是每次交互都有自己的ttime。每秒只发生一次攻击吗?你需要有一个ttimes数组,这样一个计时器只与一个交互相关联,这意味着一个大小的数组/ ArrayList(enemies.size()* friendlies.size()),每个交互一个。