Anthill Game Framework

Tiny framework for creating Flash games.

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

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


guide:display_objects

Отображение объектов

В Anthill реализована своя система отображения объектов отличающаяся от того как это сделано во Flash. То есть все визуальные объекты в Anthill не имеют никакого отношения к DisplayObject и тем более к Sprite или MovieClip. Исключением является только класс AntState который унаследован от Sprite и выступает в качестве основного контейнера содержащего буфера1) камер и реализует обратную совместимость со стандартными визуальными объектами Flash.

Визуальная структура Anthill выглядит следующим образом:

  • AntBasic — является базовым классом для динамических объектов, но при этом он не реализует практически никаких полезных функций. Одним словом это что-то вроде интерфейса для объектов Anthill с некоторыми установками.
  • AntEntity (сущность) — является продолжением базового класса AntBasic и реализует функционал для работы с группами объектов. То есть в AntEntity реализована возможность вкладывать объекты друг в друга. Как правило AntEntity является тем самым классом от которого вам следует наследовать свой класс составного объекта, например если вы создаете игровой объект из отдельных спрайтов (актеров). Или проще говоря, сущность представляет собой что-то вроде коробки для ваших игровых объектов группируемых по какому-либо принципу.

AntBasic и AntEntity по факту считаются визуальными классами, так как они содержат соотвествующие методы для отрисовки своего содержимого, но своего какого-либо графического содержимого не имеют. А вот следующие три класса являются уже полноценно визуальными объектами. Все эти классы унаследованы от AntEntity, поэтому они могут свободно вкладываться друг в друга:

  • AntActor (актер) — данный класс является основным графическим классом как для статических объектов без анимаций, так и для анимационных объектов. Актер используется для визуализации и проигрывания добавленных в него анимаций.
  • AntButton — похож по своему функционалу на актер так как принимает в качестве содержимого так же анимации AntAnimation, но основная его задача, это визуализация и обработка логики кнопок.
  • AntLabel — немного отличается от двух предыдущих визуальных классов. Основной задачей данного класса является отображение текстов.

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


Отрисовка игровых объектов

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

Все начинается с AntState — этот класс является основной точкой входа в Anthill. В классе AntState есть группа которая создается автоматически при инициализации AntState и является фактически главной группой, называется она defGroup. Чтобы создаваемые нами объекты появлялись на экране и начинали свою жизнь, нам необходимо добавить их в главную группу нашего состояния:

// Создаем актера
var actor:AntActor = new AntActor();
actor.addAnimationFromCache("MyAnim");
actor.play();

// Добавляем его в группу
defGroup.add(actor);

У класса есть переменные в которых хранятся указатели на методы добавления и удаления в группу: add() и remove(). Поэтому внутри наследуемого класса от AntState такой код тоже будет корректным:

this.add(actor);
// Или
add(actor);

По мимо основной группы в состоянии вы так же можете создавать свои группы, но помните, что они должны быть добавлены в основную группу, либо вам следует перекрыть методы состояния update() и draw() и добавить в перекрытые методы обработку основной и своих групп.


Вращение групп

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

Точка регистрации (осевая точка) у групп и у всех объектов равна нулевой координате и её нельзя изменить. Если вам необходимо сместить ось вращения, то наилучшим решением будет смещение объектов относительно точки регистрации.

Если вы двигаете группу с вложенными в нее объектами, то вложенные объекты так же будут смещатся, но при этом им не будет известно о внешних изменениях и их локальные координаты будут оставаться без изменений. С версии Anthill 0.2.0 существует понятие локальных координат и глобальных координат:

  • Локальные координаты — это положение объекта относительно его родителя, или проще говоря координаты определяющие где именно находится объект внутри своего родителя. Локальные координаты находятся в переменных x, y и angle.
  • Глобальные координаты — это положение объекта в игровом пространстве (на сцене) с учетом положения всех родителей. Глобальные координаты рассчитываются автоматически исходя из текущего положения объекта и его родителей. Глобальные координаты хранятся в переменных globalX, globalY и globalAngle.

Внимание: Если вам нужно изменить положение объкта в игровом мире, то бесполезно присваивать какое-либо значение глобальным координатам. Для корректного смещения объектов следует менять только локальные координаты или локальные координаты их родителей.


Трансформация групп

В текущей версии Anthill не реализована трансформация для вложенных объектов. То есть если вы будете задавать для сущности произвольный режим трансформации (scale.x = 0.5), то вложенные в такую группу объекты проигнорируют это изменение.


1) Буфер камеры — это Bitmap в который выполняется отрисовка всех игровых объектов.
guide/display_objects.txt · Последние изменения: 30.04.2013 13:57 (внешнее изменение)