Slick2D碰撞检测 - 奇怪的运动

时间:2013-03-17 23:57:42

标签: java collision-detection slick2d

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

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

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

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++;
    }

2 个答案:

答案 0 :(得分: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无法正常工作。

答案 1 :(得分:0)

在这里回答我自己的问题。方向移动的旗帜从未改变过真,这是问题的根源。一个方向是正常的,因为它排列着我通常会移动的第一个方向。