Anthill Game Framework

Tiny framework for creating Flash games.

Инструменты пользователя

Инструменты сайта


guide:animations

Воспроизведение анимаций

Как уже упоминалось в прошлых разделах, в Anthill сущность анимации отделена о сущности которая может её использовать. Если посмотреть на это глазами обывателя, то можно представить себе что анимация — это некоторый источник графической информации, как, например, компакт диск с фильмом, а сущность которая её может использовать — это CD привод который её считывает и показывает.

В Anthill, в качестве привода для воспроизведения и отображения анимации используется класс AntActor. То есть в обычном понимании флеш разработчика AntActor — это фактически графический спрайт или MovieClip имеющий расширенные возможности для работы с анимациями и статическими изображениями.


Добавление анимаций

Как правило сам AntActor (актер) не содержит в себе какой-либо графической анимации и является изначально пустышкой. Поэтому первым делом после создания актера необходимо добавить в него анимацию методом addAnimation() или addAnimationFromCache() — последний метод вероятнее всего вы будете использовать чаще.

var actor:AntActor = new AntActor();
actor.addAnimationFromCache("MyAnimationName");

В актер можно добавить бесконечное количество анимаций для быстрого доступа к ним. При добавлении новой анимации в актера, добавляемая анимация не дублируется, а лишь связывается с кэшем анимаций. Поэтому количество анимаций добавленных в актера никак не сказывается на оперативной памяти занимаемой вашим приложением.

При добавлении анимации в актера вы можете указывать новое имя анимации под которым она будет доступна внутри этого самого актера. Это может быть удобно в том случае, если в хранилище анимаций у вас хранится много различных типов анимаций для разных юнитов, но конкретный актер использует только один сет.

Предположим, что вы создаете вражеского юнита гоблина, графика для которого хранится в клипах «GoblinIdle_mc», «GoblinWalk_mc», «GoblinAttack_mc». При загрузке игры вы преобразуете эти клипы в анимации и добавляете в кэш анимаций при помощи AntAssetLoader. Потом вы создаете класс EnemyGoblin который унаследован в от AntActor и вы желаете в нем использовать эти анимации под более простыми и понятными именами:

package
{
  import ru.antkarlov.anthill.*;

  public class EnemyGoblin extends AntActor
  {
    public function EnemyGoblin():void
    {
      addAnimationFromCache("GoblinIdle_mc", "idle");
      addAnimationFromCache("GoblinWalk_mc", "walk");
      addAnimationFromCache("GoblinAttack_mc", "attack");
    }
  }
}

В этом коде при создании экземпляра класса EnemyGoblin мы добавляем три анимации и при добавлении указываем новые локальные имена анимаций. Теперь для того чтобы переключатся между анимациями внутри актера, мы должны использовать имена: «idle», «walk» и «attack».


Переключение анимаций

Зная глобальное или локальное имя анимации, переключится на нее можно одной строчкой:

actor.switchAnimation("MyAnimName");

Данный подход очень похож на то как если бы вы сложили разные анимации героя в одном клипе и назначили бы для каждого ключеввого кадра свою текстовую метку, после чего переключались бы используя метки между ключевыми кадрами героя в которых расположены анимации для каждого состояния героя. Отличие заключается только в том, что в данном случае мы создаем все через код.


Воспроизведение

Воспроизведение анимаций выполняется так же легко как и воспроизведение обычных клипов:

// Запуск воспроизведения
actor.play();

// Остановка воспроизведения
actor.stop();

// Перейти на указанный кадр и начать проигрывание
actor.gotoAndPlay(4);

// Перейти на указанный кадр и остановить проигрывание
actor.gotoAndStop(4);

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

// Воспроизведение анимации в два раза медленнее.
actor.animationSpeed = 0.5;
// Нормальная скорость: 1

Проигрывать анимацию в обратную сторону:

actor.reverse = true;

Начать проигрывание анимации со случайного кадра:

actor.playRandomFrame();

Чтобы анимация воспроизвелась один раз и остановилась, вам следует использовать флаг repeat:

actor.repeat = false;

Так же вы можете узнать когда анимация полностью будет проиграна, добавив свой обработчик в событие eventComplete:

actor.eventComplete.add(onAnimationEnd);

function onAnimationEnd(aActor:AntActor):void
{
  trace("Animation end");
}

А так же:

  • actor.curentAnimation — имя текущей анимации;
  • actor.totalFrames — общее количество кадров для текущей анимации;
  • actor.currentFrame — текущий кадр для текущей анимации.

Заключение

Теперь вы знаете как загружать графику, где она хранится и как её использовать в коде. Сейчас можно немного передохнуть и перейти к следующему разделу «Отображение объектов», где вы разберетесь с внутренней структурой Anthill.


guide/animations.txt · Последние изменения: 30.04.2013 13:57 (внешнее изменение)