2012-03-15 118 views
0

我正在制作Android的太空射击游戏,并且遇到了敌方和玩家船之间的碰撞检测问题(//侦测与玩家的敌方碰撞)。我很感激任何人都可以用最好的方式来帮助我解决这个问题。看看我的detectCollisions()如下:Android碰撞检测实施

**私人无效detectCollisions(){

// Detect enemy collision with player; to be revised 
    for (int z = 0; z < SSEngine.TOTAL_INTERCEPTORS + SSEngine.TOTAL_SCOUTS + SSEngine.TOTAL_WARSHIPS - 1; z++){ 
    if(enemies[z].posX <= SSEngine.playerBankPosX 
      && enemies[z].posY <= SSEngine.playerBankPosX) 
    { 
     player1.applyDamage(); 
    } 
    } 

    //Detect Player's fire 
    for (int y = 0; y < 3; y ++) 

     if (playerFire[y].shotFired){ 
      for (int x = 0; x < SSEngine.TOTAL_INTERCEPTORS + SSEngine.TOTAL_SCOUTS + SSEngine.TOTAL_WARSHIPS - 1; x++){ 


       if(!enemies[x].isDestroyed && enemies[x].posY < 4.25){ 



        if ((playerFire[y].posY >= enemies[x].posY - 1 
          && playerFire[y].posY <= enemies[x].posY) 
          && (playerFire[y].posX <= enemies[x].posX + 1 
          && playerFire[y].posX >= enemies[x].posX - 1)){ 
         int nextShot = 0; 
         enemies[x].applyDamage(); 
         playerFire[y].shotFired = false; 
         if (y == 3){ 
          nextShot = 0; 
         }else{ 
          nextShot = y + 1; 
         } 
         if (playerFire[nextShot].shotFired == false){ 
          playerFire[nextShot].shotFired = true; 
          playerFire[nextShot].posX = SSEngine.playerBankPosX; 
          playerFire[nextShot].posY = 1.25f; 
         } 
        } 
       } 
      } 
     } 
    }** 

回答

0

你在if检查是错误车道

如果

playerFire[y].posY >= enemies[x].posY - 1是真的 怎么来的

playerFire[y].posY <= enemies[x].posY将成立?

而你是ANDING真& &假,所以它永远是假的。

+0

只有当playerFire [y] .posY与敌人[x] .posY – Rajkiran 2012-03-15 16:05:04

+0

完全相同时,条件才为真。如果位置之间的差值小于或等于1,则条件为真。 – 2012-03-15 16:06:30

+0

感谢Rajkiran和Sergey,能否请您告诉我代码应该是什么样子,因为我完全迷路了。 – user1243000 2012-03-15 18:37:09