Anthill Game Framework

Tiny framework for creating Flash games.

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

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


extensions:missions_and_awards

Missions & Awards

Название Missions & Awards
Автор Anton Karlov
Тип extension
Версия 0.2
Версия Anthill 0.1.0 или выше

Примечание: Прежде чем использовать данное расширение, ознакомьтесь с разделом «Установка».


Описание

Расширение «Missions & Awards» позволяет легко и быстро реализовать универсальную поддержку сбора статистики для создания миссий и наград. Система работает очень просто, легко имплементируется в любую игру и быстро настраивается под ваши нужды.

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


Установка

Чтобы установить данное расширение, следуйте следующим шагам:

  1. Скачайте расширение «Missions & Awards» по ссылке, представленной выше.
  2. Распакуйте содержимое архива MissionsAndAwards.zip в удобное для вас место.
  3. Скопируйте содержимое папки extensions в папку src/ru/antkarlov/anthill/extensions/
  4. Установка завершена! Теперь вы можете перейти к разделу Использование.

Если у вас возникли какие-либо проблемы с установкой расширения, напишите об этом автору.


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

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

AntStatistic.registerStat("totalKills", "add");
AntStatistic.registerStat("totalCoins", "add");

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

  • «max» или AntStatisticData.MAXIMUM — Применяется наибольшее число.
  • «min» или AntStatisticData.MINIMUM — Применяется наименьшее число.
  • «replace» или AntStatisticData.REPLACE — Значение заменяется новым числом.
  • «add» или AntStatisticData.ADD — Старое значение складывается с новым числом.

В данном случае оба поля статистики имеют тип «add» и это означает, что при каждом вызове метода трэкинга новое значение будет складываться со старым значением.

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

Теперь мы можем производить сбор статистики вызывая метод track() каждый раз когда игрок получает монетки или убивает монстра. Например:

// Убили монстра.
AntStatistic.track("totalKills", 1);
 
// Собрали несколько монет с разным номиналом.
AntStatistic.track("totalCoins", amount);

Со статистикой разобрались, и теперь можно добавить награды:

// Награда "Первая кровь".
AntStatistic.registerAward("firstBlood", "totalKills", 1);
 
// Награда "Запасливый".
AntStatistic.registerAward("thrifty", "totalCoins", 500);

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

Чтобы своевременно узнавать о процессе достижения наград или миссий, нам следует подписаться на событие AntStatistic.eventUpdateAward, например:

AntStatistic.eventUpdateAward.add(onUpdateAward);
 
function onUpdateAward(aAward:AntAwardData, aPercent:Number):void
{
  trace("Награда " + aAward.key + " достигнута на " + aPercent * 100 + "%.");
}

Чтобы своевременно узнать о моменте вручения награды и показать окно поздравления для игрока, нам следует подписаться на событие AntStatistic.eventAwardEarned, например:

AntStatistic.eventAwardEarned.add(onAwardEarned);
 
function onAwardEarned(aAward:AntAwardData):void
{
  trace("Награда " + aAward.key + " получена!");
}

Примечание: событие eventAwardEarned происходит только однажды в момент достижения награды.

Так же вы можете подписаться на событие обновления статистических данных если вы используете статистику для чего-либо еще, например, для отправки статистики на сервер или в спонсорское API.

AntStatistic.eventUpdateStat.add(onUpdateStat);
 
function onUpdateStat(aStatData:AntStatisticData):void
{
  trace("Значение " + aStatData.key + " обновилось до: " + aStatData.value);
}

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

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

// Процент будет равен значению от 0 до 1.
var percent:Number = AntStatistic.getAwardProgress("thrifty");

А так же определить получена ли уже награда или нет чтобы показать игроку его достижения:

if (AntStatistic.awardIsEarned("firstBlood"))
{
  trace("Награда \"Первая Кровь\" получена!");
}

Сохранение и загрузка

Вы можете легко сохранить данные статистики и наград на локальном компьютере пользователя используя SharedObject. Система сохранения и загрузки встроена непосредственно в класс статистики, поэтому вам остается только где-нибудь между уровнями выполнять сохраненение, например:

AntStatistic.saveData();

И при запуске игры загружать эти данные:

AntStatistic.loadData();

Чтобы наглядно проверить своевременную загрузку и сохранение данных, установите флаг AntStatistic.debugMode равным true на время отладки приложения и вы будете видеть в окне output что именно сохраняется и загружается:

AntStatistic.debugMode = true;

Внимание: Загрузку и сохранение данных следует выполнять исключительно после регистрации статистики и наград, поскольку на компьютер пользователя записываются только те значения которые изменяются, сама структура наград и статистики не сохраняется!

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


Сброс статистики

Чтобы сбросить статистику и обнулить заработанные награды, например, когда игрок начинает игру заново, следует использовать метод AntStatisitc.clearData(). При этом последнее сохранение не будет удалено пока вы не вызовете метод AntStatistic.saveData().

Корректное обнуление статистики и наград с перезаписью сохранения:

AntStatistic.clearData();
AntStatistic.saveData();

Дополнительно

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

// Регистрация награды.
var myData:Object = { title:"First Blood", desc:"You killed first enemy!", pic:FirstBlood_mc };
AntStatistic.registerAward("firstBlood", "totalKills", 1, myData);
 
// Попдписываемся на достижение любой награды.
AntStatistic.eventAwardEarned.add(onAwardEarned);
 
// Создаем всплывающее окно сообщающее игроку о том что награда получена.
function onEarnAward(aAward:AntAwardData):void
{
  var myData:Object = aAward.userData;
  makeAwardPopup(myData.title, myData.desc, new pic());
}
 
// Метод создания всплывающего окна.
function makeAwardPopup(aTitle:String, aDesc:String, aPic:MovieClip):void
{
  // Здесь ваш код создания всплывающего окна.
}

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


История изменений

Версия 0.2 от 15 Февраля 2014

  • Исправлена ошибка сбора статистики с типами MINIMUM и MAXIMUM.
  • Переделано сохранение и загрузка данных.
  • Переименованы некоторые методы и переменные, добавлены новые.

Версия 0.1 от 31 Октября 2013

  • Первая публичная версия.

extensions/missions_and_awards.txt · Последние изменения: 15.02.2014 17:18 — Anton Karlov