处理,运行如果语句两次而不是一次

时间:2014-07-20 11:45:49

标签: java if-statement processing

我制作非常简单的游戏,但我遇到了一个奇怪的问题;我希望僵尸在他可以的时候击中角色但是,他击中了我两次而不是一次。

void zombieAttack(float distance){
if(zombieCanAttack && (distance < charSizeX/2+zombieSize/2)){ 
  charApplyDamage(5);
  zombieAttackCounter_obj.counter(0); 
  zombieAttackCounter = 0;
  println("second " + zombieCanAttack);
  zombieCanAttack = false; 
}  

}

我甚至删除了使zombieCanAttack为真的代码,当计时器这么说时,所以没有任何东西可以使zombieCanAttack成为现实,但即便如此,程序也会给我两次输出:&#34; second true&#34;。这会导致僵尸击中角色两次而不是一次。为什么它会在两次声明中输入?

编辑:这是完整的僵尸类:

class Zombie {
  float zombieX, zombieY, zombieSizeX, zombieSizeY, zombieSize, zombieHp, zombieDamage,
  zombieSpeed, zombieThresholdX, zombieThresholdY, zombieAttackCounter;
  boolean zombieFlip, zombieCanAttack = true;
  Counter zombieAttackCounter_obj = new Counter();

  void instantiateZombie(float x, float y, float sizeX, float sizeY, float hp,
    float damage, float speed, int thresholdX, int thresholdY){
    zombieX = x;
    zombieY = y;
    zombieSizeX = sizeX;
    zombieSizeY = sizeY;
    zombieSize = (sizeX+sizeY)/4;
    zombieHp = hp;
    zombieDamage = damage;
    zombieSpeed = speed;
    zombieThresholdX = thresholdX;
    zombieThresholdY = thresholdY;
  }
  void zombieAI(){
    zombieAttackCounter = zombieAttackCounter_obj.counter(-1);
    noStroke();
    fill(255, 0, 0);
    rect(zombieX, zombieY, zombieSizeX, zombieSizeY);
    float distance = dist(charX, charY, zombieX, zombieY);
    if(distance+zombieSizeX/2 > charSizeX/2+zombieSizeX/2){
      zombieWalk();
    } else {
      zombieAttack(distance);
    }
    //println("first " + zombieCanAttack);
    if(zombieAttackCounter > 1.5){ /*zombieCanAttack = true; */}
  }
  void zombieWalk(){
    if(zombieX-charX < zombieThresholdX && zombieX-charX > -zombieThresholdX){ }
    else if(zombieX-charX < 0){ 
      zombieX+=zombieSpeed; zombieFlip = true; 
    } 
    else{ 
      zombieX-=zombieSpeed; zombieFlip = false; 
    }
    if(zombieY-charY < zombieThresholdY && zombieY-charY > -zombieThresholdY){ }
    else if(zombieY-charY < 0){ 
      zombieY+=zombieSpeed; 
    } 
    else{ 
      zombieY-=zombieSpeed; 
    }
  }
  void zombieAttack(float distance){
    if((zombieCanAttack) && (distance < charSizeX/2+zombieSize/2)){ 
      charApplyDamage(5);
      zombieAttackCounter_obj.counter(0); 
      zombieAttackCounter = 0;
      println("second " + zombieCanAttack);
      zombieCanAttack = false; 
    }  
  }
}

以下是完整的.pde:http://paste.ubuntu.com/7824949/

1 个答案:

答案 0 :(得分:0)

@HotLicks好点...有两个僵尸因为使用这个语句添加一个僵尸

for(int i = 0; i < zombieNumber+1; i++){
    zombieHolder.add(new Zombie());
}

其中zombieNumber的值是1,并且根据Zombie类的实现,它们具有相同的参数(为什么你像这样实例化它们?)并且移动为一个所以它们会击中你两次..尝试增加zombieNumber以查看此问题是否真的存在。