2016-04-20 9 views
0

Ich versuche, einige Animationen in LibGDX zu spiegeln, aber weil sie von unterschiedlicher Breite sind, spielt die Animation seltsam. Hier ist das Problem:Flip-Bild mit unterschiedlicher Größe Breite weichen Übergang

enter image description here

(der rote Punkt markiert den X/Y {0,0} Koordinate) Wie Sie sehen können, wenn die Animation "links" spielt, wenn Sie schlagen, die Die Füße beginnen weit hinterher, als es war, aber wenn Sie richtig schlagen, spielen die Animationen gut, weil der Ursprung beider Animationen die linke Ecke ist, also ist der Übergang glatt.

Die einzige Möglichkeit, das zu erreichen, was ich möchte, ist zu sehen, welche Animation gerade läuft, und die Koordinaten entsprechend anzupassen.

Dies ist der Code:

public static float draw(Batch batch, Animation animation, float animationState, 
     float delta, 
     int posX, int posY, boolean flip) { 
    animationState += delta; 
    TextureRegion r = animation.getKeyFrame(animationState, true); 
    float width = r.getRegionWidth() * SCALE; 
    float height = r.getRegionHeight() * SCALE; 

    if (flip) { 
     batch.draw(r, posX + width, posY, -width, height); 
    } else { 
     batch.draw(r, posX, posY, width, height); 
    } 

    return animationState; 
} 

Jeder Vorschlag ist willkommen, wie man diesen Ansatz.

Antwort

1

Verwenden Sie eine andere Batch-Option (mit anderen Parametern). Sie können "Ursprungs" -Parameter festlegen. Es ist wie ein heißer Punkt ... Bildmitte ... Wenn Sie also zum Beispiel drehen, wird die Rotation um diesen heißen Punkt herum gemacht.

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Batch.html

Ich habe es nicht für Spiegeln verwenden, aber es sollte die gleiche Art und Weise arbeiten. Wenn dies nicht der Fall ist, müssen Sie die Koordinaten selbst anpassen, eine Liste mit X-Versatz für jedes Bild erstellen und sie für gespiegelte Bilder hinzufügen.

Eine andere Lösung wäre, breitere Frame-Bilder zu haben und das Zentrum des Charakters immer mit der Mitte des Bildes übereinstimmen zu lassen. Auf diese Weise werden Ihre Bilder breiter als sie müssen - Sie werden etwas leeren Platz haben, aber für eine vernünftige Anzahl von Frames ist es akzeptabel.

+0

Danke. Ich habe versucht, den UrsprungX zu setzen, aber ich konnte es nicht sehr gut arbeiten. Ich hatte einige Ergebnisse mit einer statischen Breite (die Breite, wenn das Zeichen im Leerlauf ist) und versuchen, die anderen Sprites auf die Mitte davon einzustellen, aber einige Animationen rendern OK und andere außerhalb der Mitte. Ich werde versuchen, alle Sprites auf die gleiche Breite zu setzen, wie du gesagt hast, aber es gibt 65 insgesamt. – Jh62

+0

Sie haben versucht, UrsprungX und HerkunftY, richtig? Nicht sicher, dass es mit der Einstellung nur eines Wertes arbeiten kann ... – MilanG

+0

Ja. Wie Sie hier sehen können [link] (http://i.imgur.com/dgowc3z.png), sind die Füße, was Ihnen das Gefühl eines Übergangs zwischen Bildern vermittelt, von Bild zu Bild immer außermittig und es gibt keinen Weg dazu Zentriere es nur mit einem Wert. Ich habe verschiedene Möglichkeiten ausprobiert (sogar alle Frames haben die gleiche Breite/Größe) und wenn ich eine Animation repariere, wird andere dadurch kaputt gemacht. Ich denke, die bessere Lösung ist es, jeden Frame von Hand zu versetzen, was ich nicht gerne mache :( – Jh62