这似乎是一个简单的触发问题,但无论出于何种原因,事情都没有解决。围绕一个点
我试图简单地有一个对象在用户按下A/D键(围绕鼠标圆周运动,同时仍然面对鼠标)的给定点旋转。
这里是到目前为止,我已经试过代码(所有的数学函数接受和返回弧度):
if (_inputRef.isKeyDown(GameData.KEY_LEFT))
{
x += 2 * Math.cos(Math.atan2(mouseY - y, mouseX - x) - Math.PI * 0.5);
y += 2 * Math.sin(Math.atan2(mouseY - y, mouseX - x) - Math.PI * 0.5);
}
else if (_inputRef.isKeyDown(GameData.KEY_RIGHT))
{
x += 2 * Math.cos(Math.atan2(mouseY - y, mouseX - x) + Math.PI * 0.5);
y += 2 * Math.sin(Math.atan2(mouseY - y, mouseX - x) + Math.PI * 0.5);
}
并完成同样的事情更优雅的方法:
if (_inputRef.isKeyDown(GameData.KEY_LEFT))
{
x += 2 * Math.sin(Math.atan2(mouseY - y, mouseX - x));
y -= 2 * Math.cos(Math.atan2(mouseY - y, mouseX - x));
}
else if (_inputRef.isKeyDown(GameData.KEY_RIGHT))
{
x -= 2 * Math.sin(Math.atan2(mouseY - y, mouseX - x));
y += 2 * Math.cos(Math.atan2(mouseY - y, mouseX - x));
}
现在,他们都是一种工作,物体围绕鼠标旋转,同时始终面向鼠标,但如果有足够的时间按住沙漏按钮,则会变得越来越明显t物体也从鼠标旋转离开,仿佛它被推开。
我不知道这是为什么以及如何解决它。
任何见识都被赞赏!
你确定它不是浮点漂移吗? “给予足够的时间”多长时间。这可能是事前或事后发生的事情(我注意到'x'和'y'都是'+ =',所以不清楚还有什么影响最终值) –
我认为主要问题是误解了什么是strafing 。 Strafing:玩家沿着其y轴直线移动,同时保持朝向一个点的方向。 所以解决方案是,旋转面对鼠标,然后移动到左侧或右侧的对象。它不是一个单一的计算。它的两个简单步骤。 –
这基本上是他目前正在做的,这导致了所描述的扩大的圆形运动的问题。 – Torious