Java 处理,运行If语句两次而不是一次
我正在做一个非常简单的游戏,但我遇到了一个奇怪的问题;我希望僵尸在可以的时候打角色,但他打我两次而不是一次Java 处理,运行If语句两次而不是一次,java,if-statement,processing,Java,If Statement,Processing,我正在做一个非常简单的游戏,但我遇到了一个奇怪的问题;我希望僵尸在可以的时候打角色,但他打我两次而不是一次 void zombieAttack(float distance){ if(zombieCanAttack && (distance < charSizeX/2+zombieSize/2)){ charApplyDamage(5); zombieAttackCounter_obj.counter(0); zombieAttackCounter = 0;
void zombieAttack(float distance){
if(zombieCanAttack && (distance < charSizeX/2+zombieSize/2)){
charApplyDamage(5);
zombieAttackCounter_obj.counter(0);
zombieAttackCounter = 0;
println("second " + zombieCanAttack);
zombieCanAttack = false;
}
}
我甚至删除了使僵尸攻击为真的代码,当计时器这么说时,所以并没有任何东西使僵尸攻击为真,但即使如此,程序给了我两次输出:第二次为真。这会导致僵尸击中角色两次而不是一次。为什么它要输入两次if语句
编辑:以下是完整的僵尸类:
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:@HotLicks的优点。。。有两个僵尸,因为使用此语句添加一个僵尸
for(int i = 0; i < zombieNumber+1; i++){
zombieHolder.add(new Zombie());
}
其中zombieNumber的值为1,根据Zombie类的实现,它们具有相同的参数,为什么要这样实例化它们?然后像一个人一样移动,这样他们会打你两次。。。尝试增加僵尸数量,看看这个问题是否真的存在。粘贴代码,然后进行适当解释。请展示整个类,以便我们可以运行它并查看发生了什么?当你只给了我们半个草垛的时候就不可能找到针了。你有多个线程在运行吗?其他。pde的:主要计数器:主要角色:有多少僵尸?我的错,我在相同的坐标下实例化了它们,所以我看不到它们,我不知道有两个僵尸。我很粗心。