web-dev-qa-db-fra.com

Actions des acteurs dans libgdx

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?

22
Rudy_TM

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:

  1. Actions d'animation
  2. Actions composites
  3. D'autres 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:

  • FadeIn - change l'alpha de votre acteur de l'alpha actuel de l'acteur à 1
  • FadeOut - change l'alpha de votre acteur de l'alpha actuel de l'acteur à 0
  • FadeTo - change l'alpha de votre acteur de l'alpha actuel de l'acteur à une valeur spécifique
  • MoveBy - déplace votre acteur par montant spécifique
  • MoveTo - déplace votre acteur vers emplacement spécifique
  • RotateBy - fait tourner votre acteur by angle spécifique
  • RotateTo - fait tourner votre acteur à angle spécifique
  • ScaleTo - adapte votre acteur à un facteur d'échelle spécifique

Les actions composites combinent plusieurs actions en une seule action, il y a:

  • Parallèle - exécuter des actions données en parallèle - toutes les actions à la fois
  • Séquence - exécuter les actions données dans l'ordre - l'une après l'autre

D'autres actions:

  • Répéter - répète l'action donnée n fois
  • Forever - répète l'action donnée pour toujours
  • Retard - retarde l'exécution de l'action donnée pour une durée spécifique
  • Supprimer - supprime l'acteur donné de la scène

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:

  • AccelerateDecelerateInterpolator
  • AccelerateInterpolator
  • Anticiper Interpolateur
  • DecelerateInterpolator
  • Interpolateur linéaire
  • OvershootInterpolator

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();
73
Ludevik

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é

12
sheitan

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)); 
11
Drorasta