0

パスを描いて、それに沿ってスプライトを動かしています。今、私はスプライトが各ウェイポイントの後に常に運転方向を見たいと思っています。このコードを使用すると、方向を設定できます(スムーズではありません)。getTargetAngle は、新しい回転角度を返します。

float angleDeg = getTargetAngle(sprite.getX(), sprite.getY(), targetX[pWaypointIndex + 1], targetY[pWaypointIndex + 1]);
sprite.setRotation(angleDeg);

これで、-179° から 179° への転換点で、短いパスではなく長いパスに沿って曲がり、ジャンプすることを除いて、スムーズに行うことができます。

sprite.unregisterEntityModifier(rotMod);
rotMod = new RotationModifier(0.5f, currentAngleDeg, angleDeg);
sprite.registerEntityModifier(rotMod);

両方の角度の絶対加算が 180° を超える場合、スプライトの現在の角度に 360° を追加/サブしてみました。-179° から 179° へのジャンプを 181 から 179 へのジャンプにしますが、これは機能しません。

if(Math.abs((float)angleDeg) + Math.abs((float)currentAngleDeg) > 180) {
if (currentAngleDeg < 0) {
    currentAngleDeg+=360.0f;
} else {
    currentAngleDeg-=360.0f;
}

getTargetAngle:

public float getTargetAngle(float startX, float startY, float         targetX, float targetY){

    float dX = targetX - startX;
    float dY = targetY - startY;
    float angleRad = (float) Math.atan2(dY, dX);
    float angleDeg = (float) Math.toDegrees(angleRad);
    return angleDeg;
}
4

1 に答える 1