これは単純なトリグの質問のように思えますが、何らかの理由で物事がうまくいきません。
ユーザーが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));
}
現在、どちらも機能しており、オブジェクトは常にマウスの方を向いたままマウスの周りを回転しますが、機銃掃射ボタンを十分に押し続けると、オブジェクトがマウスから離れて回転していることがますます明らかになります。押しのけました。
これがなぜなのか、それを修正する方法がわかりません。
どんな洞察も大歓迎です!