2012-12-12 194 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(& &)。