2014-07-20 53 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

相關問題