2013-07-25 48 views
1

我正在創建非常基本的HTML5遊戲,但似乎無法使碰撞檢測正常工作。當子彈與敵人相撞時,子彈被設置爲活動變量被設置爲假,這意味着它不被繪製,並且不用於碰撞檢測,但它似乎仍然是。這裏是我的碰撞檢測方法對象在與其他對象碰撞之前未被移除

//Collision detection between bullet and enemy 
for (var j = 0; j < enemies.length; j++) 
{ 
    for (var i = 0; i < bullets.length; i++) 
    { 
     if(pointInRect(bullets[i].xPos, bullets[i].yPos, enemies[j].xPos, enemies[j].yPos, 32, 32) && (bullets[i].alive == true)) 
     { 
      bullets[i].alive = false; 
      enemies[j].xPos = -100; 
     } 
    } 
} 

但是當它有時與敵人碰撞,只有有時子彈纔會繼續。任何人都可以看到問題嗎?如果需要,我可以提供更多的代碼。

帆布

+0

'pointInRect()'如何工作?你能指出我的描述嗎? – Trojan

+0

用我的回答更新:) – Canvas

回答

0

當創建子彈時。它使用了某人在stackoverflow上幫助我的回收系統。但我們忘了做第一個創建檢查,這裏是代碼

for (var i = 0; i < bullets.length; i++) 
    { 
     if (! bullets[i].alive && ! bulletDone) 
     { 
      bulletDone = true; 
      bullets[i] = new Bullet(player.xPos + 14, player.yPos); 
      console.log("Bullet created"); 
     } 
    } 

    if (! bulletDone) 
    { 
     bullets[bullets.length] = new Bullet(player.xPos + 14, player.yPos); 
     console.log("Bullet created"); 
    } 

基本上線

if (! bullets[i].alive && ! bulletDone) 

if (! bullets[i].alive) 

所以,即使子彈是不是還活着,它仍然會創建一個新的子彈,然後產生兩顆子彈。