Действия субъектов в libgdx

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

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

3 ответов


этот ответ устаревает из-за изменений в LibGDX. Обновленную документацию смотрите в разделе страница Вики scene2d.

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

  1. действия анимации
  2. составные действия
  3. иных действий

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

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

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

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

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

  • Repeat-повторяет данное действие n-times
  • навсегда - повторяет данное действие навсегда
  • Delay-задержка выполнения данного действия на определенное количество времени
  • Remove-удаляет данного актера со сцены

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

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

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

stage.act(Gdx.graphics.getDeltaTime());
stage.draw();

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

действия:

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

    public static TweenManager tweenManager;


В создать способ:

    tweenManager = new TweenManager();


В оказать способ:

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


4. используйте его, как хотите. Бывший.

Перемещение актера в положение (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);


более детально здесь

обновление: заменена мертвая ссылка


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

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

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

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

тогда вы можете использовать свои действия следующим образом:

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