TapTheBubble

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск

Tap The Bubble — встроенный объект редактора, имеющий определенную игровую механику, которая заключается в том, чтобы лопнуть (путем клика) как можно больше свободно летающих объектов на поле за отведенное время, набрав при этом максимальное кол-во игровых очков.

Базовые правила

  • После удаления объекта вместо него добавляется новый объект случайного типа, размера и в произвольном месте игрового поля
  • За каждый удаленный объект начисляются очки
  • Если удалять объекты подряд одного типа то увеличивается множитель очков
  • Через каждое N удаленных объектов появляется случайный бонус
  • Если игрок заполнил шкалу fever, то включается соответствующий режим
  • Так же есть ограничение на максимальное кол-во объектов на экране


Игровые режимы

Есть два режима игры, которые включаются автоматически в зависимости от действий игрока.

  • Стартовый режим - выставляется в начале игры и имеет стандартные настройки количества объектов на поле и множителя очков
  • FEVER режим - включается, если игрок сумел заполнить шкалу fever. В этом режиме кол-во объектов увеличивается. Так же ускоряется получение игровых очков. Длится T времени.


Параметры игры

  • Стартовый режим
время игры (game_time) - Время игры, после окончания которого игра заканчивается
скорость полета объектов (object_speed) - Скорость передвижения объектов (Пикселей в секунду)
множитель скорости полета (object_speed_multipl) - скорость полета объектов умножается для каждого объекта на случайное число от 1 до значения множителя
приоритет объекта случайного типа (priority_weight) - Приоритет случайного объекта (не бонуса) увеличится на этот показатель (выбирается один раз в начале игры)
стартовое количество объектов (amount_start) - число объектов на игровом поле. Постоянное в течение всего игрового времени для данного режима, поскольку новый объект появляется только после удаления предыдущего объекта.
  • FEVER режим
прогресс бар (fever_progr) - Прогресс бар, отображающий прогресс достижения режима FEVER. Создается в виде отдельного объекта на поле и указывается, как параметр выбором из выпадающего списка
набрать очков (fever_score) - Набор N быстрых очков. Быстрые очки удаляются при простое и набираются при удалении объекта. При достижении этого количества очков игроку включается режим FEVER
время режима (fever_time) - Продолжительность режима FEVER
количество объектов (fever_amount) - Максимальное количество объектов в режиме FEVER
множитель очков (fever_score_multipl) - Множитель очков в режиме FEVER
время простоя (fever_wait) - Время простоя после которого начнут сниматься очки. Учитывается если режим ещё не включен
снятие очков при простое (fever_score_decr) - Сколько очков снимать при простое (N в секунду)

Прогресс бар FEVER

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

Добавить по правой кнопке:
Ttb add fever.jpg


Типы объектов

Есть возможность добавлять произвольное кол-во типов объектов.

  • Параметры объекта
tag (tag) - Уникальный тег объекта
res (res) - Графический ресурс для отображения объекта
weight (weight) - Вероятность выбора по отношению к другим объектам

Добавить по правой кнопке:
Ttb add obj.jpg


Размеры объектов

Есть возможность добавлять произвольное кол-во размеров для объектов.

  • Параметры размера
tag (tag) - Тег размера объекта"/>
scale (scale) - масштаб графики для данного размера. Размеры графики будут умножены на это число. Позволяет использовать один ресурс графики для создания большого количества различных объектов, манипулируя параметром scale, что значительно экономит память.
weight (weight) - Вероятность выбора по отношению к другим размер
score (score) - Начисляемое кол-во очков после уничтожения объекта

Добавить по правой кнопке:
Ttb add size.jpg

Серия по цвету

Если удалять объекты подряд одного типа то увеличивается множитель очков.

  • Параметры
начало инкремента (score_start_inc) - Начало работы инкремента множителя - начинаем прибавлять с указанной серии (До этого значения инкремент будет равен 1)
инкремент множителя (score_inc) - Инкремент множителя - увеличение значения множителя при удачном клике.

Пояснение. При удалении объектов лишь одного цвета увеличивается количество очков, которые можно за него получить. Например, если начало инкремента указано, как 5, а инкремент множителя равен 3, то, удаление первых пяти шариков дает баллов score*n за каждый шарик, где n - какой по счету шарик удален. Если мы продолжим удалять шарики одного цвета, то 6-й шарик даст нам умножение score на 8, следующий - на 11 и так далее с шагом, равным инкременту множителя.

Бонусы

Бонус - это дополнительные свойства для объекта.

  • Общие настройки бонусов
частота (bonus_frequency) - Частота с которой будет появляться новый бонус (Каждые добавленные n объектов)
tag размера (bonus_scale_tag) - В этом размере объекта будут появляться бонусы. Необходимо указать tag выбранного скейла

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

  • Параметры бонуса
res (res) - Графический ресурс для отображения бонуса объекта
dx, dy (dx, dy) - Смещение графического ресурса бонуса от точки пивота родительского объекта по осям x и y.
scale (scale) - Скейл анимации бонуса внутри объекта. Умножается на скейл объекта - контейнера
взрыв в радиусе (px) (boom_radius) - Взорвать объект с радиусом в пикселях
множитель очков при взрыве (boom_score) - Множитель очков для взрываемых объектов
лимит кол-ва взрываемых объектов (boom_count) - Максимальное кол-во взрываемых объектов
ждать после взрыва (boom_wait) - После взрыва, новые объекты будут добавлены через указанный интервал
изменить время (change_time) - Увеличить или уменьшить время на заданное время
weight (weight) - Вероятность выбора по отношению к другим бонусам

Добавить по правой кнопке:
Ttb add bonus.jpg

Штрафы

За промах могут быть начислены штрафы. Промахом считается клик по полю при котором игрок не попал ни в один из объектов.

  • Параметры штрафов
очки (penalty_score) - При промахе удаляется заданное кол-во очков
время (penalty_time) - При промахе удаляется заданное кол-во секунд игрового времени


Цели

Кроме основной цели, набить как можно больше очков, можно настроить дополнительные.

  • Параметры целей:
очки (target_score) - Набрать x очков за время игры. При наборе указанных очков генерируется изменение параметра или состояния объекта.

Добавить по правой кнопке:
Ttb add target.jpg


Конец игры

Конец игры наступает когда закончилось время. На него могут повлиять бонус добавления времени или штраф снятия времени.

Добавить по правой кнопке:
Ttb add gameover.jpg


Визуализация и анимации

  • Счетчики, которые отвечают за:
очки - объект типа Counter, создается дополнительно в проекте и указывается здесь через выпадающий список
время - аналогично создается Counter для отображения времени.
  • Анимации, которые отвечают за:
взрыв бонуса:
res - ресурс анимации взрыва, перетаскивается из базы ресурсов. Поле должно быть в состоянии редактирования
dx, dy - смещение по осям внутри объекта-контейнера
scale - масштаб ресурса анимации
удаление объекта:
res - ресурс анимации удаления объекта
dx, dy - смещение по осям внутри объекта-контейнера
scale - масштаб ресурса анимации
  • Машина полученных очков

Управляет отображением очков, заработанных при удалении конкретного объекта

машина (mobj) - машина состояний, описывающая поведение отображения очков (затухание с помощью прозрачности, перемещение, вращение, масштабирование)
каунтер (cobj) - объект типа Counter, отдельно созданный в проекте
время жизни (time) - максимальное время отображения очков на экране (минимальное определяется длительностью процессов в машине состояний)

Добавить по правой кнопке:
Ttb add anim.jpg


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

Возможные состояния объекта

(pause) — пауза в игре
(resume) — продолжить игру
(clear) — очистить поле и остановить игру
(restart) — начать игру заново


Пример

Описание второго примера.

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

В начальном состоянии видна лишь сцена Start_stg. На ней расположены две кнопки. Первая кнопка запустит стандартный режим игры. Для этого откроем свойства кнопки main_btn, нажмем правой кнопкой мыши и выберем пункт изменить параметр (свойство) объекта. В пункте объект указываем сцену стандартного режима игры, она подписана, как Main_stg (главная сцена), изменяемое "свойство" будет vis (видимость) и значение этого параметра назначаем 1.

Ttb picture1.png

Разберем подробнее, что именно мы сделали. Как можно увидеть, возле каждого объекта экрана есть напоминающий чекбокс квадратик. Через него мы можем управлять видимостью объекта, делая его невидимым (unchecked) или видимым (checked). Если у объекта есть дочерние подобъекты, то их видимость также определится видимостью родительского объекта. Именно поэтому сцена Main_stg и все объекты на ней будет невидима, пока кнопкой main_btn мы не установим видимость vis=1.

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

И так, мы нажали кнопку main_btn, с надписью Start Mode на ней. Запустилась игра и вверху сцены отображается таймер, отсчитывающий время до нуля, общий счет, кнопка паузы и progress_bar, который показывает на сколько мы приближаемся к режиму FEVER. Появляются объекты разного размера и цвета. Время от времени встречаются бонусы в виде бомбочек и часов. Для бомбочек настроена анимация взрыва и радиус поражения.

Ttb picture2.png

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

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

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

Если лопать шарики достаточно быстро, то можно наблюдать, как заполняется шкала вверху экрана. Когда она заполнится - включается режим FEVER, настройки для которого, как и в случае бонусов, вносятся отдельно в объекте tap_the_bubble. Обычно этот режим должен давать дополнительные баллы, поэтому здесь зададим больше объектов и дополнительные множители баллов, получаемых при их уничтожении.

Стоит отметить, что если игровое время уже закончилось, но режим FEVER по времени еще не завершен, то игра будет длиться до окончания режима FEVER.

Ttb picture4.png

Для игры установим цель, например в 10000 очков, набрав которые отобразится содержимое текстового объекта target_complete. В учебных целях позволим себе хардкод- напишем в поле "текст" предложение target complete. Однако в реальных игровых проектах с целью поддержки многоязычных надписей следует создавать текстовую базу и от туда перетягивать ссылку в поле текстID. Чтобы текст не висел на экране всю игру, а исчез после определенного времени демонстрации, воспользуемся машиной состояний. Назовем ее machine_target и в состоянии init установим видимость объекта target_complete равной нулю (не видим). Создадим также состояние complete, где сделаем текстовый объект видимыми на 3000 миллисекунд (3 секунды). Чтобы управлять машиной из tap_the_bubble - в свойствах нажимаем правой кнопкой мыши Цель достигнута: изменить состояние объекта. Укажем, что объекту machine_target, мы хотим установить новое состояние, а именно complete. Как мы помним, переход в это состояние сделает видимой надпись Target complete на 3000 миллисекунд. Нажмите на картинку слева, чтобы увидеть внешний вид нашей машины состояний и список объектов Main_stg

Ttb picture5.png

Вернемся на нашу первую сцену, нажав кнопку back_btn1. На стартовой сцене есть еще одна кнопка, которая позволяет перейти в режим FEVER сразу (сцена Fever_stg), минуя стандартный режим. В действительности это не совсем так, применена небольшая хитрость. Поскольку у объекта tap_the_bubble нет отдельного состояния для режима FEVER, то перейти в него напрямую не возможно. Но, можно задать минимальный балл для основного режима, набрав который, перейдем в FEVER. Этот минимальный балл равен 1, его надо задать в параметре "набрать очков" в пункте режим fever в настройках объекта tap_the_bubble (0 или отрицательные значения ввести нельзя, оставить пустым это поле также не получится).

Не обязательно указывать 1 балл для параметра "набрать очков". Достаточно чтобы этот параметр был меньше или равен количеству баллов, которые мы получим с объекта, дающего минимум игровых очков. Например, если у нас есть объекты стоимостью 50, 100 и 200 очков, то нам достаточно указать 50 для перехода в FEVER, чтобы этот переход произошел в один клик.

Переход на сцену Fever_stg происходит также, как и в предыдущем случае - установкой видимости vis=1. Игровое время и время FEVER режима указываем одинаковым.

S:\!MOBILE\!!!EditorGames\Wiki_sample\tap_the_bubble.zip
S:\!MOBILE\!!!EditorGames\TapTheBubbleNewExample.zip


Файл уровней

Сейчас объект работает со следующей сигнатурой файла уровней:

Tapthebubblelevels.jpg

Для указания шарика используется цифра + цифра ( или R + цифра):

R5 - первая цифра или буква "R"(рандомно) - означает цвет объекта (фона шарика); вторая цифра означает номер вредителя или бонуса;

Пример:

R - рандомный шарик (объект);
05 - бонус/вредитель с номером 5, отрисованном на объекте с tag=="5";
R5 - бонус/вредитель с номером 5, отрисованном на рандомном шарике;