Подтвердить что ты не робот

Действия участников в libgdx

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

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

4b9b3361

Ответ 1

Этот ответ оказывается устаревшим из-за изменений в LibGDX. Для актуальной документации см. страницу вики-страницы scene2d.

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

  • Анимация
  • Композитные действия
  • Другие действия

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

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

Композитные действия объединяют несколько действий в одном действии:

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Шаги:

1. Загрузите библиотеку из здесь
2. Создайте класс accesor. Вы можете сэкономить время и захватить тот, который я использовал из здесь.
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 go!
    .start(tweenManager);


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

UPDATE: заменить мертвую ссылку