这似乎是一个简单的触发问题,但无论出于何种原因,事情都没有解决。
我试图简单地让一个对象在用户按下 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));
}
现在,它们都起作用了,对象围绕鼠标旋转,同时始终面向鼠标,但是如果有足够的时间按住 strafe 按钮,对象也在远离鼠标旋转变得越来越明显,就好像它是推开。
我不知道为什么会这样以及如何解决它。
任何见解表示赞赏!