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

时间:2014-05-17 01:12:26

标签: 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 yxy Gdx.input.getX()和Gdx.input.getY()坐标p>

纹理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中的其他函数/方法来查找角度?如果没有,问题是由于我绘制纹理的方式吗?

2 个答案:

答案 0 :(得分:0)

看看你的第一个输入:

frame.getRegionHeight() / 2 - y

frame.getRegionHeight()/2会让你到达屏幕的一条线(水平)。现在,如果你减去一个大于这个值的Y值,你最终会得到一个负数。在您显示鼠标点低于中间点的情况下,因此第一个输入是负值。相同的情况可以应用于x的第二个输入。

您需要通过获得负距离来解决问题。

答案 1 :(得分:0)

这不起作用的原因是因为你获得了鼠标的y坐标。不幸的是,你必须取得鼠标的y坐标和屏幕高度的差异,因为鼠标的y坐标是y-up,这会使坐标翻转。