java - LibGDX batch.draw() 旋转和 atan2() 角度兼容性?

标签 java math libgdx

使用 Math.atan2() 时似乎存在某种计算故障计算角度,然后使用 batch.draw() 在纹理旋转中使用该角度。一个System.out已使用并确认Math.atan2给出了错误的角度。

代码:

public void mouseAngle(int x, int y) {
    mouseAngle = (int) Math.toDegrees(Math.atan2(frame.getRegionHeight() / 2 - y, frame.getRegionWidth() / 2 - x));

    System.out.println(mouseAngle);
}

传入的两个变量,int xint y是鼠标的xy坐标由 Gdx.input.getX() 给出和Gdx.input.getY()

纹理,Assets.stand绘制如下:

batch.draw(Assets.stand, bounds.x, bounds.y, frame.getRegionWidth() / 2, frame.getRegionHeight() / 2, frame.getRegionWidth(), frame.getRegionHeight(), 1, 1, mouseAngle, true);

哪里frame.getRegionWidth()是纹理的宽度,frame.getRegionHeight()是纹理高度。

这是一个示例输出,其中鼠标直接位于播放器顶部(字符位于窗口中间):enter image description here

可以观察到,当鼠标直接位于玩家上方时,计算出的角度为 -148。当鼠标围绕玩家旋转时,所有角度的角度都是错误的。

问题:我用来查找角度的方法是否有缺陷?如果是这样,我可以使用 Java 中的哪些其他函数/方法来查找角度?如果不是,问题是否是由于我绘制纹理的方式造成的?

最佳答案

看看你的第一个输入:

frame.getRegionHeight() / 2 - y

frame.getRegionHeight()/2 将使您到达屏幕上一条直线上的一点(水平)。现在,如果您减去大于该值的 Y 值,您最终会得到负值。如果您显示鼠标点位于中点下方,因此第一个输入为负值。相同的情况可以应用于 x 的第二个输入。

您需要解决获得负距离的问题。

关于java - LibGDX batch.draw() 旋转和 atan2() 角度兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23706648/

相关文章:

java - 多线程系统中的Logback和MDC

logf函数的c代码

math - LISP 中的向量计算

python - Sympy Solve( ) 给出不正确的答案

java - 等距排序的比较误差

java - Json 解析为 HashMap<ArrayList<>> 在 Libgdx 中抛出 StackOverflowError?

java - BigQuery 作业状态始终为 "PENDING"

java - 函数式编程将代码转换为声明式风格

java - order_updates 属性如何避免 Hibernate 中的死锁

java - 如何创建 libgdx 主菜单屏幕