そのため、andengine で作成している Android ゲームでは、プレイヤー スプライトに触れてドラッグすると、キャラクターが常に進行方向を向くように連続的に回転するように設定しました。
public class Player extends AnimatedSprite {
private float lastX = Game.centerX;
private float lastY = Game.centerY;
private static int angle = 0;
// ...
@Override
public boolean onAreaTouched(final TouchEvent sceneTouchEvent, final float touchAreaLocalX, final float touchAreaLocalY) {
Body body = OrbCatch.physicsWorld.getPhysicsConnectorManager().findBodyByShape(this);
if (sceneTouchEvent.getAction() == TouchEvent.ACTION_MOVE) {
float currentX = sceneTouchEvent.getX();
float currentY = sceneTouchEvent.getY();
angle = (int) (Math.atan2(currentY - lastY, currentX - lastX) * 180 / Math.PI);
lastX = currentX;
lastY = currentY;
}
body.setTransform(new Vector2(sceneTouchEvent.getX(),sceneTouchEvent.getY() )
.mul(1/PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT),angle);
return true;
}
}
重要な行は次のとおりです。
angle = (int) (Math.atan2(currentY - lastY, currentX - lastX) * 180 / Math.PI)
最後の既知の座標と現在の座標を取り、それらの間の角度を計算し、ラジアンから度に変換します。さて、これは昨日はすべて正常に機能していましたが、今日はこのコードを何も変更していないにもかかわらず、奇妙な動作をしています。スプライトの向きが不規則に変化し、明らかなパターンはありません。まっすぐに動かすと、2 つまたは 3 つの明確に異なる角度を連続的に交互に繰り返します (通常、そのうちの 1 つが正しい角度です)。
編集:解決済み、以下を参照