使用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 x
和int y
是x
和y
1}给出的鼠标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()
是纹理高度。
这是一个示例输出,鼠标直接位于播放器顶部(窗口中间的字符):
可以观察到,当鼠标直接位于播放器顶部时,角度计算为-148。当鼠标在播放器周围旋转时,所有角度的角度都是错误的。
问题:我使用的方法是否发现角度存在缺陷?如果是这样,我可以使用Java中的其他函数/方法来查找角度?如果没有,问题是由于我绘制纹理的方式吗?
答案 0 :(得分:0)
看看你的第一个输入:
frame.getRegionHeight() / 2 - y
frame.getRegionHeight()/2
会让你到达屏幕的一条线(水平)。现在,如果你减去一个大于这个值的Y值,你最终会得到一个负数。在您显示鼠标点低于中间点的情况下,因此第一个输入是负值。相同的情况可以应用于x的第二个输入。
您需要通过获得负距离来解决问题。
答案 1 :(得分:0)
这不起作用的原因是因为你获得了鼠标的y坐标。不幸的是,你必须取得鼠标的y坐标和屏幕高度的差异,因为鼠标的y坐标是y-up,这会使坐标翻转。