2014-07-20 52 views
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; 
} 

}

我甚至被删除,使得zombieCanAttack真当定时器是这么说的代码,所以没有什么可以让zombieCanAttack真实的,但即使是这样的程序给我这个输出两次:“第二真”。这会导致僵尸击中角色两次而不是一次。它为什么进入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:http://paste.ubuntu.com/7824949/

+0

粘贴你的代码,然后正确解释它 – Devavrata

+0

你能展示你的全班,让我们可以运行它,看看发生了什么?当你只给我们一半的草垛时,找不到针头是不可能的。 –

+0

你有多个线程在运行吗? – Bohemian

回答

0

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

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

其中zombieNumber值是1,并根据实施Zombie的C他们有相同的参数(为什么你像这样实例化他们),并作为一个移动,所以他们打你两次...试图增加zombieNumber,看看这个问题是否真的在这里。

+0

我的不好,我在相同的坐标上实例化了它们,所以我看不到它们,我不知道有2个僵尸。我粗心。 – user3012462

相关问题