使用 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
坐标由 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()
是纹理高度。
这是一个示例输出,其中鼠标直接位于播放器顶部(字符位于窗口中间):
可以观察到,当鼠标直接位于玩家上方时,计算出的角度为 -148。当鼠标围绕玩家旋转时,所有角度的角度都是错误的。
问题:我用来查找角度的方法是否有缺陷?如果是这样,我可以使用 Java 中的哪些其他函数/方法来查找角度?如果不是,问题是否是由于我绘制纹理的方式造成的?
最佳答案
看看你的第一个输入:
frame.getRegionHeight() / 2 - y
frame.getRegionHeight()/2
将使您到达屏幕上一条直线上的一点(水平)。现在,如果您减去大于该值的 Y 值,您最终会得到负值。如果您显示鼠标点位于中点下方,因此第一个输入为负值。相同的情况可以应用于 x 的第二个输入。
您需要解决获得负距离的问题。
关于java - LibGDX batch.draw() 旋转和 atan2() 角度兼容性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23706648/