4 Stimmen

Rotierendes Bild in Andengine

Angenommen, es gibt Fehler, die von außen auf den Bildschirm kommen. Dazu benötigen wir 4 Koordinaten (StartX, StartY, TargetX, TargetY). Wie kann man die Fehler in die richtige Richtung drehen? Ich habe stundenlang damit herumgespielt und konnte diesen Teil nicht herausfinden. Also kommt der Fehler auf den Bildschirm, aber er zeigt nicht in die richtige Richtung. (Die vier Koordinaten sind Zufallszahlen).

Ich berechne den Gradienten der Linie, wie ich es in der Schule gelernt habe:

int deltaY = TargetY - StartY;
int deltaX = TargetX - StartX;
float gradient = (float)deltaY / (float)deltaX;

Dann der Winkel, um den Fehler zu drehen:

float angle = (float) (Math.atan(gradient) * 180 / PI);

Hier ist dann der Dreh- und Bewegungsmodifikator:

registerEntityModifier(new RotationModifier(0.3f, 0, angle) {
    @Override
    protected void onModifierFinished(IEntity pItem) {
        super.onModifierFinished(pItem);

        registerEntityModifier(new MoveModifier(0.8f, StartX, TargetX, StartY, TargetY) {
            @Override
            protected void onModifierFinished(IEntity pItem) {
                super.onModifierFinished(pItem);
            }
        });
    }
});

Die Lösung ist komplexer, da bei einer Linie mit einem bestimmten Gradienten der Fehler aus zwei Richtungen kommen kann und daher in zwei Richtungen zeigen kann. Ich weiß, dass ein Gradient von 1/2 26,56 Grad bedeutet und im AndEngine-Koordinatensystem bedeutet dies -26,56 oder -206,56 Grad, je nachdem, von welcher Seite der Fehler kommt.

3voto

JohnEye Punkte 5959

Versuchen Sie etwas Ähnliches:

float bugAngle = 180 + (float)Math.toDegrees(Math.atan2((targetY - bugSprite.getRotationCenterY() - startY), (targetX - bugSprite.getRotationCenterX() - startX)));
bugSprite.setRotation(bugAngle);

Bitte entschuldigen Sie die Lange Todeslinie.

0voto

Karebet Punkte 15

Versuche es mit einem einfacheren Ansatz:

float winkel = getAngle(StartX, TargetX , StartY, TargetY );
YourSprite.setRotation((int) winkel);

Brokap :D

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X