0

我目前使用的集合检测方法可以解释碰撞,但会根据方向产生奇怪的效果。它会:

  • 如果玩家击中对象的右侧,则始终工作。
  • 如果玩家击中对象的顶部或底部,则将玩家推到一边。
  • 如果玩家撞到对象的左侧,则第一次工作,但下次在左侧检测到碰撞时会将玩家传送到对象的另一侧。

这是当前的碰撞检测代码:

if(player.playerBounds.intersects(portal.bounds)&&player.isMovingLeft){
       player.playerX=(portal.x+portal.width);
       player.playerX++;
    }
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingRight){
        player.playerX=(portal.x-player.width);
        player.playerX--;
    }
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingUp){
        player.playerY=(portal.y+portal.height);
        player.playerY--;
    }
    else if(player.playerBounds.intersects(portal.bounds)&&player.isMovingDown){
        player.playerY=(portal.y+player.height);
        player.playerY++;
    }
4

2 回答 2

0

在这里回答我自己的问题。前进方向的标志从未改变过,这是问题的根源。一个方向是正常的,因为它与我通常会进入的第一个方向对齐。

于 2013-03-22T02:17:35.847 回答
0

你可以试试下面的代码,看看它是否有效?

bool collide = player.playerBounds.intersects(portal.bounds);

if(collide && player.isMovingLeft){
   player.playerX = (portal.x + portal.width) + 1;
}
else if(collide && player.isMovingRight){
    player.playerX = (portal.x - player.width) - 1;
}
else if(collide && player.isMovingUp){
    player.playerY = (portal.y + portal.height) + 1;
}
else if(collide && player.isMovingDown){
    player.playerY = (portal.y + player.height) - 1;
}

可能的原因可能是:

  • 多次检查碰撞。
  • 移动玩家正在改变移动的方向。
  • 其他一些代码与此代码冲突。
  • isMovingX 无法正常工作。
于 2013-03-18T02:31:06.867 回答