我正在使用 LibGDX 中 Touchpad
类的 touchpad
来移动播放器。但现在我希望玩家只能在 8 个特定方向上移动,具体取决于 touchpad
的 knob
的位置,而不是在每个可能的方向上:
上、右上、右、右下、下、左下、左、左上。所以这些方向之间的角度是 45°。
运动的当前代码是:
player.setX(player.getX() + touchpad.getKnobPercentX() * Constants.SPEED);
player.setY(player.getY() + touchpad.getKnobPercentY() * Constants.SPEED);
我必须更改什么才能使玩家仅朝这八个方向之一移动?我想我必须将旋钮位置四舍五入,但我不知道该怎么做。
除此之外,我宁愿触摸板
的旋钮
不再“平稳”移动,而只是“跳”到这八个位置之一,这样玩家可以直接看到哪个方向当前处于 Activity 状态。
谁能帮我解决这个问题,或者有其他方法可以解决这个问题吗?
提前致谢
最佳答案
试试这个,我花了大约一个小时才弄明白,所以我希望它对你有用!
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
得到与之对应的角度。
关于java - 使用 LibGDX 中的触摸板仅以 45° 的步长移动播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42057796/