在 2D 空间中将点从 A 移动到 B

Move a point from A to B in 2D space

本文关键字:移动 2D 空间      更新时间:2023-09-26

我正在写一个小型太空游戏,但我坚持在开放的2D空间中以很好的方式将我的飞船从A点移动到B点。

我对以下解决方案的第一个问题是我的船永远不会完全停止。它越来越近,但它永远在B点附近振动。我的第二个问题是,如果我在它靠近时将其捕捉到 B,突然停止看起来也很假和糟糕。

我想我希望船在B点停下来之前加速,行驶和减速,没有任何弹跳,但我不知道如何以好的方式实现这一目标。此外,如果在2D空间中有一些"正确"的方法来将船从A点移动到B点,而我没有考虑过,那么其他想法是非常受欢迎的。

if(player.x < destination.x) {
    if(player.velocityX < player.speed) {
        player.velocityX += 10;         
    }
} else {
    if(player.velocityX > -player.speed) {
        player.velocityX -= 10;
    }
}
if(player.y < destination.y) {
    if(player.velocityY < player.speed) {
        player.velocityY += 10;         
    }
} else {
    if(player.velocityY > -player.speed) {
        player.velocityY -= 10;
    }
}
// Friction.
player.velocityX *= 0.9;
player.velocityY *= 0.9;
player.x += player.velocityX;
player.y += player.velocityY;

请注意,此解决方案尚未对从 A 到 B 的直线路径使用三角函数,但这应该不会影响我认为的问题。

任何帮助将不胜感激!

我最终得到了一个解决方案,一旦玩家通过它的目的地点,我就会增加Friction,使飞船最终减速到 0 而不捕捉到点 B .