2013-02-21 4 views
5

Ich möchte nach und nach meinen Schauspieler animieren. Ich habe diese Aktion Schauspieler von Punkt A zu bewegen B.Libgdx Actions => schrittweise bewegen Actor von Punkt A nach Punkt B

addAction(Actions.sequence(Actions.moveBy(1, 1), Actions.moveTo(posX, posY))); 

Auch diese (in 10 Sekunden moveTo) versucht zu Punkt:

addAction(Actions.moveTo(posX, posY, 10))); 

Aber Schauspieler bewegen sich zu schnell. Was ist los mit dir?

+0

Sie können Verwenden Sie dazu auch die [Universal Tween Engine] (https://github.com/AurelienRibon/universal-tween-engine). Funktioniert auch für Sprites und hat viele Funktionen. – trinity420

Antwort

10

Die zweite Form:

addAction(Actions.moveTo(posX, posY, 10))); 

sollte Ihren Schauspieler posX, posY im Laufe von 10 Sekunden bewegen.

Das erste Formular verschiebt den Actor um 1 Schritt in x und y, und danach wird der Actor sofort in posX, posY verschoben. Actions.sequence führt die angegebenen Aktionen nacheinander aus, sie ändern sich nicht gegenseitig.

Wie (und wo) rufen Sie act() auf der Bühne? Das bestimmt, wie oft ein Actor in einem Frame aktualisiert wird. Wenn Sie es also mehrmals pro Frame aufrufen oder den falschen Wert übergeben, werden die Aktionen zu schnell ausgeführt.

+0

+1, um mir einen Hinweis zu geben. – Alf

4

Nur weil Ihre Antwort oben war, als ich 'Libgdx Move to Point' suchte, werde ich hier eine Lösung posten.

Hier ist eine Lösung, die nicht speziell für Schauspieler:

definieren Sie Vector2 Variablen in der Klasse, werden diese für die Objektposition verwendet werden:

protected Vector2 v2Position; 
protected Vector2 v2Velocity; 

Die Position in der festgelegt ist Konstruktor oder wo auch immer sonst. Um die Geschwindigkeit des Objekts zu erhalten und es zu dem gegebenen Punkt bewegen:

public void setVelocity (float toX, float toY) { 

// The .set() is setting the distance from the starting position to end position 
v2Velocity.set(toX - v2Position.x, toY - v2Position.y); 
v2Velocity.nor(); // Normalizes the value to be used 

v2Velocity.x *= speed; // Set speed of the object 
v2Velocity.y *= speed; 
} 

Nun fügen Sie einfach die Geschwindigkeit auf die Position und das Objekt wird auf den Punkt bewegt gegeben

@Override public void update() { 
    v2Position.add (v2Velocity); // Update position 
} 
+0

Danke, dies wies mich in die richtige Richtung. In der Update-Methode habe ich 'v2Position.lerp (v2Velocity); 'weil ich das Objekt benötigt, um zu einer bestimmten Position zu gehen und dort zu stoppen. – Raf

Verwandte Themen