Anthill Game Framework

Tiny framework for creating Flash games.

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

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


guide:plugins

Создание и использование плагинов

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

Для создания своего плагина вам не нужны особые знания об устройстве Anthill. Единственное, что от вас требуется при создании своего плагина — это имплементация интерфейса IPlugin, который находится в пакете «ru.antkarlov.anthill.plugins.IPlugin».

Данный интерфейс обязывает ваш класс реализовать всего два метода:

  • update() — вызывается каждый кадр (при наступлении события Event.ENTER_FRAME);
  • draw(aCamera:AntCamera) — вызывается для отрисовки содержимого плагина после метода update().

Если вам не нужна функциональность какого-либо из этих методов, то просто оставьте их пустыми в своем классе плагина.

Начиная с версии 0.3.3 необходимо также реализовать еще два геттера и сеттера:

  • get tag():String, set tag(aValue:String):void — задает идентификатор (имя) для плагина;
  • get priority():int, set priority(aValue:int):void — задает приоритет плагина, чем выше значение, тем выше приоритет.

Создание плагина

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

Итак, пример кода плагина, рисующего найденный путь:

package
{
	import ru.antkarlov.anthill.*;
	import ru.antkarlov.anthill.plugins.IPlugin;
 
	public class DisplayPath extends Object
	{
		private var _path:Vector.<AntPoint>;
		private var _isVisible:Boolean;
		private var _tag:String;
		private var _priority:int;
 
		public function ()
		{
			super();
 
			_path = null;
			_isVisible = false;
			_tag = null;
			_priority = 0;
		}
 
		public function show(aPath:Vector.<AntPoint>):void
		{
			_path = aPath;
 
			// Если плагин не добавлен, то добавляем его...
			if (!_isVisible)
			{
				AntG.plugins.add(this);
				_isVisible = true;
			}
		}
 
		public function hide():void
		{
			_path = null;
 
			// Если плагин добавлен, то удаяем его...
			if (_isVisible)
			{
				AntG.plugins.remove(this);
				_isVisible = false;
			}
		}
 
		public function update():void
		{
			// В данном плагине мы ничего не обрабатываем.
		}
 
		public function draw(aCamera:AntCamera):void
		{
			// Если включена отладочная отрисовка и есть информация, что рисовать...
			if (AntG.debugDrawer != null && _path != null)
			{
				// Устанавливаем для отрисовки буфер текущей камеры.
				AntG.debugDrawer.buffer = aCamera.buffer;
 
				// Рисуем линии по точкам пути.
				var p:AntPoint;
				var i:int = 0;
				var n:int = _path.length;
				while (i < n)
				{
					p = _path[i++];
					if (i == 1)
					{
						AntG.debugDrawer.moveTo(p.x, p.y);
					}
					else
					{
						AntG.debugDrawer.lineTo(p.x, p.y);
					}
				}
			}
		}
 
		public function get tag():String { return _tag; }
		public function set tag(aValue:String):String { _tag = aValue; }
 
		public function get priority():String { return _priority; }
		public function set priority(aValue:int):String { _priority = aValue; }
 
	}
 
}

Примечание: до версии 0.3.1 интерфейс IPlugin требует реализацию методов preUpdate() и postUpdate() — их функционал не особо отличается от метода update(), поэтому с версии 0.3.1 было решено удалить их поддержку.

В данном коде у нас всего четыре метода, не считая конструктора класса. Метод show() принимает в качестве аргумента массив точек в виде AntPoint и запускает работу плагина, если он еще не запущен, то есть добавляет плагин в список плагинов Anthill для обработки и отрисовки. Метод hide() выполняет обратную функцию: освобождает массив точек и удаляет плагин из обработки. Далее идет метод update(), функции которого мы не используем в нашем плагине, а в методе draw() мы перебираем ранее указанный путь и отрисовываем линию между точками.


Использование плагина

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

var displayPath:DisplayPath = new DisplayPath();
displayPath.show(foundedWay);

Где foundedWay — это ваш массив, состоящий из координат ключевых точек пути. Чтобы отключить отображение пути и убрать плагин из обработчика, достаточно вызывать метод hide().

displayPath.hide();

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

Внимание: Обратите внимание на то, где вы добавляете плагин в обработку Anthill (то есть используете методы AntG.plugins.add() и AntG.plugins.remove()). При создании плагинов, предназначенных для публичного распространения, рекомендуется реализовывать автоматическое удаление и добавление плагина в обработку внутри самого класса плагина, чтобы вам или кому-то еще не приходилось следить за их своевременным добавлением и удалением вручную.

Все это, конечно, упрощенный пример плагина для наглядности. Как правило, плагины создаются для того, чтобы решать более объемные задачи. И при этом плагины могут состоять из любого количества классов, условие одно: основной класс вашего плагина должен имплементировать интерфейс IPlugin.

Обработка плагинов производится в отдельном потоке (образно говоря), и выполняется после обработки и рендера игровых объектов внутри Anthill. При обработке плагинов, так же, как и для рендера с процессингом объектов, считается время, которое было затрачено на обработку и отрисовку используемых вами плагинов. Таким образом вы можете увидеть, сколько времени ушло на обработку плагинов в окне производительности:

plg_perfomance.jpg

В состав Anthill с версии 0.3.0 входит два стандартных плагина: AntTaskManager и AntTween. Вы можете ознакомиться с их кодом в целях изучения и, возможно, даже улучшить их работу. А о том, как использовать стандартные плагины в своих проектах, читайте в следующих разделах: «Менеджер задач» и «Твинер».


guide/plugins.txt · Последние изменения: 22.10.2013 18:23 — Илья Уткин