我会尝试解释我需要实现的目标。
我的播放器从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
我将感谢您的所有答案!
答案 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
}