libGDX - 如何阻止玩家在特定位置的移动?

时间:2016-04-29 13:30:09

标签: java vector libgdx position

我会尝试解释我需要实现的目标。

我的播放器从0,0位置开始。 当我触摸屏幕时,播放器开始向上移动。 当玩家处于Y轴的特定位置时(让我们说200),我希望他停止移动。

当我触摸屏幕时,会调用此方法:

    public void move() {
    if (player.getPosition().y < 200) {
        player.velocity.set(0, 100);
    }

在我的播放器更新方法中,我有:

        if (player.getPosition().y > 200) {
        player.position.set(0, 200);
        player.velocity.set(0, 0);
    }

这个问题在于,如果我将移动方法中的速度设置为1000,那么有一个框架会在玩家的位置高于200时进行渲染。然后将其更改为200并保持在那里。

我在更新方法中试过这个:

if (player.getPosition().y == 200) {
player.velocity.set(0, 0);

}

但是这句话永远不会是真的,因为玩家的位置总是200,而一些随机数字如200.1257或200.54578

我将感谢您的所有答案!

1 个答案:

答案 0 :(得分:0)

你可以将它强制转换为这样的整数:

if ((int)player.getPosition().y == 200) {
    player.velocity.set(0, 0);
}

但我不会推荐它,因为如果你的玩家处于高速状态,它可以跳过200并继续,我认为正确的做法是

if (player.getPosition().y > 200) {
      player.velocity.set(0, 0);
      player.setPosition(new Vector2(player.getX,200));
}

您可以预测玩家的去向,并计算减速度以及让玩家感觉顺畅......

现在,如果您想在屏幕上显示多个矢量,最好是计算播放器与屏幕上的点之间的距离,如下所示:

//If the player is 20 units closer than the point 200,200 do something
    if(player.getPosition().dst2(new Vector2(200,200) < 20){
      //do something
    }