J'ai fait mon Acteur , mais je ne sais pas comment tirer parti des méthodes action
et act
. En dehors du Javadoc de base, je n'ai pas trouvé de bons tutoriels sur ces méthodes.
Quelqu'un peut-il fournir un exemple avec des commentaires pour les actions sur les acteurs?
Cette réponse est rendue obsolète à cause des changements dans LibGDX. Pour une documentation à jour, voir page wiki scene2d .
Il existe différentes actions disponibles dans LibGDX prêtes pour vous. Ils sont dans com.badlogic.gdx.scenes.scene2d.actions
paquet. Je dirais qu'il existe 3 types d'actions:
Les actions d'animation modifient diverses propriétés de votre acteur, telles que l'emplacement, la rotation, l'échelle et l'alpha. Elles sont:
Les actions composites combinent plusieurs actions en une seule action, il y a:
D'autres actions:
Chaque action a une méthode statique $
qui crée une instance de cette action. Exemple de création d'actions d'animation:
MoveTo move = MoveTo.$(200, 200, 0.5f); //move Actor to location (200,200) in 0.5 s
RotateTo rotate = RotateTo.$(60, 0.5f); //rotate Actor to angle 60 in 0.5 s
Exemple de création d'une séquence d'actions plus complexe:
Sequence sequence = Sequence.$(
MoveTo.$(200, 200, 0.5f), //move actor to 200,200
RotateTo.$(90, 0.5f), //rotate actor to 90°
FadeOut.$(0.5f), //fade out actor (change alpha to 0)
Remove.$() //remove actor from stage
);
Les actions d'animation vous permettent également de spécifier Interpolator
. Il existe différentes implémentations:
Interpolateur Javadoc: Un interpolateur définit le taux de changement d'une animation. Cela permet aux effets d'animation de base (alpha, échelle, translation, rotation) d'être accélérés, décélérés, etc. Pour régler l'interpolateur sur votre action:
action.setInterpolator(AccelerateDecelerateInterpolator.$());
Lorsque votre action avec interpolateur est prête, vous définissez cette action sur votre acteur:
actor.action(yourAction);
Pour exécuter réellement toutes les actions définies pour les acteurs sur scène, vous devez appeler stage.act (...) dans votre méthode de rendu:
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
Vous devriez essayer Universal Tween Engine. C'est facile à utiliser et vraiment puissant ... et cela fait de la lecture d'animations complexes une promenade dans le parc car toutes les commandes peuvent être enchaînées. Voir les exemples ci-dessous.
Étapes:
1. Téléchargez la bibliothèque depuis ici
2. Créez une classe d'accessoire. Vous pouvez gagner du temps et récupérer celui que j'utilisais depuis ici .
3. Dans votre classe de jeu, déclarez le TweenManager
public static TweenManager tweenManager;
Dans la méthode create :
tweenManager = new TweenManager();
Dans la méthode de rendu :
tweenManager.update(Gdx.graphics.getDeltaTime());
4. Utilisez-le comme vous le souhaitez. Ex.
Déplacer l'acteur en position (100, 200) en 1,5 seconde avec interpolation élastique:
Tween.to(actor, ActorAccesor.POSITION_XY, 1.5f)
.target(100, 200)
.ease(Elastic.INOUT)
.start(tweenManager);
Créez une séquence complexe d'animations:
Timeline.createSequence()
// First, set all objects to their initial positions
.Push(Tween.set(...))
.Push(Tween.set(...))
.Push(Tween.set(...))
// Wait 1s
.pushPause(1.0f)
// Move the objects around, one after the other
.Push(Tween.to(...))
.Push(Tween.to(...))
.Push(Tween.to(...))
// Then, move the objects around at the same time
.beginParallel()
.Push(Tween.to(...))
.Push(Tween.to(...))
.Push(Tween.to(...))
.end()
// And repeat the whole sequence 2 times
.repeatYoyo(2, 0.5f)
// Let's go!
.start(tweenManager);
Plus de détails ici
MISE À JOUR: lien mort remplacé
Voici un lien utile pour les utilisations de Class com.badlogic.gdx.math.Interpolation . Ainsi, par exemple, pour créer un moveTo ation avec un effet, vous pouvez simplement utiliser:
myActor.addAction(Actions.moveTo(100, 200, 0.7f, Interpolation.bounceOut));
Si vous définissez l'importation de votre classe Actions comme statique (vous devez la définir manuellement):
import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;
ensuite, vous pouvez utiliser vos actions comme ceci:
myActor.addAction(moveTo(100, 200, 0.7f, Interpolation.bounceOut));