Memory
Memory - объект редактора, который реализует игровую механику "memory" - поиск одинаковых объектов. Имеет основные параметры объекта, но в memory нельзя помещать другие объекты - они при этом некорректно работают.
Get Started
Нам потребуется 1 картинка для "рубашки" и два набора по 6 картинок для игры
- Начнём
- откроем редактор сцен и создадим новый проект,
- добавим новый экран с именем scrMemory
- создадим в этом экране сцену stgMemory
- перейдём в редактор ресурсов
- создаём папку memo
- добавим в ней картинку для "рубашки" - назовём её cardback
- добавим там же анимацию (6 картинок) - cardpict
- также добавим анимацию (6 картинок) - cardkey
- закроем редактор ресурсов
- перейдём в редактор сцен.
- создадим в сцене stgMemory объект Memory
- установим в нём свойство время открытия в 500
- установим свойство время закрытия в 1000
- установим свойство анимация картинок в поворот по горизонтали
- добавим (по правой кнопке мыши) свойство игрок
- добавим свойство memoClassic параметры
- в свойстве memoClassic параметры изменим параметр подтип на значение картинка-ключ
- выделим параметр подложки и перетащим на него из редактора ресурсов картинку cardback
- выделим параметр легкие картинки и перетащим из редактора ресурсов анимацию cardpict
- выделим параметр ключи и перетащим из редактора ресурсов анимацию cardkey
- сохраним проект
- запустим вьювер
Основные свойства:
Размер поля
- w - Ширина объекта в пикселях.
- h - Высота объекта в пикселях.
- Строки (rows) - число ячеек по вертикали.
- Столбцы (cols) - число ячеек по горизонтали.
Звуки
- Удачный клик (sndClick) - клик на закрытую нерешенную ячейку.
- Неудачный клик (sndMissClick) - неудачный клик (картинка решенная или анимируется).
- Разбор узла (sndNode) - разобрали узел.
- Удачный разбор игры (sndWinGame) - удачный разбор игры.
- Неудачный разбор игры (sndLoseGame) - неудачный разбор игры.
Дополнительные настройки
- Отступ(x) (indentX) - отступ между картинками по горизонтали.
- Отступ (y) (indentY) - отступ между картинками по вертикали.
- Время открытия (tmOpening) - время открытия картинки.
- Время закрытия (tmClosing) - время закрытия картинки.
- Анимация картинок (animType) тип анимирования картинок:
- скалирование=0,
- переворот по горизонтали=1,
- переворот по вертикали=2,
- проявление по альфе=3.
- подлет=4
Файл уровней
- Имя файла (lvlfile) - Файл-описание уровня.
- Номер уровня (lvlnum) - Номер уровня в файле.
Параметры колебаний
- Амплитуда (osc_a) - начальная амплитуда.
- Время (osc_time) - время колебания ячейки после открытия.
- Количество (osc_num) - количество колебаний.
- Затухание (osc_beta), параметр beta уравнения x(t) = a0 * exp(-beta * t) * cos(omega * t + alpha) - чем больше, тем быстрее уменьшается амплитуда колебаний.
Параметры подлета
Параметры анимации картинок "подлет".
- Время подлета (takeoff_tm)
- Скейл подлета (takeoff_sc)
- Время переворота (revolution_tm)
- Количество переворотов (revolution_num)
- Скейл дальней стороны (far_side_sc)
Параметры хинта
- Время открытия (hint_open) - время открытия картинки.
- Время закрытия (hint_close) - время закрытия картинки.
- Время показа (hint_show) - время показа пары картинок.
- Пауза между анимациями (hint_dif) - пауза между началом анимирования первой и второй картинки.
Режим игры
- Режим (mod):
- normal
- blitz - сыграть за определенное время
- moves - сыграть за определенное количество ходов.
- Время (в блице) (modtm) - время игры в режиме blitz
- Кол-во ходов (modmv) - количество ходов для режима moves.
- Визуализатор (modvis) - объект, который отображает текущее значение времени/ходов (timer/progres).
Настройка бонусов
- актер: добавить ходы (actBonusMoves) - актер, который будет переведен в состояние fly при открытии бонуса ходы.
- актер: добавить время (actBonusTime) - актер, который будет переведен в состояние fly при открытии бонуса время.
- актер: открыть пару (actBonusMatchPair) - актер, который будет переведен в состояние fly при открытии бонуса "добаить хинт открыть пару".
- актер: показать поле (actBonusShowField) - актер, который будет переведен в состояние fly при открытии бонуса "добавить хинт показать поле".
Дополнительные настройки
- Поведение решенного узла (snb):
- оставлять картинки=0,
- убирать с поля вместе с бекграундом=1,
- устанавливать на их месте новые бекграунды=2.
- Начальная задержка (tmOpen) - начальная задержка перед стартом игры.
- Тип игры (memoType):
- классическая=0,
- найти свои=1,
- copy=2.
- Флайер (flyer) - флайер при разборе узла. Нужен в двух экземплярах.
Препоказ
- Нужен/не нужен (preShowNeeded) - включить/выключить препоказ картинок при старте игры.
- Время открытия (preShowOpenTm) - время открытия препоказа.
- Продолжительность (preShowTm) - продолжительность препоказа.
- Время закрытия (preShowCloseTm) - время закрытия препоказа.
Дополнительные параметры:
Игрок
Важно! Должен быть как минимум один игрок.
- Игрок (player) - нужен/ненужен.
- Тип (pltype) - тип игрока: человек/компьютер.
- Ключ (key) - ключ игрока.
- Имя (name) - имя игрока
- Счетчик (counter) - счетчик ходов.
- Индикатор (indicator) - индикатор хода игрока(машина)
- Вероятность (probability) - вероятность правильного хода (для компьютера).
- Память "3" (plmemo) сколько ходов помнит компьютер.
- Время на ход (pltime) время на ход (для компьютера).
Бонус
- Нужен (need) - нужен/ненужен.
- Ключ (key) - название бонуса.
- Графика (bonusImgs) - клип с графикой для бонусной карты.
- Картинка '(bonusFrame) - номер фрейма в клипе, если хотим брать случайно, то -1
- Тип бонуса (bonusType):
- открыть дополнительную карту=1
- добавить ход=2
Удачный разбор: изменить состояние объекта
- объект (obj) объект, состояние которого нужно изменить.
- состояние (st) новое состояние объекта.
Удачный разбор: изменить свойство объекта
- объект (obj) - объект, свойство которого нужно изменить.
- свойство (par) - свойство, которое нужно изменить.
- значение (val) Значение Новое значение свойства.
Неудачный разбор: изменить состояние объекта
- объект (obj) Объект Объект, состояние которого нужно изменить.
- состояние (st) Состояние Новое состояние объекта.
Неудачный разбор: изменить свойство объекта
- объект (obj) - объект, свойство которого нужно изменить.
- свойство (par) - свойство, которое нужно изменить.
- значение (val) - новое значение свойства.
Дополнительные параметры для разных типов игры:
memoClassic параметры
Цель игры - разобрать поле, убирая одинаковые картинки.
- Подтип (subType) подтип игры:
- картинка-картинка - найти пары одинаковых картинок.
- картинка-ключ - найти пары ассоциативных картинок.
- Сложность (level):
- легкая
- сложная - наличие картинок, которые труднее запомнить (белая/черная кошки).
- Повторения (duplication) повторения пар картинок:
- запрещены
- разрешены
- Подложки (bg) - анимация с картинками для подложек.
- Легкие картинки (pict0) - анимация с картинками для легкого уровня сложности.
- Сложные картинки (pict1) - анимация с картинками для сложного уровня сложности.
- Ключи (pictKey) - анимация с картинками для ключей (для подтипа картинка-ключ).
memoFindOwn параметры
Цель игры - первым разобрать свои картинки.
- Подложки (bg) - клип с картинками для подложек.
- Нейтральные картинки (pictNeutral) - клип для нейтральных картинок.
- Картинки игроков (pict) - клип для активных картинок.
- Очки за свои ячейки (scoreOwn) - очки за клик на свою картинку.
- Очки за чужие ячейки (scoreOther) - очки за клик на чужую картинку(можно указывать отрицательное значения).
- Очки за нейтральные ячейки (scoreNeutral) - очки за клик на нейтральную картинку.
- Мультипликатор (scoreMultiplier) - за первую правильно открытую ячейку 1Х очков, за вторую - 2Х и т.д.:
- нет=0,
- да=1.
- Ячейки игроков (targetNum) - количество ячеек для каждого игрока.
memoCopy параметры
Цель игры - раскопировать изображение правильных фишек.
- Обычные картинки (imgs0)
- Верно нажатые (imgs1)
- Неверно нажатые (imgs2)
- Подложки (bgs)
- id для картинок (imgId)
- id для подложек (bgId)
- Пауза перед закрытием (endLevelPause)
- Итерации (numIters)
- Массив строк (rowsArray)
- Массив столбцов (colsArray)
- Пустые ячейки emptyArray
Файл уровней
Важно! После экспорта файл уровней нужно поместить в папку к layout.xml. Иначе он не попадет в сборку и на устройстве игра работать не будет!
Возможно сделать макет уровней игры, и с помощью машины передавать memory параметр lvlnum, тем самым меняя играемый уровень. Данный параметр нужно передавать до перехода на экран с игрой.
Уровень можно формировать 2 способами:
- на основе постоянной прямоугольной решетки, при этом есть возможность задавать в решетке ячейки без плиток memory;
- произвольным размещением плиток на сцене - путем задачи координат каждой плитки относительно объекта memory.
Важно! При формировании уровня нужно следить, что бы количество игровых ячеек было парным
Структура уровня
<level> id - номер уровня rows - высота сетки cols - ширина сетки time - время игры turns - количество ходов frames - количество картинок, из которых формируется поле dup - если 1, разрешены повторения пар. Если 0, повторений будет минимально возможное количество. clipBgs - id клипа с подложками // значения клипов переносятся вручную clipImgs - id клипа с картинками для матча // представляет собой id анимации clipKeys - id клипа с ключами для матче (в режиме картинка-ключ) // которая содержат нужные картинки <rules> Описание правил для параметра "rules_preset" <rule> id - сложность остальной список параметров такой же </rule> ... </rules> <fakes> - ложные ячейки - ведут себя как и обычные ячейки, но ни с кем не матчатся <fake> pos - позиция, она же номер в последовательности, описывающей поле frame - номер фрейма (должен быть в общей анимации) </fake> </fakes> <field> - прямоугольная решетка Описание ячеек поля {0,1} </field> <field_pos> Описание ячеек поля координатами (x0,y0),(x1,y1),... Переносы строк, пробелы и прочие табы разрешаются </field_pos> </level>
Постоянная решетка
<level id="0" rows="5" cols="6" time="60000" turns="6" frames="3" dup="0" clipBgs="231" clipImgs="232" clipKeys="232"> <rules> <rule id="0" rows="4" cols="3" time="0" turns="6" frames="1" dup="0" clipBgs="231" clipImgs="232" clipKeys="232" /> </rules> <field_pos> </field_pos> <field> // где 0 - ячейка пустая 1,1,0,1,1,1, 1,1,1,1,1,1, 1,1,0,1,1,1, 1,1,1,0,1,1, 1,1,1,1,1,0 </field> </level>
Задание координат
<level id="1" rows="5" cols="6" time="60000" turns="6" frames="3" dup="0" clipBgs="231" clipImgs="232" clipKeys="232"> <rules> <rule id="0" rows="4" cols="3" time="0" turns="6" frames="1" dup="0" clipBgs="231" clipImgs="232" clipKeys="232" /> </rules> <fakes> // Нумерация ячеек начинается с верхней левой. Каждая фейковая ячейка уменьшает <fake pos="4" frame="1" /> // количество обычных ячеек. Поэтому нужно следить, что бы количество обычных <fake pos="12" frame="2" /> // ячеек всегда было парным. <fake pos="0" frame="0" /> </fakes> <field_pos> //координаты отсчитываются от точки пивота объекта memory (0,-250), (-50,-150),(50,-150), (-100,-50),(0,-50),(100,-50), (-150,50),(-50,50),(50,50),(150,50), (-200,150),(-100,150),(0,150),(100,150),(200,150) </field_pos> </level>
Бонусы
В мемори реализовано 6 бонусов:
- добавить ходы;
- добавить время;
- добавить хинт открыть пару;
- добавить хинт подсветить поле;
- открыть пару;
- подсветить поле.
Назначение первых четырех бонусов заключается в переводе соответствующего актера в состояние fly. Начисление, анимация и т.п. должно происходить в этом состоянии. Актеры устанавливаются в блоке параметров "настройка бонусов". Каждый актер должен иметь состояние fly.
5-ый и 6-ой - бонусы в действии . То есть при открытии их на поле будет сразу произведено соответствующее действие.
Установка самих бонусов происходит в файле уровней с помощью тэга bonus.
<bonus> type - тип бонуса 3 - добавляет ходы в режиме стратегии 4 - добавляет время в режиме блица 5 - добавляет хинт "сматчить пару" 6 - добавляет хинт "подсветить поле" 7 - бонус в действии: при открытии карты матчится пара 8 - бонус в действии: при открытии такой ячейки все поле подсвечивается на несколько секунд v - параметр, соответствующий бонусу (кол-во ходов, времени, время подстветки и т.п.) </bonus>
Пример.
<level id="9" rows="5" cols="3" time="34000" turns="14" frames="7" dup="0" previews="3" clipImgBg="10767" clipBgs="10776" clipImgs="13447" clipKeys="13450"> <rules> <rule id="0" clipImgBg="10767" clipBgs="10776" clipImgs="13447" clipKeys="13450"/> <rule id="1" clipImgBg="10767" clipBgs="10776" clipImgs="13524" clipKeys="13450"/> <rule id="2" clipImgBg="10767" clipBgs="10776" clipImgs="13451" clipKeys="13452"/> </rules> <bonuses> <bonus type="3" v="2"/> <bonus type="4" v="4"/> </bonuses> </level>
Для получении количества времени/ходов на стороне редактора после загрузки уровня в объект memory будет записан параметр "bonus_value".
Пример актера.
В данном примере в состоянии check мы устанавливаем нужную картинку в зависимости от количества бонусов. Состояние вызывается отдельно при загрузке уровня. В состоянии fly добавляем матчбэтлу количество ходов, считанное из параметра bonus_value. Делаем анимацию.
Хинты
У memory есть 3 вида хинтов:
- показать пару ячеек - hntt=0
- показать все ячейки - hntt=1
- убрать пару ячеек - hntt=2
Для активации хинта нужно передать memory соответствующее значение hntt и передать состояние hint. Также для memory определено состояние skip, при передаче которого игра завершается победой.
Состояния
ST_BEG = 0, //!< начать игру; может вызываться из других объектов ST_OPEN, //!< пока ничего, но вдруг захотят свистелок и перделок в начале ST_RUN, //!< играем ST_PAUSE, //!< поставить игру на паузу ST_RESUME, //!< возобновить игру с паузы ST_HINT, //!< подсказываем ST_HINT_SHOW_FIELD, ST_MATCH_PAIR, ST_SKIP, //!< скипаем ST_CLOSE, //!< завершаем игру; переходное состояние ST_END, //!< игра завершена
Пример
S:\!MOBILE\!!!EditorGames\Wiki_sample Файл: memory_sample.zip