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

标签 java android libgdx

我正在使用 LibGDX 中 Touchpad 类的 touchpad 来移动播放器。但现在我希望玩家只能在 8 个特定方向上移动,具体取决于 touchpadknob 的位置,而不是在每个可能的方向上:

上、右上、右、右下、下、左下、左、左上。所以这些方向之间的角度是 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/

相关文章:

Android 深度链接省略某些 url

android - android中的自定义tabview

java - libGdx 屏幕错误

java - 如何将二维字符串数组转换为一维字符串数组?

java - Logcat 将打印多少字符串有限制吗?

java - 我该如何解决这个明显的合并错误

java - 平板电脑中的 Libgdx 坐标系

java - 什么被 Android UI 线程杀死

java - 在提示输入后添加文本

java - Sprite 旋转无法正常工作 LibGDX