2013-02-21 9 views
5

Chcę stopniowo animować mojego aktora. Dodałem tę akcję, aby przesunąć aktora z punktu A do punktu B.Akcje Libgdx => stopniowo przesuwaj Aktora z punktu A do punktu B

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

Również próbowałem to moveTo (w 10 sekund):

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

Ale aktor porusza się zbyt szybko. Co jest nie tak?

+0

Można użyj również [Universal Tween Engine] (https://github.com/AurelienRibon/universal-tween-engine). Działa również dla sprite'ów i ma wiele funkcji. – trinity420

Odpowiedz

10

Druga forma:

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

powinien przenieść aktora posX, wiązanka w ciągu 10 sekund.

Pierwsza forma przesunie aktora o jeden krok w xiy, a po zakończeniu przesunie aktora natychmiast do posX, posY. Actions.sequence uruchamia podane działania jeden po drugim, nie modyfikują się nawzajem.

Jak (i ​​gdzie) dzwonisz na act() na scenie? To właśnie określa, ile zaktualizować Actor w ramce, więc jeśli wywołasz ją kilka razy na ramkę lub przekażesz nieprawidłową wartość, działania przejdą zbyt szybko.

+0

+1 za udzielenie mi wskazówki. – Alf

4

Tylko dlatego, że odpowiedź była najwyższa, gdy wyszukiwałem "Libgdx Move to Point", zamieszczę tutaj rozwiązanie.

Oto rozwiązanie, nie specjalnie dla aktorów:

Definiowanie ci zmiennych Vector2 w klasie, które zostaną wykorzystane do położenia obiektu:

protected Vector2 v2Position; 
protected Vector2 v2Velocity; 

Pozycja jest ustawiony w konstruktor lub gdziekolwiek indziej. Aby uzyskać prędkość obiektu i przesunąć go w danym punkcie:

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

Teraz wystarczy dodać prędkości do pozycji i obiekt zostanie przeniesiony na punkcie danej

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

Dzięki, to wskazało mi właściwy kierunek. W metodzie aktualizacji zrobiłem 'v2Position.lerp (v2Velocity);' ponieważ potrzebowałem obiektu do przejścia i zatrzymania się na określonej pozycji. – Raf

Powiązane problemy