【发布时间】:2013-08-20 10:59:03
【问题描述】:
在这里我正在计算演员和触摸点之间的度数,并将这个度数作为旋转角度传递给演员。我希望演员应该指向手指触摸或手指拖动方向。(考虑我通过手指触摸在路上拉公共汽车并且拖)
float degrees = (float) ((Math.atan2(touchPoint.x - crocodile.position.x, -(touchPoint.y - crocodile.position.y)) * 180.0d / Math.PI));
它的计算度数正确。只是有时在两者之间它给出了不同的程度。所以当结果真的与预期不同时,我的演员就会波动。
我打印的结果是:
块引用
degree is :: 141.93233
degree is :: 180.0
degree is :: 180.0
degree is :: 158.61426
degree is :: 90.0
degree is :: 180.0
degree is :: 180.0
degree is :: 90.0
degree is :: 180.0
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93057
degree is :: 180.0
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93306
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93257
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93134
degree is :: 141.93257
degree is :: 180.0
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93134
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93306
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93257
degree is :: 180.0
degree is :: 141.93134
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93257
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93257
degree is :: 180.0
degree is :: 141.93134
degree is :: 180.0
degree is :: 141.93257
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93008
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93306
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93257
degree is :: 180.0
degree is :: 180.0
degree is :: 180.0
degree is :: 141.93134
degree is :: 180.0
degree is :: 180.0
degree is :: 180.0
degree is :: 180.0
degree is :: 180.0
degree is :: 180.0
degree is :: 180.0
现在,180 和 141 为什么会随着这些值波动。 考虑到我期望 141 不断或 180 不断我需要在上面的公式中进行更改。
【问题讨论】:
-
只要你的输入没有改变它就不能改变(假设你有一个确定性的cpu,应该是这种情况......)。因此,要么您的接触点发生变化,要么您的鳄鱼的位置发生变化。此外:像
touchPoint.sub(crocodile.position).angle()这样的东西可能更容易理解? -
@noone ,我想通过使用
codetouchPoint.sub(crocodile.position).angle() 我可以找到角度吗?但是crocodile.position是Vector2值,而sub没有采用Vector2值,如果我使用codetouchPoint.sub(crocodile.position.x,crocodile.position.y,0).angle();然后它也与任何 API 文档功能不匹配。意味着角度()没有在那里解决......在上面的答案中“你说你的鳄鱼的位置正在改变”是的“我想告诉你是的,我正在将鳄鱼的位置更新到接触点。”那么如果我想把它移到那里我该怎么办..谢谢。 -
Vector3没有角度(),但Vector2有。所以试试flot angle = (new Vector2(touchPoint.x, touchPoint.y)).sub(crocodile.position).angle()。 -
@noone ,我的解决方案也受到了同样的波动影响。问题是我正在做的事情。@ 987654329@crocodile.position.x = touchPoint.x ; crocodile.position.y = touchPoint.y ;这可能是问题......我必须解决它,但我必须移动鳄鱼..
-
如果你改变位置,角度总是会改变,所以这不是问题。我只是提供了另一种实现,因为它更容易理解。
标签: rotation libgdx formula points degrees