Разница между страницами «Table» и «Создание игры «Hidden Object Game»»

Материал из wiki.appsalutecreator.com
(Различия между страницами)
Перейти к: навигация, поиск
(Круговая таблица)
 
(Настройка системы комбо)
 
Строка 1: Строка 1:
 +
{| width="100%" 
 +
| width="40%"|[[Редактор текстовых ресурсов|Урок 6]] <<
 +
! width="20%"|[[Learning|Оглавление]]
 +
| width="40%" align="right"| >> [[Настройка миниигр|Урок 8]]
 +
|}
 +
----
 
{{TOC right}}
 
{{TOC right}}
'''Общие параметры'''
 
  
Таблица имеет набор стандартных параметров (см. описание параметров [[Object|Object]]).
+
'''Цель:'''
 +
* Изучить настройки объектов [[HiddenList]], [[HiddenObject]] и  [[Table]] для типа механики Hidden Object Game на базе создания уровня из игры Travel.
 +
 +
'''Задачи:'''
 +
* Создать уровень игры содержащей 15 поисковых объектов.
 +
* Обеспечить размещение 5 объектов для поиска.
 +
*  Создать окно, информирующее о победе или поражении, с указанием очков полученных и звёзд.
  
[[Файл:Tabletext.png]]
+
== Создание экрана и сцены в игровом проекте ==
 +
<div style="display: flex; text-align: justify;">
 +
  <div>
 +
Как и в предыдущих уроках первым делом создадим новый [[Screen|экран]] Lesson_7 для создаваемой игры и игровую [[Scene|сцену]] stg_main.
 +
На созданной сцене добавим из редактора ресурсов фон (файл bg), 10 изображений из папки hiddenobj на выбор, которые спрячем в «подходящих» местах и изменим тип с [[Image]] на '''Game mechanic''' – [[HiddenObject]].
 +
Для того, чтобы при перемещении фона позиции «спрятанных» объектов не менялись их можно добавить внутрь объекта.
  
Таблица (Тable) является универсальным объектом. Она может использоваться как:
+
[[Файл:Lesson7_bg_with_hiddens.png|400px]]
 +
  </div>
 +
  <div>
 +
[[Файл:Lesson7_hidden_objects.png|right]]
 +
  </div>
 +
</div>
  
- самостоятельный элемент включая в себя различные элементы ([[Image|Image]], [[Text|Text]], [[Button|Button]], [[Machine|Machine]] и пр.);
+
<div style="display: flex; text-align: justify;">
 +
Если вы добавляете в ресурсы изображение с прозрачностью вокруг объекта, то в редакторе оно будет обрезано, но, при размещении объекта на сцене, прозрачность будет учитываться. Благодаря этому есть возможность размещения объектов на сцене обычным перетаскиванием, если художник позаботился о нас (''подготовил изображения для того, чтобы они располагались в местах для «прятанья»'').
 +
[[Файл:Lesson7_resize_template.png|350px|right]]
 +
</div>
  
- дополнение к таким объектам как [[Patchwork|Patchwork]], [[HiddenList|HiddenList]], [[Invetory|Invetory]] и др. Выступая в роли «поля» для отображения их элементов.
+
<div style="display: flex; text-align: justify;">
 +
  <div>
 +
После добавления хидденов необходимо подготовить для них текстовое описание. Это делается в текстовом редакторе ([[Интерфейс_TextEditor|TextEditor]]).
 +
Создадим в нём папку Lesson_7 и по одной записи для каждого объекта. Также добавим для каждого объекта графическое отображение. Для этого нажмём кнопку Start [[Интерфейс_ResourceEditor|Res Editor]], перетащим соответствующее изображение в поле Image viewer и установим тип иконки Icon 1 (''правой кнопкой мыши на изображение'').
 +
  </div>
 +
[[Файл:Lesson7_text_editor.png|350px|right]]
 +
</div>
  
[[Файл:Table4.png|right]]
+
== Реализация механики HOG ==
 +
<div style="text-align: justify;">
 +
Для базовой реализации механики HOG необходимо использовать комбинацию из компонентов [[HiddenObject]], [[HiddenList]] и [[Table]].
 +
[[HiddenObject]] у нас уже есть – это наши «спрятанные» хиддены, а вот [[HiddenList]] и Table создадим с помощью контекстного меню (Создать объект после текущего...).
 +
</div>
  
[[Файл:Table5.png]]
+
<div style="display: flex; text-align: justify;">
 +
  <div>
 +
=== Настройка HiddenList ===
 +
[[HiddenList]] – это список поисковых объектов (Hidden), которые надо найти в хидден-сцене.
 +
Каждый поисковый объект на сцене связывают со списком. Объектов в списке может быть больше, чем будет показано в данной игровой сессии (поле "объектов"). В таком случае они будут выбраны случайным образом. Запоминаются те из них, по которым произошёл клик (''увеличивается счетчик их кликов''). При следующем заходе на сцену, поисковые слова сортируются по возрастанию числа кликов и снова активизируется количество спрятанных объектов, указанных в поле "количество".
 +
[[HiddenList]] определяет основные параметры для настройки [[HiddenObject]] (''например, скорость полета''). В дальнейшем, при необходимости, эти же параметры можно добавить в [[HiddenObject]], чтобы для данного объекта они "перебивали" общие значения для всех.
 +
Зададим основные параметры, такие как:  
 +
* num (поле «объектов») – максимальное количество объектов, участвующие в поиске.
 +
* table (поле «таблица») – идентификатор объекта [[Table]]. Необходим для вывода списка объектов для поиска.
 +
* counter (поле «счетчик») - счетчик, который записывает количество найденных объектов.
 +
* timer (поле «таймер (осталось)») - таймер, который показывает, сколько времени осталось.
  
[[Файл:Table6.png]]
+
Также для коректной работы необходимо настроить параметры распределения. Для этого включим равномерное распределение, и выключим итерацеонное. Также необходимо включить новейшую адаптивность для того, чтобы всьо заработало.
 +
  </div>
 +
  <div>
 +
    [[Файл:Lesson7_hiddenlist_params_.png|260px|right]]
 +
  </div>
 +
</div>
  
Для того чтобы поместить объекты в таблицу, необходимо внести их в группу таблицы в дереве проекта.
 
Заполнение таблицы происходит по столбцам. Если в таблице число видимых колонок/строчек меньше общего количества колонок/строчек, то, в таком случае, таблицу можно листать в нужном направлении.
 
  
== Основные параметры таблицы ==
+
<div style="display: flex; text-align: justify;">
 +
  <div>
  
*'''курсор''' ''(curs)'' - графический ресурс курсора текущего и всех дочерних объектов;
+
=== Настройка Table ===
*'''указатель''' ''(pointer)'' - Объект указывающий на произвольное место таблицы, в параметры (pCurCol,pCurRow,pCurIndex) будет записываться позиция ячейки на которую указывает пивот объекта. При вызове состояния flytopointer таблица будет перематываться на ячейку указанную в параметрах (pNewCol,pNewRow,pNewIndex).
+
Объект [[Table]] предназначен для вывода данных в табличном виде. [[HiddenList]] использует его для вывода списка хидденов, которые необходимо найти. Настроим таблицу для вывода элементов в формате 3 на 3, указав в графе «таблица» параметры подходящие параметры, а также зададим ширину, высоту (''объект с нулевыми размерами не отображается'') и позицию таблицы. Учитывайте, что таблица может перекрывать искомые объекты, тем самым создавая трудности для игрока.
 +
  </div>
 +
  <div>
 +
    [[Файл:Lesson7_table_params.png|260px|right]]
 +
  </div>
 +
</div>
  
[[Файл:Table new1.png|300px|right]]
 
'''Группа - таблица'''
 
  
''(Курсивом в скобках указан id параметра, или состояния)''
+
<div style="display: flex; text-align: justify;">
*'''подложка объект''' ''(bgobj)'' - Объект картинка на которой выводится таблица. Задумывалась картинка, которая будет тайлиться до размеров таблицы. В дереве не важно где хранить этот объект.
+
  <div>
*'''колонок''' ''(cols)'' - Максимальное число колонок (ячейки должны поместиться).
+
=== Настройка HiddenObject ===
*'''колонок видно''' ''(cShw)'' - Количество колонок, видимых в области вывода таблицы (если включен флаг: ширина фиксированная).
+
Как было сказано ранее, [[HiddenObject]] это наш «спрятанный» объект, который, возможно, предстоит найти. Для его настройки укажем следующие параметры:
*'''строчек''' ''(rows)'' - Максимальное число строчек (ячейки должны поместиться).
+
* txtID (поле «текстID») – название хидден-объекта, которое будет отображаться в списке. Перетаскивается мышкой из текстового редактора;
*'''строчек видно''' ''(rShw)'' - Количество строчек, видимых в области вывода таблицы (если включен флаг: высота фиксированная).
+
* list (поле «list») – ссылка на [[HiddenList]], к которому будет подключен объект, для обеспечения связи между ними;
*'''скорость листания''' ''(vel)'' - Скорость листания страниц (точек/секунду).
+
Параметр list можно задать выделив несколько [[HiddenObject]].
*'''отсечение''' ''(cut)'' - "ширина и высота" - обрезать графику таблицы по ширине и высоте; "ширина" - обрезать графику таблицы по ширине; "высота" - обрезать графику таблицы по высоте; "нет" - не обрезать.
+
  </div>
*'''добавлять по строкам''' ''(bystr)'' - 1 - добавлять по строкам; 0 - добавлять по столбцам.
+
  <div>
*'''центрировать''' ''(cntr)'' - "нет" - не центрировать (ячейки заполняются начиная от левого края таблицы); "растянуть" - если количество заполненных ячеек меньше видимых, то они равномерно растягиваются по длине таблицы (при этом только увеличивается расстояние между ячейками); "прижать к центру" - если количество заполненных ячеек меньше видимых, то эти ячейки располагаются по центру таблицы (при этом расстояния между ячейками не увеличиваются).
+
    [[Файл:Lesson7_hiddenobj_params.png|260px|right]]
*'''добавлять только видимые''' - добавлять только видимые объекты таблицы (vis=1)
+
  </div>
 +
</div>
  
'''Группа - бордюры таблицы'''
+
<blockquote>
 +
'''Внимание!''' [[HiddenList]] не будет работать без объекта Options, который вы должны были создать в предыдущем уроке, а так же без параметра id игры (Очковая система – id игры).
 +
</blockquote>
  
*'''бордюр X''' ''(dx)'' - Ширина бордюра по x (отступ во внутрь слева и справа) от подложки или от ширины объекта для отображения видимых ячеек.
+
== Упражнения ==
*'''бордюр Y''' ''(dy)'' - Ширина бордюра по y (отступ во внутрь сверху и снизу) от подложки или от высоты объекта для отображения видимых ячеек.
+
<p>1. Добавить 5 новых «спрятанных» объекта.</p>
*'''отступ X''' ''(dxC)'' - Отступ по x во внутрь (слева и справа) в ячейке, чтобы содержимое соседних ячеек не сливалось.
+
<p>2. Установить для поиска 7 объектов вместо 5.</p>
*'''отступ Y''' ''(dyC)'' - Отступ по y во внутрь (сверху и снизу) в ячейке, чтобы содержимое соседних ячеек не сливалось.
+
<p>3. Сделайте так чтобы объекты быстро улетали(исчезали) со сцены.</p>
 +
<p>4. Создайте аналогичный экран Lesson_7_1, на котором установите время игры в 20 секунд, паузу 2 секунды и переход на экран Lesson_7.</p>
  
'''Группа - смещение'''
+
== Настройка системы подсчета очков ==
 +
<div style="display: flex; text-align: justify;">
 +
Для начала настройки системы подсчёта очков создадим новую сцену stg_interface, на которой будет отображаться интерфейс пользователя.
 +
Первым делом перетащим подложку для таблицы из редактора ресурсов (файл down) и внутрь него поместим объект [[Table]], после чего добавим два объекта типа [[Counter]] (счётчик) и один [[Timer]] (таймер).
 +
Счётчик score отвечает за вывод информации о очках игрока, count – о количестве найденных объектов, а таймер – за оставшееся время игры.
 +
Обратим внимание что ни таймер ни счётчики ничего не показывают. Это связано с тем, что для них не настроен ни графический ресурс, ни шрифты (''настраивается в поле «шрифт» и работает если не указан графический ресурс'').
 +
Создайте в редакторе ресурсов анимацию и укажите её в поле res («графика – цифры нормальные» для таймера) каждого из созданных объектов. Для анимации скачайте изображения ниже, либо найдите в интернете. Кроме этого для значений счётчика можно установить минимальное (поле «min») и максимальное (поле «max») значения.
 +
[[Файл:Lesson7_timer_counter.png|right]]
 +
</div>
 +
‎[[Файл:Count 0.png]] ‎[[Файл:Count 1.png]] [[Файл:Count 2.png]] [[Файл:Count 3.png]] ‎[[Файл:Count 4.png]] [[Файл:Count 5.png]] ‎[[Файл:Count 6.png]] ‎[[Файл:Count 7.png]] ‎‎[[Файл:Count 8.png]] ‎[[Файл:Count 9.png]] ‎[[‎Файл:Coun (5).png]]
  
*'''смещ. X''' - Смещение по x объекта в ячейке.
 
*'''смещ. Y''' - Смещение по y объекта в ячейке.
 
*'''фон X''' - Смещение по x фона в ячейке.
 
*'''фон Y''' - Смещение по y фона в ячейке.
 
*'''зачеркивания X''' - Смещение по x ресурса зачеркивания ячейки.
 
*'''зачеркивания Y''' - Смещение по y ресурса зачеркивания ячейки.
 
  
'''Группа - размеры ячеек'''
+
После указания ресурса и размещения объектов на сцене свяжем их с [[HiddenList]]. Не забудем указать количество очков за найденный объект в поле «очковая система – очки», а также, обязательно, id игры (''например, hidden'').
 +
Кроме этого установим у таймера в поле «значение» тоже число что и у [[HiddenList]] в поле «время – игры» так как данные объекты считают время независимо, что может привести к случаям когда игра закончилась раньше или позже чем показал таймер.
  
*'''фон''' - Графический ресурс фона ячейки. Перетаскивается мышкой из редактора ресурсов. Может отсутствовать.
+
Настройки хидденлиста:  
*'''ширина фиксированная''' - Если равно 1, то ширины колонок будут фиксированные и определяются полем: колонок видно.
 
*'''высота фиксированная''' - Если равно 1, то высоты строчек будут фиксированные и определяются полем: строчек видно.
 
*'''сжимать''' - Если равно 1, то будет сжимать картинки без искажения пропорций, чтобы они помещались в ячейке.
 
*'''текущая колонка''' - Номер первой видимой колонки, начиная с 0-ля.
 
*'''текущая строка''' - Номер первой видимой строки, начиная с 0-ля.
 
  
'''Группа - параметры текста'''
+
[[Файл:hiddenlist1.png]]
 +
[[Файл:hiddenlist2.png]]
 +
[[Файл:hiddenlist3.png]]
 +
[[Файл:hiddenlist4.png]]
 +
[[Файл:hiddenlist5.png]]
  
*'''текстID''' ''(tTxtID)'' - Текст (id из редактора текста), отображаемый построчно в таблице.
+
<div>Настройки таймера:</div>
*'''текст''' ''(tTxt)'' - Cтрока, отображаемая в таблице.
+
<div>[[Файл:Lesson7_timer_params.png]]
*'''имя''' ''(fn)'' - Номер шрифта - целое число, начиная с 0 (порядковый номер шрифта).
+
    [[Файл:Lesson7_timer_params_.png]]</div>
*'''размер''' ''(fs)'' - Размер шрифта в поинтах.
+
<div>Важно! Для правильного отображения таймера нужно правильно указать ресурсы, как и на изображении, которые будут отрисовываться. Также на таймере будем выводить и количество минут, для лучшей асоциации с часами.</div>
*'''цвет 1''' ''(fc1)'' - Цвет текста обычного вида.
 
*'''цвет 2''' ''(fc2)'' - Цвет текста помеченной ячейки.
 
*'''alpha2''' ''(al2)'' - Прозрачность картинки в помеченной ячейке.
 
*'''поз. гориз.''' ''(cellAlHor)'' - Горизонтальное выравнивание текста (0 - нет выравнивания; 1 - прижать к левому краю; 2 - центр; 3 - к правому).
 
*'''поз. верт.''' ''(cellAlVer)'' - Вертикальное выравнивание текста (0 - нет выравнивания; 1 - прижать к верхнему краю; 2 - центр; 3 - к нижнему).
 
*'''цвет зачеркивания 1''' ''(str_c1)'' - Цвет зачеркивания текста обычного вида.
 
*'''цвет зачеркивания 2''' ''(str_c2)'' - Цвет зачеркивания текста помеченной ячейки.
 
*'''ресурс зачеркивания''' ''(crRes)'' - Графический ресурс зачеркивания ячейки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования). Может отсутствовать.
 
*'''толщина зачеркивания''' ''(str_s)'' - Толщина зачеркивания в пикселях.
 
*'''отступ''' ''(skip)'' - Вертикальное расстояние в пикселях в одной ячейке между словами в словосочетании (например в словосочетании Морская звезда, если оно не помещается горизонтально в одну ячейку - это вертикальное расстояние между Морская и звезда).
 
  
'''Группа - анимация перемещения ячеек'''
+
== Настройка системы комбо ==
*'''анимация''' - (0-выкл, 1-вкл), где 0 - быстрое перемещение ячейки без анимации,
+
<div style="text-align: justify;">
*'''скорость анимации''' - время перемещения ячейки при включенной анимации.
+
Для работы системы комбо нам понадобится объект [[Progress]]. Важно указать в нем тип линейный для коректной работы. Создадим его и настроим следующим образом (''не забываем указать размер объекта''):
 +
</div>
 +
<div>
 +
[[Файл:progress_params.png]]
 +
</div>
 +
<div style="display: flex; text-align: justify;">
 +
Для графики (заполнитель) можно использовать следующее изображение:
 +
</div>
  
== Дополнительные параметры ==
+
[[Файл:666.png]]
'''Группа - Управление'''
 
  
[[Файл:Table new2 new.PNG|450px|right]]
+
<div style="display: flex; text-align: justify;">
 +
  <div>
 +
Созданный [[Progress]] необходимо связать с объектом [[HiddenList]]. Так как система комбо связана с системой очков, то и искать соответствующие поля мы будем в «очковой системе» и, неожиданно, в «звёздах».
 +
В поле очки 3.0 выбираем аналогичное значение. Данное поле необходимо для работы системы комбо.
 +
  </div>
 +
  <div>
 +
[[Файл:Lesson7_progress_score_1.png]]
 +
[[Файл:Lesson7_progress_score_2.png]]
 +
  </div>
 +
</div>
  
Когда таблица листаемая, можно отображать индикаторы страниц. У каждого индикатора два состояния: вкл - если соответствующая страница видна на экране и выкл в противоположном случае. Нажав на соответствующий индикатор, таблица перемещается со скоростью, указанной в параметре "скорость листания"
+
<div style="text-align: justify;">
на необходимую страницу.
+
Кроме поощрения игрока дополнительными очками существует также и способ «наказать» его за ошибочные клики (звёзды – лимит ложных кликов), после которых игровая сцена должна блокироваться. Для этого существует так называемая машина-блокатор.
 +
Создадим её и настроим следующим образом:
  
*'''индикатор ВКЛ''' - Картинка включенного индикатора.
+
[[Файл:Lesson7_err_click_blocker.png]]
*'''индикатор ВЫКЛ''' - Картинка выключенного индикатора.
 
*'''левая кнопка''' - Кнопка для листания списка влево.
 
*'''правая кнопка''' - Кнопка для листания списка вправо.
 
*'''верхняя кнопка'''- Кнопка для листания списка вверх.
 
*'''нижняя кнопка''' - Кнопка для листания списка вниз.
 
*'''отступ X''' - Отступ по x от таблицы.
 
*'''отступ Y''' - Отступ по y от таблицы.
 
*'''отступ W''' - Отступ между ячейками таблицы индексов.
 
  
'''Группа - листание'''
+
а для того, чтобы машина именно блокировала сцену создадим внутри неё объект типа [[Rectangle]] закрывающий всю игровую сцену как маска (''высота и ширина объекта должна быть равна размерам сцены'').
 +
</div>
  
*'''изинг скорости листания''' ''(scrVelEasing)'' - Изинг скорости листания ([http://easings.net/ru шаблоны])
+
<div style="display: flex; text-align: justify;">
*'''макс. скорость листания''' ''(scrMaxSpeed)'' - Максимальная скорость листания при броске
+
Машина-блокатор указывается в «очковой системе» объекта [[HiddenList]].
*'''макс. длинна листания в страницах''' ''(scrMaxPages)'' - Максимальная длинна листания при броске в страницах - максимальное кол-во страниц (элементов?), на которое можно листнуть таблицу за раз
+
</div>
*'''тип листания''' - Тип листания таблицы: 0 - по страницам; 1 - в зависимости от скорости (IOS).
+
<div>
*'''листать как книгу''' - да - при нечетном колличестве добавляемых страниц будут добавляться пустые ячейки; нет - листание по колличеству видимых ячеек.
+
[[Файл:Lesson7_sel_blocker.png]]
*'''старт листания''' - Смещение в точках, начиная с которого скролим таблицу.
+
</div>
*'''гориз. листание''' - Горизонтальное листание таблицы: 0 - выключено; 1 - включено.
 
*'''вертик. листание''' - Вертикальное листание таблицы: 0 - выключено; 1 - включено.
 
*'''цикл. листание''' - Циклическое листание таблицы: 0 - выключено; 1 - включено.
 
*'''листание 360 градусов''' - Разрешено листание в двух направлениях: 0 - выключено; 1 - включено.
 
*'''затухание''' - Затухание скорости листания таблицы: 0 - выключено; 1 - включено.
 
  
== Добавляемые параметры ==
+
== Создание окна с результатами игры ==
[[Файл:Table2_1.PNG|right]]
+
<div style="display: flex; text-align: justify;">
Открывается при нажатии правой кнопки мыши в поле параметров таблицы.
+
  <div>
 +
Для создания окна вывода результатов создадим новую сцену stg_win_lose, на которой создадим [[Machine|машину состояний]] win.
 +
Данная машина состояний будет управлять инициализацией данных окна, а также его отображение и закрытием.
 +
Внутри машины создадим объекты с примерно следующей структурой:
 +
* lock – [[rectangle]]-маска для блокировки сцены игры. Должен иметь размер больший или равный сцене.
 +
* window – [[rectangle]] для фона окна.
 +
* *_points – [[Counter|счётчики]] для очков.
 +
* *_pts_lbl – [[Text|текстовое описание]] для счётчиков.
 +
* Star1 – [[Machine|машина состояний]] для звезды.
 +
* close_btn – [[Button|кнопка]] закрытия окна.
 +
  </div>
 +
  <div>
 +
[[Файл:Lesson7_result_wnd_struct.png|right]]
 +
  </div>
 +
</div>
  
[[Файл:+.png]] '''ширина настраиваемая'''
+
<div style="display: flex; text-align: justify;">
*'''ширина колонок''' - Через точку с запятой указываем ширину колонок по-порядку.
+
Для всех счётчиков установим в качестве графического ресурса анимацию чисел созданную ранее, а для окна window и кнопки закрытия добавим новые. Можно использовать ресурсы представленные ниже:
[[Файл:+.png]] '''высота настраиваемая'''
+
[[Файл:Lesson7_result_rect_params.png|right]]
*'''высота строчек''' - Через точку с запятой указываем высоту строчек по-порядку.
+
</div>
[[Файл:+.png]] '''добавить ячейку в таблицу'''
 
*'''текстID''' - Строка (id из редактора строк), отображаемая в ячейке.
 
*'''текст''' - Строка, отображаемая в ячейке.
 
*'''картинка''' - Картинка, рисуемая в ячейке (строки игнорируются).
 
  
[[Файл:+.png]] '''изменить состояние объекта''' - при тапе
+
[[Файл:0001.png]] [[Файл:0002.png]] [[Файл:0003.png]] [[Файл:0004.png]] [[Файл:0005.png]] [[Файл:0006.png]] [[Файл:0007.png]] [[Файл:0008.png]] [[Файл:0009.png]]
*'''объект''' - Строка которого мы меняем.
+
[[Файл:Lesson7_close_btn.png]][[Файл:00010.png]]
*'''состояние''' - Значение нового состояния.
 
  
[[Файл:+.png]] '''при листании влево - изменить состояние объекта'''
+
<div style="text-align: justify;">
*'''объект''' - При смене текущей страницы в таблице перевести объект в состояние из следующего поля.
+
Теперь, когда у нас есть видимое окно для вывода сообщения, расположим текст и счётчики таким образом, чтобы они соответствовали друг другу, а также установим одну звезду. Внешний вид текстовых полей и счётчиков красиво настроим самостоятельно:) (''попробуйте изменить значения в полях и посмотрите на что они влияют'')
*'''состояние''' - Новое состояние для объекта из предыдущего поля.
+
</div>
  
[[Файл:+.png]] '''при листании влево  - изменить параметр (свойство) объекта'''
+
[[Файл:Lesson7_result_wnd_template.png|450px]]
*'''объект''' - При смене текущей страницы в таблице этот объект меняет свой параметр.
 
*'''свойство''' - Параметр, который мы изменяем.
 
*'''значение''' - Новое значение параметра.
 
  
[[Файл:+.png]] '''при листании вправо - изменить состояние объекта'''
 
*'''объект''' - При смене текущей страницы в таблице перевести объект в состояние из следующего поля.
 
*'''состояние''' - Новое состояние для объекта из предыдущего поля.
 
  
[[Файл:+.png]] '''при листании вправо  - изменить параметр (свойство) объекта'''
+
=== Настройка счётчиков ===
*'''объект''' - При смене текущей страницы в таблице этот объект меняет свой параметр.
+
<div style="text-align: justify;">
*'''свойство''' - Параметр, который мы изменяем.
+
Теперь, когда всё на своих местах, настроим счётчики и текстовые поля. Объект [[HiddenList]] сохраняет в объект [[Options]] некоторые данные о игре. Для того чтобы счётчик мог воспользоваться ими (''и не только счётчик'') необходимо в поле “Уровень” каждого счётчика указать строку вида [game.]level.param
*'''значение''' - Новое значение параметра.
+
</div>
  
[[Файл:+.png]] '''при листании вниз - изменить состояние объекта'''
+
<div style="text-align: justify;">
*'''объект''' - При смене текущей страницы в таблице перевести объект в состояние из следующего поля.
+
Для нас важны следующие строки:
*'''состояние''' - Новое состояние для объекта из предыдущего поля.
+
* last_game.score30_total – Игровые очки. (счётчик game_points)
 +
* last_game.score30_time - Бонус за время. (time_points)
 +
* last_game.score30_accuracy - Бонус за аккуратность (accuracy_points)
 +
* last_game.ecmbRowMax -  Бонус за комбо (combo_points)
 +
* last_game.score30_level - Очки за уровень (game_points)
 +
</div>
  
[[Файл:+.png]] '''при листании вниз  - изменить параметр (свойство) объекта'''
+
<div style="text-align: justify;">
*'''объект''' - При смене текущей страницы в таблице этот объект меняет свой параметр.
+
Укажите данные строки в соответствующих полях, а также описание (''игровые очки и т.д.'') в текстовых полях.
*'''свойство''' - Параметр, который мы изменяем.
+
</div>
*'''значение''' - Новое значение параметра.
 
  
[[Файл:+.png]] '''при листании вверх - изменить состояние объекта'''
 
*'''объект''' - При смене текущей страницы в таблице перевести объект в состояние из следующего поля.
 
*'''состояние''' - Новое состояние для объекта из предыдущего поля.
 
  
[[Файл:+.png]] '''при листании вверх  - изменить параметр (свойство) объекта'''
+
=== Настройка звёзд ===
*'''объект''' - При смене текущей страницы в таблице этот объект меняет свой параметр.
+
<div style="text-align: justify;">
*'''свойство''' - Параметр, который мы изменяем.
+
Создадим в имеющейся звезде два состояния init и check, а затем скопируем её чтобы получилось ещё две звезды, каждую из которых настроим отдельно. Обратите внимание, что при вызове полей счетчиков мы перед last_game возможно нужно будет дописать p0, потому-что у нас очки сохраняются локально, и p0 - это имя пользователя.
*'''значение''' - Новое значение параметра.
+
</div>
  
== Состояния таблицы ==
+
Star1 (''Показать в любом случае'')
Так же мы можем управлять таблицей изменяя ее состояния.
 
  
*'''first''' - Перелистнуть на первую страницу таблицы.
+
[[Файл:Lesson7_star1.png]]
*'''last''' - Перелистнуть на последнюю страницу таблицы.
 
*'''prev''' - Перелистнуть на предыдущую страницу таблицы (влево по горизонтали).
 
*'''next''' - Перелистнуть на следующую страницу таблицы (вправо по горизонтали).
 
*'''up''' - Перелистнуть на следующую страницу таблицы (вверх по вертикали).
 
*'''down''' - Перелистнуть на предыдущую страницу таблицы (вниз по вертикали).
 
*'''refresh''' - Обновить таблицу.
 
*'''reload''' - перезаполнить таблицу. Необходимо в случае, когда объекты в таблицу добавляются путем установки таблицы в качестве родителя (передаём сразу при смене родителя, после каждой смены родителя).
 
*'''flyto''' - Таблица плавно приедет к значению curRow и curCol, если они были изменены.
 
*'''flytopointer''' - перелистывание таблицы на ячейку указанную в параметрах ''pNewCol, pNewRow, pNewIndex''. В таблице должен быть задан указатель. В параметры ''pCurCol, pCurRow, pCurIndex'' будет записываться позиция ячейки на которую указывает пивот указателя.
 
*'''movetopointer''' - мгновенное перелистывание таблицы на ячейку указанную в параметрах ''pNewCol, pNewRow, pNewIndex''. В таблице должен быть задан указатель. В параметры ''pCurCol, pCurRow, pCurIndex'' будет записываться позиция ячейки на которую указывает пивот указателя.
 
*'''find'''- состояние, по которому таблица найдет объект, указанный в параметре find_obj и результат поиска запишет в параметр found_Col и found_Row.  
 
  
Если изменить таблице значение параметра (текущего рядка или столбика), то после необходимо передать таблице состояние refresh или flyto, чтобы увидеть изменения. При refresh рядок или столбец поменяется мгновенно, при flyto таблица "приплывет" к нужному рядку или столбцу.
+
Star2 (''Если очки за аккуратность не равны 0'')
  
==Вычитываемые параметры==
+
[[Файл:star_accuracy.png]]
  
*'''maxRow''' - Количество заполненных строк.
+
Star3 (''Если очки за время не равны 0'')
*'''maxCol''' - Количество заполненных колонок.
 
*'''curRow''' - Текущая строка.
 
*'''curCol''' - Текущая колонка.
 
*'''clickRow''' - Номер последней нажатой строки.
 
*'''clickCol''' - Номер последнего нажатого столбца.
 
*'''pCurCol''' - Номер колонки, на которую указывает пивот указателя. До вызова состояний ''flytopointer'' или ''movetopointer'' pCurCol=-1.
 
*'''pCurRow''' - Номер строки, на которую указывает пивот указателя. До вызова состояний ''flytopointer'' или ''movetopointer'' pCurRow=-1.
 
*'''pCurIndex''' - Индекс ячейки, на которую указывает пивот указателя. До вызова состояний ''flytopointer'' или ''movetopointer'' pCurIndex=-1.
 
*'''find_obj''' - Объект который нужно найти в состояние (find)
 
  
== Использование таблицы для анимации ==
+
[[Файл:star_time.png]]
  
=== Использование состояния flyto ===
+
=== Настройка машины win ===
 +
<div style="text-align: justify;">
 +
Как было сказано ранее машина win отвечает за открытие/закрытие окна, а также за инициализацию всех данных. Благодаря тому что все компоненты окна расположены внутри машины для отображения/скрытия его достаточно изменить прозрачность(al) машины.
 +
Настроим машину следующим образом:
 +
</div>
  
Иногда нужно получить анимацию выезда (или другого движения) некоторого объекта (окна, рисунка и тд) на экран. Это можно сделать с помощью таблицы. Ниже приведен пример для движения вниз (с постепенным пропаданием объекта из видимости). Делаем следующее: создаем таблицу(ее параметры приведены на рисунке) нужного размера(как минимум, чтобы поместился нужный объект). В нее помещаем 2 объекта: пустой рисунок(при движении он заменит собой движущийся объект) и объект-родитель(image размером 0*0 ), в котором находится объект, который будет двигаться.
+
<div style="display: flex;">
 +
[[Файл:Lesson7_win_mch_states.png|700px]]
 +
</div>
  
'''Важно!''' Для корректного отображения объекта в таблице, нужно:
+
<div style="text-align: justify;">
* Создать таблицу и разместить ее нужным образом,.
+
Для того, чтобы машина закрывалась добавим у кнопки close_btn свойство «изменить состояние объекта» с значениями: объект – win, состояние – close.
* Разместить объект родитель посередине движущегося объекта
+
</div>
* Поместить движущийся объект в родителя
 
* Поместить родителя в таблицу
 
  
Если нужно подкорректировать положение объекта в таблице, то нужно изменять именно его координаты. Изменение координат родителя не приведет к смещению объекта на экране вьювера.
 
  
Для запуска анимации таблице нужно изменить значение текущей строки (столбца, при горизонтальном движении), после чего передать ей состояние
+
=== Настройка отображения окна при победе/поражении ===
flyto. Скорость анимации можно настроить изменяя параметр таблицы - скорость листания.
+
<div style="display: flex; text-align: justify;">
  
[[Файл:Tblanimmove.png|250px|Расположение в дереве проекта]] [[Файл:Animmovestate.png|250px|Машина, запускающая анимацию]] [[Файл:Tableanimmove.png|250px|Параметры таблицы]]
+
Для настройки отображения окна первым делом стоит подумать какие условия победы/поражения, а затем установить что: победа – игрок нашёл все объекты, поражение – истёк таймер.
 +
  </div>
 +
  <div>
 +
[[Файл:Lesson7_win_state.png]]
 +
[[Файл:Lesson7_lose_state.png]]
 +
</div>
  
В объекта-родителя можно помещать не только картинки, но и машины(которые могут реализовывать собственное движение, при этом, при попадании за край таблицы, объект постепенно уходит из зоны видимости). Также в родителя можно поместить еще одну анимацию с помощью таблицы.
 
  
 +
<div style="display: flex; text-align: justify;">
 +
Настройка вывода окна при победе настраивается в [[HiddenList]] путём добавления «разбор: изменить состояние объекта», а  окна поражения в [[Timer]] – «время истекло: изменить состояние объекта».
 +
Проверяем на работоспособность игру.
 +
</div>
  
В данном случае нужно движение по вертикали вниз. Для этого таблица имеет следующие параметры: 1 столбец, 2 строки, нелистаемая( тк не нужно взаимодействовать с объектами ). Принцип работы прост ячейка (1,0) заменяется на (0,0).
+
[[Файл:final_result.png]]
  
 +
== Упражнения ==
 +
<p>1. Добавьте на сцену победы/поражения текстовое поле, которое будет сообщать «Вы победили!» или «Вы проиграли!» для каждого из игровых исходов.</p>
 +
<p>2. Сделайте так, чтобы при закрытии окна победы/поражения игра начиналась заново.</p>
  
=== Передвижение предмета под границу окна ===
+
----
  
Такой же эффект можно достичь, если использовать ректангл. Помещаем окно в ректангл и задаем ему параметр отсечение.
+
{| width="100%" 
Использование ректангла потребляет меньше ресурсов.
+
| width="40%"|[[Редактор текстовых ресурсов|Урок 6]] <<
 +
! width="20%"|[[Learning|Оглавление]]
 +
| width="40%" align="right"| >> [[Настройка миниигр|Урок 8]]
 +
|}
  
С помощью таблицы можно ограничить зону видимости предмета на экране. При этом, при выходе за эту зону, объект пропадает из видимости постепенно (эффект вылетания).
+
[[Category:Learning]]
 
 
Для этого помещаем наше окно в родительский объект(до помещения окна в родителя, родитель должен находится в центре окна). После создаем таблицу по размеру окна, и располагаем ее на сцене нужным образом. Потом помещаем в нее объект-родитель. Теперь таблица является границами видимости окошка и его элементов. Всё, что будет за границами таблицы будет невидимо. После этого, желательно, поместить таблицу в image 0*0.
 
 
 
[[Файл:Wndtable.png|250px|Расположение в дереве проекта]][[Файл:Parwndtabl.png|250px|Параметры таблицы]]
 
 
 
В данном случае у таблицы 1 столбец, 1 строка и 1 ячейка, в которой находится наше окошко. Листаться объекты в таблице не должны, но с ними нужно взаимодействовать. Если отключить листание вообще, то объекты не реагируют на воздействие. Для того, чтобы объекты вели себя корректно, делаем следующее: включаем листание 360 градусов (по горизонтали и вертикали) и выставляем большое значение в параметра "старт листание(чтобы клик по окошку таблица не воспринимала как попытку листания)". 
 
 
 
 
 
=== Состояние Find  ===
 
Для реализации состояние find, по которому таблица найдет объект, указанный в параметре find_obj и результат поиска запишет в параметр found_Col и found_Row. Необходимо создать переменную. [[Файл:TableFindObj.png|Реализация состояние find, по которому таблица найдет объект.]]
 
 
 
== Перемещение ячеек таблицы ==
 
Параметры таблицы:
 
*'''moveCellColFrom''' - указываем номер ячейки (в столбце), которую хотим переместить
 
 
 
*'''moveCellRowFrom''' - указываем номер ячейки (в строке), которую хотим переместить
 
 
 
*'''moveCellColTo''' - указываем номер ячейки (в столбце), в которую хотим вставить нужную нам ячейку
 
 
 
*'''moveCellRowTo''' - указываем номер ячейки (в строке), в которую хотим вставить нужную нам ячейку
 
 
 
*'''moveCellAnim''' - (0-выкл, 1-вкл), где 0 - быстрое перемещение ячейки без анимации
 
 
 
*'''moveCellAnimTime''' - время перемещения ячейки при moveCellAnim = 1
 
 
 
 
 
Состояние '''moveCell''' - запуск перемещения ячейки
 
 
 
== Круговая таблица==
 
Заполняет таблицу по кругу (фактически элипс):
 
[[Файл:Econom calendar viewer.png|600px|center]]
 
 
 
[[Файл:Table circular settings.png|400px|right]]
 
*'''включить''' ('''circularTable''') - использовать искаженную круговую таблицу.;
 
*'''уход по альфе''' ('''alphaFading''') - включение ухода ячеек по альфе (чем дальше от центра, тем меньше альфа);
 
*'''элементов вокруг''' ('''elemAroundMid''') - сколько объектов отрисовывать от центрального элемента, включая центральный.;
 
*'''эллипс - ширина''' ('''ellipseA''') - ширина эллипса - коэффициент А в уравнении.;
 
*'''эллипс - глубина''' ('''ellipseB''') - глубина эллипса - коэффициент В в уравнении.;
 
*'''минимальный скейл''' ('''minVisibleScale''') - минимальный скейл ячейки для её отрисовки.;
 
*'''применение перспективы''' ('''fovApplying''') - уровень применения эффекта FOV.;
 
*'''тапательные зоны''' ('''clickHandler''') - родитель масок, которые будут прятаться при листании таблицы и они же должны обрабатывать нажатия по таблице ( в связи с тем, что круговая таблица лишь визуально перерисовывается, нажатия по элементам таблицы обрабатывает по старинке);
 
*'''выключение тапательных зон''' ('''clHDisabling''') - смещение в пикселях, начиная с которого мы прячем тапальные зоны;
 
*'''обработчик событий''' ('''eventHandler''') - слушатель листания таблицы (состояния - "fly_beg","flying","fly_end");
 
 
 
== Пример ==
 
 
 
[http://fs5.absolutist.com/files/wikisample/Table.rar Download]
 
 
 
[[Category:Main objects]]
 

Версия 14:48, 13 октября 2023

Урок 6 << Оглавление >> Урок 8

Цель:

  • Изучить настройки объектов HiddenList, HiddenObject и Table для типа механики Hidden Object Game на базе создания уровня из игры Travel.

Задачи:

  • Создать уровень игры содержащей 15 поисковых объектов.
  • Обеспечить размещение 5 объектов для поиска.
  • Создать окно, информирующее о победе или поражении, с указанием очков полученных и звёзд.

Создание экрана и сцены в игровом проекте

Как и в предыдущих уроках первым делом создадим новый экран Lesson_7 для создаваемой игры и игровую сцену stg_main. На созданной сцене добавим из редактора ресурсов фон (файл bg), 10 изображений из папки hiddenobj на выбор, которые спрячем в «подходящих» местах и изменим тип с Image на Game mechanicHiddenObject. Для того, чтобы при перемещении фона позиции «спрятанных» объектов не менялись их можно добавить внутрь объекта.

Lesson7 bg with hiddens.png

Lesson7 hidden objects.png

Если вы добавляете в ресурсы изображение с прозрачностью вокруг объекта, то в редакторе оно будет обрезано, но, при размещении объекта на сцене, прозрачность будет учитываться. Благодаря этому есть возможность размещения объектов на сцене обычным перетаскиванием, если художник позаботился о нас (подготовил изображения для того, чтобы они располагались в местах для «прятанья»).

Lesson7 resize template.png

После добавления хидденов необходимо подготовить для них текстовое описание. Это делается в текстовом редакторе (TextEditor). Создадим в нём папку Lesson_7 и по одной записи для каждого объекта. Также добавим для каждого объекта графическое отображение. Для этого нажмём кнопку Start Res Editor, перетащим соответствующее изображение в поле Image viewer и установим тип иконки Icon 1 (правой кнопкой мыши на изображение).

Lesson7 text editor.png

Реализация механики HOG

Для базовой реализации механики HOG необходимо использовать комбинацию из компонентов HiddenObject, HiddenList и Table. HiddenObject у нас уже есть – это наши «спрятанные» хиддены, а вот HiddenList и Table создадим с помощью контекстного меню (Создать объект после текущего...).

Настройка HiddenList

HiddenList – это список поисковых объектов (Hidden), которые надо найти в хидден-сцене. Каждый поисковый объект на сцене связывают со списком. Объектов в списке может быть больше, чем будет показано в данной игровой сессии (поле "объектов"). В таком случае они будут выбраны случайным образом. Запоминаются те из них, по которым произошёл клик (увеличивается счетчик их кликов). При следующем заходе на сцену, поисковые слова сортируются по возрастанию числа кликов и снова активизируется количество спрятанных объектов, указанных в поле "количество". HiddenList определяет основные параметры для настройки HiddenObject (например, скорость полета). В дальнейшем, при необходимости, эти же параметры можно добавить в HiddenObject, чтобы для данного объекта они "перебивали" общие значения для всех. Зададим основные параметры, такие как:

  • num (поле «объектов») – максимальное количество объектов, участвующие в поиске.
  • table (поле «таблица») – идентификатор объекта Table. Необходим для вывода списка объектов для поиска.
  • counter (поле «счетчик») - счетчик, который записывает количество найденных объектов.
  • timer (поле «таймер (осталось)») - таймер, который показывает, сколько времени осталось.

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

Lesson7 hiddenlist params .png


Настройка Table

Объект Table предназначен для вывода данных в табличном виде. HiddenList использует его для вывода списка хидденов, которые необходимо найти. Настроим таблицу для вывода элементов в формате 3 на 3, указав в графе «таблица» параметры подходящие параметры, а также зададим ширину, высоту (объект с нулевыми размерами не отображается) и позицию таблицы. Учитывайте, что таблица может перекрывать искомые объекты, тем самым создавая трудности для игрока.

Lesson7 table params.png


Настройка HiddenObject

Как было сказано ранее, HiddenObject это наш «спрятанный» объект, который, возможно, предстоит найти. Для его настройки укажем следующие параметры:

  • txtID (поле «текстID») – название хидден-объекта, которое будет отображаться в списке. Перетаскивается мышкой из текстового редактора;
  • list (поле «list») – ссылка на HiddenList, к которому будет подключен объект, для обеспечения связи между ними;

Параметр list можно задать выделив несколько HiddenObject.

Lesson7 hiddenobj params.png

Внимание! HiddenList не будет работать без объекта Options, который вы должны были создать в предыдущем уроке, а так же без параметра id игры (Очковая система – id игры).

Упражнения

1. Добавить 5 новых «спрятанных» объекта.

2. Установить для поиска 7 объектов вместо 5.

3. Сделайте так чтобы объекты быстро улетали(исчезали) со сцены.

4. Создайте аналогичный экран Lesson_7_1, на котором установите время игры в 20 секунд, паузу 2 секунды и переход на экран Lesson_7.

Настройка системы подсчета очков

Для начала настройки системы подсчёта очков создадим новую сцену stg_interface, на которой будет отображаться интерфейс пользователя. Первым делом перетащим подложку для таблицы из редактора ресурсов (файл down) и внутрь него поместим объект Table, после чего добавим два объекта типа Counter (счётчик) и один Timer (таймер). Счётчик score отвечает за вывод информации о очках игрока, count – о количестве найденных объектов, а таймер – за оставшееся время игры. Обратим внимание что ни таймер ни счётчики ничего не показывают. Это связано с тем, что для них не настроен ни графический ресурс, ни шрифты (настраивается в поле «шрифт» и работает если не указан графический ресурс). Создайте в редакторе ресурсов анимацию и укажите её в поле res («графика – цифры нормальные» для таймера) каждого из созданных объектов. Для анимации скачайте изображения ниже, либо найдите в интернете. Кроме этого для значений счётчика можно установить минимальное (поле «min») и максимальное (поле «max») значения.

Lesson7 timer counter.png
Count 0.pngCount 1.png Count 2.png Count 3.pngCount 4.png Count 5.pngCount 6.pngCount 7.png ‎‎Count 8.pngCount 9.pngCoun (5).png


После указания ресурса и размещения объектов на сцене свяжем их с HiddenList. Не забудем указать количество очков за найденный объект в поле «очковая система – очки», а также, обязательно, id игры (например, hidden). Кроме этого установим у таймера в поле «значение» тоже число что и у HiddenList в поле «время – игры» так как данные объекты считают время независимо, что может привести к случаям когда игра закончилась раньше или позже чем показал таймер.

Настройки хидденлиста:

Hiddenlist1.png Hiddenlist2.png Hiddenlist3.png Hiddenlist4.png Hiddenlist5.png

Настройки таймера:
Lesson7 timer params.png Lesson7 timer params .png
Важно! Для правильного отображения таймера нужно правильно указать ресурсы, как и на изображении, которые будут отрисовываться. Также на таймере будем выводить и количество минут, для лучшей асоциации с часами.

Настройка системы комбо

Для работы системы комбо нам понадобится объект Progress. Важно указать в нем тип линейный для коректной работы. Создадим его и настроим следующим образом (не забываем указать размер объекта):

Progress params.png

Для графики (заполнитель) можно использовать следующее изображение:

666.png

Созданный Progress необходимо связать с объектом HiddenList. Так как система комбо связана с системой очков, то и искать соответствующие поля мы будем в «очковой системе» и, неожиданно, в «звёздах». В поле очки 3.0 выбираем аналогичное значение. Данное поле необходимо для работы системы комбо.

Lesson7 progress score 1.png Lesson7 progress score 2.png

Кроме поощрения игрока дополнительными очками существует также и способ «наказать» его за ошибочные клики (звёзды – лимит ложных кликов), после которых игровая сцена должна блокироваться. Для этого существует так называемая машина-блокатор. Создадим её и настроим следующим образом:

Lesson7 err click blocker.png

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

Машина-блокатор указывается в «очковой системе» объекта HiddenList.

Lesson7 sel blocker.png

Создание окна с результатами игры

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

Lesson7 result wnd struct.png

Для всех счётчиков установим в качестве графического ресурса анимацию чисел созданную ранее, а для окна window и кнопки закрытия добавим новые. Можно использовать ресурсы представленные ниже:

Lesson7 result rect params.png
0001.png 0002.png 0003.png 0004.png 0005.png 0006.png 0007.png 0008.png 0009.png
Lesson7 close btn.png00010.png

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

Lesson7 result wnd template.png


Настройка счётчиков

Теперь, когда всё на своих местах, настроим счётчики и текстовые поля. Объект HiddenList сохраняет в объект Options некоторые данные о игре. Для того чтобы счётчик мог воспользоваться ими (и не только счётчик) необходимо в поле “Уровень” каждого счётчика указать строку вида [game.]level.param

Для нас важны следующие строки:

  • last_game.score30_total – Игровые очки. (счётчик game_points)
  • last_game.score30_time - Бонус за время. (time_points)
  • last_game.score30_accuracy - Бонус за аккуратность (accuracy_points)
  • last_game.ecmbRowMax - Бонус за комбо (combo_points)
  • last_game.score30_level - Очки за уровень (game_points)

Укажите данные строки в соответствующих полях, а также описание (игровые очки и т.д.) в текстовых полях.


Настройка звёзд

Создадим в имеющейся звезде два состояния init и check, а затем скопируем её чтобы получилось ещё две звезды, каждую из которых настроим отдельно. Обратите внимание, что при вызове полей счетчиков мы перед last_game возможно нужно будет дописать p0, потому-что у нас очки сохраняются локально, и p0 - это имя пользователя.

Star1 (Показать в любом случае)

Lesson7 star1.png

Star2 (Если очки за аккуратность не равны 0)

Star accuracy.png

Star3 (Если очки за время не равны 0)

Star time.png

Настройка машины win

Как было сказано ранее машина win отвечает за открытие/закрытие окна, а также за инициализацию всех данных. Благодаря тому что все компоненты окна расположены внутри машины для отображения/скрытия его достаточно изменить прозрачность(al) машины. Настроим машину следующим образом:

Lesson7 win mch states.png

Для того, чтобы машина закрывалась добавим у кнопки close_btn свойство «изменить состояние объекта» с значениями: объект – win, состояние – close.


Настройка отображения окна при победе/поражении

Для настройки отображения окна первым делом стоит подумать какие условия победы/поражения, а затем установить что: победа – игрок нашёл все объекты, поражение – истёк таймер.

Lesson7 win state.png Lesson7 lose state.png


Настройка вывода окна при победе настраивается в HiddenList путём добавления «разбор: изменить состояние объекта», а окна поражения в Timer – «время истекло: изменить состояние объекта». Проверяем на работоспособность игру.

Final result.png

Упражнения

1. Добавьте на сцену победы/поражения текстовое поле, которое будет сообщать «Вы победили!» или «Вы проиграли!» для каждого из игровых исходов.

2. Сделайте так, чтобы при закрытии окна победы/поражения игра начиналась заново.


Урок 6 << Оглавление >> Урок 8