0

我正在编写一个小型空间游戏,但我坚持在开放的 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 的直线路径,但这不应该影响我认为的问题。

任何帮助将不胜感激!

4

1 回答 1

0

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

于 2013-12-24T19:02:22.867 回答