处理中的碰撞检测

时间:2015-01-21 14:07:13

标签: java processing

我有一个处理程序,其形状在屏幕上移动,并在碰撞时失去健康。像一场战斗。但是碰撞检测一次只能对一组碰撞单元起作用。如果战斗在屏幕上的某个点发生,则其他战斗将不会发生,直到完成。

  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。

1 个答案:

答案 0 :(得分:0)

似乎ttime是全局的,并且正在为所有友好/敌人交互进行检查/重置,而不是每次交互都有自己的ttime。每秒只发生一次攻击吗?你需要有一个ttimes数组,这样一个计时器只与一个交互相关联,这意味着一个大小的数组/ ArrayList(enemies.size()* friendlies.size()),每个交互一个。