Действия субъектов в libgdx
Я актер, но мне неясно, как воспользоваться action
и act
методы. За пределами базового Javadoc я не нашел хороших учебников по этим методам.
может ли кто-нибудь привести пример с комментариями для действий над актерами?
3 ответов
этот ответ устаревает из-за изменений в LibGDX. Обновленную документацию смотрите в разделе страница Вики scene2d.
в LibGDX есть различные доступные действия, готовые для вас. Они в com.badlogic.gdx.scenes.scene2d.actions
пакета. Я бы сказал, что есть 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));