Действия Актеров в libgdx - PullRequest
       31

Действия Актеров в libgdx

22 голосов
/ 03 февраля 2012

Я сделал свой Актер , но мне неясно, как использовать методы action и act.Помимо базового Javadoc, я не нашел хороших руководств по этим методам.

Может кто-нибудь привести пример с комментариями к действиям над актерами?

Ответы [ 3 ]

72 голосов
/ 04 февраля 2012

Этот ответ устарел из-за изменений в LibGDX. Актуальную документацию смотрите на вики-сцене scene2d .

В LibGDX есть различные доступные для вас действия. Они в com.badlogic.gdx.scenes.scene2d.actions упаковке. Я бы сказал, что есть 3 вида действий:

  1. Анимационные действия
  2. Составные действия
  3. Другие действия

Анимационные действия изменяют различные свойства вашего актера, такие как местоположение, вращение, масштаб и альфа. Это:

  • FadeIn - меняет альфа вашего актера с текущей альфа актера на 1
  • FadeOut - меняет альфу вашего актера с текущей альфа-версии актера на 0
  • FadeTo - меняет альфа вашего актера с текущей альфы актера на конкретное значение
  • MoveBy - перемещает вашего актера на определенную сумму
  • MoveTo - перемещает вашего актера в определенное место
  • RotateBy - поворачивает вашего актера на определенный угол
  • RotateTo - поворачивает вашего актера до определенный угол
  • ScaleTo - масштабирует вашего актера до определенного масштабного коэффициента

Составные действия объединяют несколько действий в одно действие, а это:

  • Параллельно - выполнять заданные действия параллельно - все действия сразу
  • Последовательность - выполнять заданные действия последовательно - одно за другим

Другие действия:

  • Повтор - повторяет данное действие n раз
  • Навсегда - повторяет данное действие навсегда
  • Задержка - задерживает выполнение данного действия на определенное время
  • Удалить - удаляет данного Актера со сцены

Каждое действие имеет статический метод $, который создает экземпляр этого действия. Пример создания анимационных действий:

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

Пример создания более сложной последовательности действий:

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

Анимационные действия также позволяют указать Interpolator. Существуют различные реализации:

  • AccelerateDecelerateInterpolator
  • AccelerateInterpolator
  • AnticipateInterpolator
  • DecelerateInterpolator
  • LinearInterpolator
  • OvershootInterpolator

Интерполятор Javadoc: Интерполятор определяет скорость изменения анимации. Это позволяет ускорить, замедлить основные эффекты анимации (альфа, масштабировать, перевести, повернуть) и т. Д. Чтобы установить интерполятор на ваше действие:

action.setInterpolator(AccelerateDecelerateInterpolator.$());

Когда у вас есть готовое действие с интерполятором, вы устанавливаете это действие на своего актера:

actor.action(yourAction);

Чтобы фактически выполнить все действия, определенные для актеров на сцене, вы должны вызвать stage.act (...) в вашем методе рендеринга:

stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
12 голосов
/ 18 ноября 2013

Вы должны попробовать Universal Tween Engine. Он прост в использовании и действительно мощный ... и делает чтение сложных анимаций прогулкой в ​​парке, потому что все команды могут быть связаны. Смотрите примеры ниже.

Шаги:

1. Скачать библиотеку с здесь
2. Создать класс доступа. Вы можете сэкономить время и взять тот, который я использовал, с здесь .
3. В вашем классе Game объявите TweenManager

    public static TweenManager tweenManager;


В методе create :

    tweenManager = new TweenManager();


В методе render :

    tweenManager.update(Gdx.graphics.getDeltaTime());


4. Используйте его как хотите. Ex.

Переместить актера в позицию (100, 200) за 1,5 секунды с упругой интерполяцией:

Tween.to(actor, ActorAccesor.POSITION_XY, 1.5f)
     .target(100, 200)
     .ease(Elastic.INOUT)
     .start(tweenManager);


Создание сложной последовательности анимаций:

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


Подробнее здесь

ОБНОВЛЕНИЕ: заменено неработающей ссылкой

11 голосов
/ 16 ноября 2012

Вот полезная ссылка для использования класса com.badlogic.gdx.math.Interpolation .Так, например, чтобы создать движение с эффектом, вы можете просто использовать:

myActor.addAction(Actions.moveTo(100, 200, 0.7f, Interpolation.bounceOut));

Если вы установили импорт класса Actions как статический (вы должны установить его вручную):

import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*;

тогда вы можете использовать свои действия так:

myActor.addAction(moveTo(100, 200, 0.7f, Interpolation.bounceOut)); 
...