2012-12-12 192 views
0

對於我的教育,我必須在HTML5畫布中製作基本遊戲。這款遊戲是一款射擊遊戲。當你可以左移 - >右移,空間正在射擊。當我射擊子彈時會向上移動。敵人向下移動。當子彈擊中敵人時,敵人必須消失,並且會獲得+1分。但是在屏幕出現後敵人會消失。帆布遊戲:碰撞檢測

演示:http://jordikroon.nl/test.html

空間=射擊+敵人顯示出來

這是我的代碼:

  for (i=0;i<enemyX.length;i++) { 

       if(enemyX[i] > canvas.height) { 

        enemyY.splice(i,1); 
        enemyX.splice(i,1); 
       } else { 

        enemyY[i] += 5; 
        moveEnemy(enemyX[i],enemyY[i]); 

       } 
      } 

      for (i=0;i<bulletX.length;i++) { 

       if(bulletY[i] < 0) { 
        bulletY.splice(i,1); 
        bulletX.splice(i,1); 
       } else { 

        bulletY[i] -= 5; 
        moveBullet(bulletX[i],bulletY[i]); 

        for (ib=0;ib<enemyX.length;ib++) { 

         if(bulletX[i] + 50 < enemyX[ib] || 
           enemyX[ib] + 50 < bulletX[i] || 
           bulletY[i] + 50 < enemyY[ib] || 
           enemyY[ib] + 50 < bulletY[i]) 
         { 
          ++score; 
          enemyY.splice(i,1); 
          enemyX.splice(i,1); 
         } 
        } 
       } 
      } 

對象:

 function moveBullet(posX,posY) { 
      //console.log(posY); 
      ctx.arc(posX, (posY-150), 10, 0 , 2 * Math.PI, false); 

     } 

     function moveEnemy(posX,posY) { 

      ctx.rect(posX, posY, 50, 50); 
      ctx.fillStyle = '#ffffff'; 
      ctx.fill(); 
     } 
+1

我想爲+1描述性很強的主題「擊中敵人時取消」,但無法爲此而做! – Tom

+1

那你到底想要什麼?如果你想要什麼,請發佈正確的問題。 – LPD

+0

更適合http://gamedev.stackexchange.com/ – Christoph

回答

0

除了Ben的修正之外,爲了將來的參考,最好做一個線路碰撞檢測,而不是你的點盒碰撞檢測。

其原因是,說你的敵人很小,你的子彈正在快速移動。子彈在敵人之前總是會出現在一幀中,然後在敵人後面出現,因此永遠不會註冊成爲命中。

測試與子彈路徑和敵人假想線相交會更準確。

0

ORI覺得我看到的一個問題。您的碰撞檢測中包含以下代碼

    if(bulletX[i] + 50 < enemyX[ib] || 
          enemyX[ib] + 50 < bulletX[i] || 
          bulletY[i] + 50 < enemyY[ib] || 
          enemyY[ib] + 50 < bulletY[i]) 

這是直ORs(||),而+50在小於一側。這意味着它應該實際上觸發爲真,只要項目符號是而不是在hitbox中。我懷疑你反而想在+50以上,並且OR(||)是AND(& &)。