Java 仅在45°中移动玩家;在LibGDX中使用触摸板的步骤
我正在使用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
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°的步数内跳跃吗?不,你必须能够在屏幕上设置旋钮的位置,这似乎是不可能的。别忘了接受!:)