2013-02-21 17 views
5

Voglio animare gradualmente il mio attore. Ho aggiunto questa azione per spostare Attore dal punto A al punto B.Azioni libgdx => sposta gradualmente l'attore dal punto A al punto B

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

provato anche questo (moveTo in 10 secondi):

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

Ma Attore si muove troppo velocemente. Cosa c'è che non va?

+0

Puoi utilizzare anche [Universal Tween Engine] (https://github.com/AurelienRibon/universal-tween-engine) per questo. Funziona anche per gli sprite e ha molte funzioni. – trinity420

risposta

10

La seconda forma:

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

dovrebbe spostare il vostro attore posX, posY nel corso di 10 secondi.

Il primo modulo sposterà l'attore 1-passo in xey, e dopo di ciò sposta l'attore immediatamente in posX, posY. Actions.sequence esegue le azioni indicate una dopo l'altra, non si modificano a vicenda.

Come (e dove) stai chiamando act() sul palco? Questo è ciò che determina quanto aggiornare un Actor in un frame, quindi se lo chiami più volte per fotogramma o passi il valore sbagliato, le azioni passeranno troppo velocemente.

+0

+1 per darmi un indizio. – Alf

4

Proprio perché la tua risposta era al top quando ho cercato "Libgdx Move to Point" pubblicherò una soluzione qui.

Ecco una soluzione, non specificamente per Attori:

si definiscono le variabili Vector2 nella classe, questi verranno utilizzati per la posizione oggetto:

protected Vector2 v2Position; 
protected Vector2 v2Velocity; 

La posizione si trova nel costruttore o altrove. Per ottenere la velocità dell'oggetto e spostarlo al punto dato:

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; 
} 

Ora basta aggiungere il Velocity alla posizione e l'oggetto si sposterà al punto dato

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

Grazie, questo mi ha indirizzato nella giusta direzione. Nel metodo di aggiornamento ho fatto 'v2Position.lerp (v2Velocity);' perché avevo bisogno che l'oggetto si spostasse e si fermasse in una posizione specifica. – Raf

Problemi correlati