使用LibGDX中的触摸板仅以45°步进移动播放器

时间:2017-02-05 21:55:56

标签: java android libgdx

我在LibGDX中使用match (n) where ANY(l in labels(n) WHERE l =~ ".*treeroot") return n touchpad来移动播放器。但是现在我希望玩家只能根据Touchpad knob的位置而不是在每个可能的方向上移动8个特定方向:

向上,向右,向右,向右,向下,向左,向左,向左,向上。所以这些方向之间的角度是45°。

该运动的当前代码是:

touchpad

我需要改变什么才能让玩家只在这八个方向之一移动?我想我必须绕旋钮位置,但我不知道该怎么做。

除此之外,我宁愿player.setX(player.getX() + touchpad.getKnobPercentX() * Constants.SPEED); player.setY(player.getY() + touchpad.getKnobPercentY() * Constants.SPEED); 的{​​{1}}不应该“平稳地”移动​​,而只是“跳”到这八个位置中的一个,这样玩家可以直接看到方向目前正在运行。

任何人都可以帮我解决这个问题,还是有其他方法可以解决这个问题?

提前谢谢

1 个答案:

答案 0 :(得分:1)

试试这个,花了我一个小时来弄明白,所以我希望它适合你!

float dx = touchpad.getKnobPercentX();
float dy = touchpad.getKnobPercentY();

int direction = Math.floor((Math.atan2(dy, dx) + Math.PI/8) / (2*Math.PI/8));
if (direction == 8) direction = 0;
double angle = direction * (Math.PI/4);

player.setX(player.getX() + Math.cos(angle) * Constants.SPEED);
player.setY(player.getY() + Math.sin(angle) * Constants.SPEED);

基本上它找到旋钮的角度,并从中找到方向(八个中的一个)。方向乘以45度Math.PI/4以获得与其对应的角度。