Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅在45°中移动玩家;在LibGDX中使用触摸板的步骤_Java_Android_Libgdx - Fatal编程技术网

Java 仅在45°中移动玩家;在LibGDX中使用触摸板的步骤

Java 仅在45°中移动玩家;在LibGDX中使用触摸板的步骤,java,android,libgdx,Java,Android,Libgdx,我正在使用LibGDX中touchpad类的touchpad移动播放器。但现在我希望播放器只能在8个特定方向上移动,这取决于触摸板旋钮的位置,而不是在每个可能的方向上: 上,上右,右,右下,下,下左,左,左上。所以这些方向之间的夹角是45° 移动的当前代码为: player.setX(player.getX() + touchpad.getKnobPercentX() * Constants.SPEED); player.setY(player.getY() + touchpad.getKnob

我正在使用LibGDX中
touchpad
类的
touchpad
移动播放器。但现在我希望播放器只能在8个特定方向上移动,这取决于
触摸板
旋钮的位置,而不是在每个可能的方向上:

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

移动的当前代码为:

player.setX(player.getX() + touchpad.getKnobPercentX() * Constants.SPEED);
player.setY(player.getY() + touchpad.getKnobPercentY() * Constants.SPEED);
我必须改变什么,使玩家只能在这八个方向中的一个方向上移动?我想我得把旋钮的位置转一下,但我不知道该怎么做

除此之外,我更希望
触摸板的
旋钮
不能再“平稳”移动,只能“跳跃”到这八个位置中的一个,这样玩家就可以直接看到当前激活的方向

有人能帮我解决这个问题吗?或者有没有别的办法


提前谢谢你

试试这个,我花了一个小时才弄明白,所以我希望它对你有用

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
得到与之对应的角度。

旋钮百分比是从0-100还是从0-1返回的?它是一个介于-1和1之间的值(如果旋钮在中心,它是0)太棒了,它对我来说也很完美。非常感谢。你知道如何改变旋钮的行为,使其在45°的步数内跳跃吗?不,你必须能够在屏幕上设置旋钮的位置,这似乎是不可能的。别忘了接受!:)