有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用LibGDX中的Touchpad以45°的步幅移动播放器

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

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

移动的当前代码为:

player.setX(player.getX() + touchpad.getKnobPercentX() * Constants.SPEED);
player.setY(player.getY() + touchpad.getKnobPercentY() * Constants.SPEED);

我必须改变什么,使玩家只能在这八个方向中的一个方向上移动?我想我得把旋钮的位置转一下,但我不知道该怎么做

除此之外,我更希望touchpadknob不再“平稳”移动,而只是“跳跃”到这八个位置中的一个,以便玩家直接看到当前活动的方向

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

先谢谢你


共 (1) 个答案

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