Я сделал свой Actor, но я не понимаю, как использовать методы action
и act
. Вне основного Javadoc я не нашел хороших руководств по этим методам.
Может ли кто-нибудь представить пример комментариев для действий над участниками?
Я сделал свой Actor, но я не понимаю, как использовать методы action
и act
. Вне основного Javadoc я не нашел хороших руководств по этим методам.
Может ли кто-нибудь представить пример комментариев для действий над участниками?
Этот ответ оказывается устаревшим из-за изменений в LibGDX. Для актуальной документации см. страницу вики-страницы scene2d.
В LibGDX доступны различные доступные действия. Они находятся в пакете com.badlogic.gdx.scenes.scene2d.actions
. Я бы сказал, что есть 3 вида действий:
Анимационные действия изменяют различные свойства вашего актера, такие как местоположение, вращение, масштаб и альфа. Это:
Композитные действия объединяют несколько действий в одном действии:
Другие действия:
Каждое действие имеет статический метод $
, который создает экземпляр этого 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
. Существуют различные реализации:
Интерполятор Javadoc: Интерполятор определяет скорость изменения анимации. Это позволяет ускорить базовые эффекты анимации (альфа, масштаб, перевод, поворот), замедлить и т.д. Чтобы установить интерполятор в действие:
action.setInterpolator(AccelerateDecelerateInterpolator.$());
Когда у вас есть действие с готовым интерполятором, вы установите это действие для своего актера:
actor.action(yourAction);
Чтобы выполнить все действия, определенные для участников на сцене, вы должны вызвать stage.act(...) в методе рендеринга:
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
Вот полезная ссылка для использования класса 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));
Вы должны попробовать 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: заменить мертвую ссылку