https://wiki.appsalutecreator.com/api.php?action=feedcontributions&user=Dsyrovat&feedformat=atomwiki.appsalutecreator.com - Вклад участника [ru]2024-03-29T15:21:01ZВклад участникаMediaWiki 1.31.15https://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9327Collapse2018-01-17T09:04:21Z<p>Dsyrovat: /* Состояния */</p>
<hr />
<div>[[Object|Объект]] «Collapse» дает возможность организовать ряд игр, основанных на 3х "модах".<br><br />
Все эти механики являются играми на поле, основой, которого является регулярная решетка. Игра происходит при помощи фишек, расположенных в ячейках поля.<br><br />
<br />
[[Файл:27-12-2013 14-15-18.png|150px|thumb|right]]<br />
[[Файл:27-12-2013 16-18-35.png|250px|thumb|right]]<br />
<br />
<br />
=Свойства=<br />
'''Общие параметры'''<br />
*'''Слушатель''' - Объект типа matchbattle.<br />
*'''Время партии''' - Время игры. По окончанию которого будет засчитано поражение.<br />
<br />
<br />
=Перегруженные правила=<br />
*'''Типов фишек''' - Число разновидностей типов фишек.<br />
*'''Номер в фишках''' - Число номеров в фишках. Включая статические.<br />
*'''Номер бомбы''' - Номер фишки, который соответствует бомбе. Не будет генерироваться сам по себе.<br />
*'''Номер крестобомбы''' - Номер фишки, который соответствует крестобомбе, не будет генерироваться сам по себе.<br />
*'''Статический номер''' - Номер фишки, которую нельзя добавить к пометке. Используется, например, для игры, в которой необходимо спустить статические объекты вниз, очистив при этом поле.<br />
*'''Типов узлов''' - Число разновидностей типов нормальных узлов графа.<br />
*'''Условия пометки''' - Условия для вхождения фишек в пометку. 0 - любые фишки, 1 - должен совпадать номер, 2 - должен совпадать цвет, 3 - должен совпадать номер и цвет фишек.<br />
*'''Монотонность''' - Должны ли номера в первой пометке быть монотонной последовательностью.<br />
*'''Мин.пометка''' - Минимальное число фишек помечаемых в первой пометке.<br />
*'''Макс.пометка''' - Максимальное число фишек помечаемых в первой пометке.<br />
*'''Время пометки''' - Пометка завершается спустя заданное в этом поле время.<br />
*'''Переставлять''' - Фишки первой пометки переставляются.<br />
*'''Уменьшать''' - Фишки первой пометки уменьшают свой номер.<br />
*'''Удалять''' - Удалять ячейки первой пометки.<br />
*'''Условие удаления''' - Условия для удаления фишек: 0 - не удалять, 1 - должен совпадать тип, 2 - должен совпадать номер, 3 - должен совпадать тип ИЛИ номер, 4 - должен совпадать тип И номер.<br />
*'''Тип удаления''' - Тип удаления. 0 - заливка, 1 - вертикальные и горизонтальные линии, 2 - только сама пометка.<br />
*'''Мин.удаление''' - Минимальное число фишек, которое можно удалить.<br />
*'''Генерация без мачей''' - При генерации поля избегать готовых совпадений.<br />
*'''Проверка после осыпания''' - После осыпания фишек ещё раз перепроверить возможные комбинации ходов.<br />
*'''Добавление''' - Нужно ли добавлять фишки на поле. Или игра на разбор.<br />
*'''Схлопывание''' - Нужно ли схлопывание (Ликвидация пустых столбцов).<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
<br />
<br />
=Перегруженные цели=<br />
*'''Очистить поле''' - Уничтожить соотв. % фишек. Не стоит комбинировать с досыпанием.<br />
*'''Перекрасить поле''' - Перекрасить все ячейки поля в базовый тип.<br />
*'''Уронить статические''' - Уронить все статические фишки на дно поля.<br />
*'''Уничтожить фишек''' - Уничтожить фишек, количество через запятую.<br />
<br />
<br />
=Внешний вид=<br />
*'''Картинка''' - Графический ресурс картинки пазла.<br />
*'''Фишки''' - Не рекомендуется использовать. Заменено на добавляемые параметр, см.ниже.<br />
*'''Ячейки''' - Графический ресурс ячейки.<br />
*'''Курсор''' - Курсор для выделения фишек.<br />
*'''Колонок''' - Число колонок на которые разбивается пазл.<br />
*'''Строк''' - Число строк на которые разбивается пазл.<br />
*'''Авторазмер''' - Если 1, то для расчета размера ячеек используется картинка. 0 - размер ячейки = размер паззла / число ячеек<br />
*'''Сетка?''' - Если 1, то будет показана сетка при разрезке картинки на блоки. При 0 - сетки не будет.<br />
*'''Счетчик статических''' - Счетчик статических. Объект типа каунтер.<br />
*'''Прогресс статических''' - Прогресс-бар статических. Объект типа progress.<br />
<br />
<br />
<br />
<br />
=Времена этапов=<br />
*'''невидимости''' - Начальная пауза перед откртыием пазлы.<br />
*'''открытия''' - Время открытия исходной картинки (проявляется по alpha).<br />
*'''показа''' - Время показа исходной картинки (после проявления).<br />
*'''перемешивания''' - Время визуализации процесса перемешивания ячеек.<br />
*'''финала''' - Время финального показа пазлы после её разбора, перед переходом к закрытию.<br />
*'''закрытия''' - Время закрытия пазлы (в состояниия close, исчезает по alpha).<br />
<br />
<br />
<br />
=Времена игры=<br />
*'''перестановки''' - Время перестановки двух ячеек местами при их выборе.<br />
*'''движения''' - Время движения фишек от одного узла к соседнему.<br />
*'''движения верх''' - Время движения фишек от одного узла к соседнему при отскоке.<br />
*'''отскока''' - Время движения фишек вверх при отскоке. Т.о. при дефолтных значениях фишка отскакивает на 200 / 600 треть высоты фишки"<br />
*'''рождения и удаления''' - Время рождения и удаления фишки.<br />
*'''поворота''' - Время поворота ячейки при повторном клике на нее.<br />
*'''паузы''' - Время паузы перед началом перестановки или поворота.<br />
*'''подсказки1''' - Время за которое проявляется исходная картинка в состоянии hint.<br />
*'''подсказки2''' - Время в течении которого показывается после проявления исходная картинка в состоянии hint.<br />
*'''подсказки3''' - Время в течении которого закрывается после показа исходная картинка в состоянии hint.<br />
<br />
<br />
<br />
=Хинт при бездействии=<br />
*'''время задержки''' - Время бездействия, после которого следует показывать хинт.<br />
*'''машина''' - Объект, который будет установлен между двумя фишками.<br />
<br />
<br />
<br />
=Генерация поля=<br />
*'''min размер кластера''' - min размер кластера из фишек одного типа<br />
*'''max размер кластера''' - max размер кластера из фишек одного типа<br />
<br />
<br />
<br />
=Звуки=<br />
*'''нажатие на фишку''' - Звук нажатия на фишку.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
<br />
<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
*'''beg''' - пауза перед open<br />
*'''open''' - появляется по alpha-каналу<br />
<br />
*'''sel1''' - ждем окончания первой пометки<br />
*'''sel1_end''' - показываем окончание первой пометки<br />
*'''sel1_transf1''' - первая трансформация первой пометки<br />
*'''sel1_transf2''' - вторая трансформация первой пометки<br />
*'''sel2''' - ждем окончания второй пометки<br />
*'''sel2_end''' - показываем окончание второй пометки<br />
*'''sel2_trands1''' - первая трансформация второй пометки<br />
*'''sel2_trands2''' - вторая трансформация второй пометки<br />
<br />
*'''born''' - рождение фишек<br />
*'''move''' - перемещаем фишки <br />
*'''aftermatch''' - проверяем, не случилось ли чего-то после движения/добавления фишек<br />
*'''close''' - исчезает по alpha-каналу<br />
*'''end''' - недоступна, невидима<br />
*'''rotate_left''' - повернуть влево на 90 градусов<br />
*'''rotate_right''' - повернуть вправо на 90 градусов<br />
*'''undo''' - отменить один ход<br />
*'''remove_color''' <br />
*'''remove_single''' <br />
*'''shuffle_cols''' <br />
*'''remove_last''' - удалить последнюю кликнутую ячейку (покупное удаление одиночных)<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9326Collapse2018-01-17T09:03:26Z<p>Dsyrovat: /* Состояния */</p>
<hr />
<div>[[Object|Объект]] «Collapse» дает возможность организовать ряд игр, основанных на 3х "модах".<br><br />
Все эти механики являются играми на поле, основой, которого является регулярная решетка. Игра происходит при помощи фишек, расположенных в ячейках поля.<br><br />
<br />
[[Файл:27-12-2013 14-15-18.png|150px|thumb|right]]<br />
[[Файл:27-12-2013 16-18-35.png|250px|thumb|right]]<br />
<br />
<br />
=Свойства=<br />
'''Общие параметры'''<br />
*'''Слушатель''' - Объект типа matchbattle.<br />
*'''Время партии''' - Время игры. По окончанию которого будет засчитано поражение.<br />
<br />
<br />
=Перегруженные правила=<br />
*'''Типов фишек''' - Число разновидностей типов фишек.<br />
*'''Номер в фишках''' - Число номеров в фишках. Включая статические.<br />
*'''Номер бомбы''' - Номер фишки, который соответствует бомбе. Не будет генерироваться сам по себе.<br />
*'''Номер крестобомбы''' - Номер фишки, который соответствует крестобомбе, не будет генерироваться сам по себе.<br />
*'''Статический номер''' - Номер фишки, которую нельзя добавить к пометке. Используется, например, для игры, в которой необходимо спустить статические объекты вниз, очистив при этом поле.<br />
*'''Типов узлов''' - Число разновидностей типов нормальных узлов графа.<br />
*'''Условия пометки''' - Условия для вхождения фишек в пометку. 0 - любые фишки, 1 - должен совпадать номер, 2 - должен совпадать цвет, 3 - должен совпадать номер и цвет фишек.<br />
*'''Монотонность''' - Должны ли номера в первой пометке быть монотонной последовательностью.<br />
*'''Мин.пометка''' - Минимальное число фишек помечаемых в первой пометке.<br />
*'''Макс.пометка''' - Максимальное число фишек помечаемых в первой пометке.<br />
*'''Время пометки''' - Пометка завершается спустя заданное в этом поле время.<br />
*'''Переставлять''' - Фишки первой пометки переставляются.<br />
*'''Уменьшать''' - Фишки первой пометки уменьшают свой номер.<br />
*'''Удалять''' - Удалять ячейки первой пометки.<br />
*'''Условие удаления''' - Условия для удаления фишек: 0 - не удалять, 1 - должен совпадать тип, 2 - должен совпадать номер, 3 - должен совпадать тип ИЛИ номер, 4 - должен совпадать тип И номер.<br />
*'''Тип удаления''' - Тип удаления. 0 - заливка, 1 - вертикальные и горизонтальные линии, 2 - только сама пометка.<br />
*'''Мин.удаление''' - Минимальное число фишек, которое можно удалить.<br />
*'''Генерация без мачей''' - При генерации поля избегать готовых совпадений.<br />
*'''Проверка после осыпания''' - После осыпания фишек ещё раз перепроверить возможные комбинации ходов.<br />
*'''Добавление''' - Нужно ли добавлять фишки на поле. Или игра на разбор.<br />
*'''Схлопывание''' - Нужно ли схлопывание (Ликвидация пустых столбцов).<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
<br />
<br />
=Перегруженные цели=<br />
*'''Очистить поле''' - Уничтожить соотв. % фишек. Не стоит комбинировать с досыпанием.<br />
*'''Перекрасить поле''' - Перекрасить все ячейки поля в базовый тип.<br />
*'''Уронить статические''' - Уронить все статические фишки на дно поля.<br />
*'''Уничтожить фишек''' - Уничтожить фишек, количество через запятую.<br />
<br />
<br />
=Внешний вид=<br />
*'''Картинка''' - Графический ресурс картинки пазла.<br />
*'''Фишки''' - Не рекомендуется использовать. Заменено на добавляемые параметр, см.ниже.<br />
*'''Ячейки''' - Графический ресурс ячейки.<br />
*'''Курсор''' - Курсор для выделения фишек.<br />
*'''Колонок''' - Число колонок на которые разбивается пазл.<br />
*'''Строк''' - Число строк на которые разбивается пазл.<br />
*'''Авторазмер''' - Если 1, то для расчета размера ячеек используется картинка. 0 - размер ячейки = размер паззла / число ячеек<br />
*'''Сетка?''' - Если 1, то будет показана сетка при разрезке картинки на блоки. При 0 - сетки не будет.<br />
*'''Счетчик статических''' - Счетчик статических. Объект типа каунтер.<br />
*'''Прогресс статических''' - Прогресс-бар статических. Объект типа progress.<br />
<br />
<br />
<br />
<br />
=Времена этапов=<br />
*'''невидимости''' - Начальная пауза перед откртыием пазлы.<br />
*'''открытия''' - Время открытия исходной картинки (проявляется по alpha).<br />
*'''показа''' - Время показа исходной картинки (после проявления).<br />
*'''перемешивания''' - Время визуализации процесса перемешивания ячеек.<br />
*'''финала''' - Время финального показа пазлы после её разбора, перед переходом к закрытию.<br />
*'''закрытия''' - Время закрытия пазлы (в состояниия close, исчезает по alpha).<br />
<br />
<br />
<br />
=Времена игры=<br />
*'''перестановки''' - Время перестановки двух ячеек местами при их выборе.<br />
*'''движения''' - Время движения фишек от одного узла к соседнему.<br />
*'''движения верх''' - Время движения фишек от одного узла к соседнему при отскоке.<br />
*'''отскока''' - Время движения фишек вверх при отскоке. Т.о. при дефолтных значениях фишка отскакивает на 200 / 600 треть высоты фишки"<br />
*'''рождения и удаления''' - Время рождения и удаления фишки.<br />
*'''поворота''' - Время поворота ячейки при повторном клике на нее.<br />
*'''паузы''' - Время паузы перед началом перестановки или поворота.<br />
*'''подсказки1''' - Время за которое проявляется исходная картинка в состоянии hint.<br />
*'''подсказки2''' - Время в течении которого показывается после проявления исходная картинка в состоянии hint.<br />
*'''подсказки3''' - Время в течении которого закрывается после показа исходная картинка в состоянии hint.<br />
<br />
<br />
<br />
=Хинт при бездействии=<br />
*'''время задержки''' - Время бездействия, после которого следует показывать хинт.<br />
*'''машина''' - Объект, который будет установлен между двумя фишками.<br />
<br />
<br />
<br />
=Генерация поля=<br />
*'''min размер кластера''' - min размер кластера из фишек одного типа<br />
*'''max размер кластера''' - max размер кластера из фишек одного типа<br />
<br />
<br />
<br />
=Звуки=<br />
*'''нажатие на фишку''' - Звук нажатия на фишку.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
<br />
<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
*beg - пауза перед open<br />
*open - появляется по alpha-каналу<br />
<br />
*sel1 - ждем окончания первой пометки<br />
*sel1_end - показываем окончание первой пометки<br />
*sel1_transf1 - первая трансформация первой пометки<br />
*sel1_transf2 - вторая трансформация первой пометки<br />
*sel2 - ждем окончания второй пометки<br />
*sel2_end - показываем окончание второй пометки<br />
*sel2_trands1 - первая трансформация второй пометки<br />
*sel2_trands2 - вторая трансформация второй пометки<br />
<br />
*born - рождение фишек<br />
*move - перемещаем фишки <br />
*aftermatch - проверяем, не случилось ли чего-то после движения/добавления фишек<br />
*close - исчезает по alpha-каналу<br />
*end - недоступна, невидима<br />
*rotate_left - повернуть влево на 90 градусов<br />
*rotate_right - повернуть вправо на 90 градусов<br />
*undo - отменить один ход<br />
*remove_color <br />
*remove_single <br />
*shuffle_cols <br />
*remove_last - удалить последнюю кликнутую ячейку (покупное удаление одиночных)<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9325Collapse2018-01-17T09:03:12Z<p>Dsyrovat: /* Состояния */</p>
<hr />
<div>[[Object|Объект]] «Collapse» дает возможность организовать ряд игр, основанных на 3х "модах".<br><br />
Все эти механики являются играми на поле, основой, которого является регулярная решетка. Игра происходит при помощи фишек, расположенных в ячейках поля.<br><br />
<br />
[[Файл:27-12-2013 14-15-18.png|150px|thumb|right]]<br />
[[Файл:27-12-2013 16-18-35.png|250px|thumb|right]]<br />
<br />
<br />
=Свойства=<br />
'''Общие параметры'''<br />
*'''Слушатель''' - Объект типа matchbattle.<br />
*'''Время партии''' - Время игры. По окончанию которого будет засчитано поражение.<br />
<br />
<br />
=Перегруженные правила=<br />
*'''Типов фишек''' - Число разновидностей типов фишек.<br />
*'''Номер в фишках''' - Число номеров в фишках. Включая статические.<br />
*'''Номер бомбы''' - Номер фишки, который соответствует бомбе. Не будет генерироваться сам по себе.<br />
*'''Номер крестобомбы''' - Номер фишки, который соответствует крестобомбе, не будет генерироваться сам по себе.<br />
*'''Статический номер''' - Номер фишки, которую нельзя добавить к пометке. Используется, например, для игры, в которой необходимо спустить статические объекты вниз, очистив при этом поле.<br />
*'''Типов узлов''' - Число разновидностей типов нормальных узлов графа.<br />
*'''Условия пометки''' - Условия для вхождения фишек в пометку. 0 - любые фишки, 1 - должен совпадать номер, 2 - должен совпадать цвет, 3 - должен совпадать номер и цвет фишек.<br />
*'''Монотонность''' - Должны ли номера в первой пометке быть монотонной последовательностью.<br />
*'''Мин.пометка''' - Минимальное число фишек помечаемых в первой пометке.<br />
*'''Макс.пометка''' - Максимальное число фишек помечаемых в первой пометке.<br />
*'''Время пометки''' - Пометка завершается спустя заданное в этом поле время.<br />
*'''Переставлять''' - Фишки первой пометки переставляются.<br />
*'''Уменьшать''' - Фишки первой пометки уменьшают свой номер.<br />
*'''Удалять''' - Удалять ячейки первой пометки.<br />
*'''Условие удаления''' - Условия для удаления фишек: 0 - не удалять, 1 - должен совпадать тип, 2 - должен совпадать номер, 3 - должен совпадать тип ИЛИ номер, 4 - должен совпадать тип И номер.<br />
*'''Тип удаления''' - Тип удаления. 0 - заливка, 1 - вертикальные и горизонтальные линии, 2 - только сама пометка.<br />
*'''Мин.удаление''' - Минимальное число фишек, которое можно удалить.<br />
*'''Генерация без мачей''' - При генерации поля избегать готовых совпадений.<br />
*'''Проверка после осыпания''' - После осыпания фишек ещё раз перепроверить возможные комбинации ходов.<br />
*'''Добавление''' - Нужно ли добавлять фишки на поле. Или игра на разбор.<br />
*'''Схлопывание''' - Нужно ли схлопывание (Ликвидация пустых столбцов).<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
<br />
<br />
=Перегруженные цели=<br />
*'''Очистить поле''' - Уничтожить соотв. % фишек. Не стоит комбинировать с досыпанием.<br />
*'''Перекрасить поле''' - Перекрасить все ячейки поля в базовый тип.<br />
*'''Уронить статические''' - Уронить все статические фишки на дно поля.<br />
*'''Уничтожить фишек''' - Уничтожить фишек, количество через запятую.<br />
<br />
<br />
=Внешний вид=<br />
*'''Картинка''' - Графический ресурс картинки пазла.<br />
*'''Фишки''' - Не рекомендуется использовать. Заменено на добавляемые параметр, см.ниже.<br />
*'''Ячейки''' - Графический ресурс ячейки.<br />
*'''Курсор''' - Курсор для выделения фишек.<br />
*'''Колонок''' - Число колонок на которые разбивается пазл.<br />
*'''Строк''' - Число строк на которые разбивается пазл.<br />
*'''Авторазмер''' - Если 1, то для расчета размера ячеек используется картинка. 0 - размер ячейки = размер паззла / число ячеек<br />
*'''Сетка?''' - Если 1, то будет показана сетка при разрезке картинки на блоки. При 0 - сетки не будет.<br />
*'''Счетчик статических''' - Счетчик статических. Объект типа каунтер.<br />
*'''Прогресс статических''' - Прогресс-бар статических. Объект типа progress.<br />
<br />
<br />
<br />
<br />
=Времена этапов=<br />
*'''невидимости''' - Начальная пауза перед откртыием пазлы.<br />
*'''открытия''' - Время открытия исходной картинки (проявляется по alpha).<br />
*'''показа''' - Время показа исходной картинки (после проявления).<br />
*'''перемешивания''' - Время визуализации процесса перемешивания ячеек.<br />
*'''финала''' - Время финального показа пазлы после её разбора, перед переходом к закрытию.<br />
*'''закрытия''' - Время закрытия пазлы (в состояниия close, исчезает по alpha).<br />
<br />
<br />
<br />
=Времена игры=<br />
*'''перестановки''' - Время перестановки двух ячеек местами при их выборе.<br />
*'''движения''' - Время движения фишек от одного узла к соседнему.<br />
*'''движения верх''' - Время движения фишек от одного узла к соседнему при отскоке.<br />
*'''отскока''' - Время движения фишек вверх при отскоке. Т.о. при дефолтных значениях фишка отскакивает на 200 / 600 треть высоты фишки"<br />
*'''рождения и удаления''' - Время рождения и удаления фишки.<br />
*'''поворота''' - Время поворота ячейки при повторном клике на нее.<br />
*'''паузы''' - Время паузы перед началом перестановки или поворота.<br />
*'''подсказки1''' - Время за которое проявляется исходная картинка в состоянии hint.<br />
*'''подсказки2''' - Время в течении которого показывается после проявления исходная картинка в состоянии hint.<br />
*'''подсказки3''' - Время в течении которого закрывается после показа исходная картинка в состоянии hint.<br />
<br />
<br />
<br />
=Хинт при бездействии=<br />
*'''время задержки''' - Время бездействия, после которого следует показывать хинт.<br />
*'''машина''' - Объект, который будет установлен между двумя фишками.<br />
<br />
<br />
<br />
=Генерация поля=<br />
*'''min размер кластера''' - min размер кластера из фишек одного типа<br />
*'''max размер кластера''' - max размер кластера из фишек одного типа<br />
<br />
<br />
<br />
=Звуки=<br />
*'''нажатие на фишку''' - Звук нажатия на фишку.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
<br />
<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
*beg - пауза перед open<br />
*open - появляется по alpha-каналу<br />
<br />
*sel1 - ждем окончания первой пометки<br />
*sel1_end - показываем окончание первой пометки<br />
*sel1_transf1 - первая трансформация первой пометки<br />
*sel1_transf2 - вторая трансформация первой пометки<br />
*sel2 - ждем окончания второй пометки<br />
*sel2_end - показываем окончание второй пометки<br />
*sel2_trands1 - первая трансформация второй пометки<br />
*sel2_trands2 - вторая трансформация второй пометки<br />
<br />
*born - рождение фишек<br />
*move - перемещаем фишки <br />
*aftermatch - проверяем, не случилось ли чего-то после движения/добавления фишек<br />
*close - исчезает по alpha-каналу<br />
*end - недоступна, невидима<br />
*rotate_left - повернуть влево на 90 градусов<br />
*rotate_right - повернуть вправо на 90 градусов<br />
*undo - отменить один ход<br />
*remove_color -<br />
*remove_single -<br />
*shuffle_cols -<br />
*remove_last - удалить последнюю кликнутую ячейку (покупное удаление одиночных)<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9324Collapse2018-01-17T09:01:31Z<p>Dsyrovat: </p>
<hr />
<div>[[Object|Объект]] «Collapse» дает возможность организовать ряд игр, основанных на 3х "модах".<br><br />
Все эти механики являются играми на поле, основой, которого является регулярная решетка. Игра происходит при помощи фишек, расположенных в ячейках поля.<br><br />
<br />
[[Файл:27-12-2013 14-15-18.png|150px|thumb|right]]<br />
[[Файл:27-12-2013 16-18-35.png|250px|thumb|right]]<br />
<br />
<br />
=Свойства=<br />
'''Общие параметры'''<br />
*'''Слушатель''' - Объект типа matchbattle.<br />
*'''Время партии''' - Время игры. По окончанию которого будет засчитано поражение.<br />
<br />
<br />
=Перегруженные правила=<br />
*'''Типов фишек''' - Число разновидностей типов фишек.<br />
*'''Номер в фишках''' - Число номеров в фишках. Включая статические.<br />
*'''Номер бомбы''' - Номер фишки, который соответствует бомбе. Не будет генерироваться сам по себе.<br />
*'''Номер крестобомбы''' - Номер фишки, который соответствует крестобомбе, не будет генерироваться сам по себе.<br />
*'''Статический номер''' - Номер фишки, которую нельзя добавить к пометке. Используется, например, для игры, в которой необходимо спустить статические объекты вниз, очистив при этом поле.<br />
*'''Типов узлов''' - Число разновидностей типов нормальных узлов графа.<br />
*'''Условия пометки''' - Условия для вхождения фишек в пометку. 0 - любые фишки, 1 - должен совпадать номер, 2 - должен совпадать цвет, 3 - должен совпадать номер и цвет фишек.<br />
*'''Монотонность''' - Должны ли номера в первой пометке быть монотонной последовательностью.<br />
*'''Мин.пометка''' - Минимальное число фишек помечаемых в первой пометке.<br />
*'''Макс.пометка''' - Максимальное число фишек помечаемых в первой пометке.<br />
*'''Время пометки''' - Пометка завершается спустя заданное в этом поле время.<br />
*'''Переставлять''' - Фишки первой пометки переставляются.<br />
*'''Уменьшать''' - Фишки первой пометки уменьшают свой номер.<br />
*'''Удалять''' - Удалять ячейки первой пометки.<br />
*'''Условие удаления''' - Условия для удаления фишек: 0 - не удалять, 1 - должен совпадать тип, 2 - должен совпадать номер, 3 - должен совпадать тип ИЛИ номер, 4 - должен совпадать тип И номер.<br />
*'''Тип удаления''' - Тип удаления. 0 - заливка, 1 - вертикальные и горизонтальные линии, 2 - только сама пометка.<br />
*'''Мин.удаление''' - Минимальное число фишек, которое можно удалить.<br />
*'''Генерация без мачей''' - При генерации поля избегать готовых совпадений.<br />
*'''Проверка после осыпания''' - После осыпания фишек ещё раз перепроверить возможные комбинации ходов.<br />
*'''Добавление''' - Нужно ли добавлять фишки на поле. Или игра на разбор.<br />
*'''Схлопывание''' - Нужно ли схлопывание (Ликвидация пустых столбцов).<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
<br />
<br />
=Перегруженные цели=<br />
*'''Очистить поле''' - Уничтожить соотв. % фишек. Не стоит комбинировать с досыпанием.<br />
*'''Перекрасить поле''' - Перекрасить все ячейки поля в базовый тип.<br />
*'''Уронить статические''' - Уронить все статические фишки на дно поля.<br />
*'''Уничтожить фишек''' - Уничтожить фишек, количество через запятую.<br />
<br />
<br />
=Внешний вид=<br />
*'''Картинка''' - Графический ресурс картинки пазла.<br />
*'''Фишки''' - Не рекомендуется использовать. Заменено на добавляемые параметр, см.ниже.<br />
*'''Ячейки''' - Графический ресурс ячейки.<br />
*'''Курсор''' - Курсор для выделения фишек.<br />
*'''Колонок''' - Число колонок на которые разбивается пазл.<br />
*'''Строк''' - Число строк на которые разбивается пазл.<br />
*'''Авторазмер''' - Если 1, то для расчета размера ячеек используется картинка. 0 - размер ячейки = размер паззла / число ячеек<br />
*'''Сетка?''' - Если 1, то будет показана сетка при разрезке картинки на блоки. При 0 - сетки не будет.<br />
*'''Счетчик статических''' - Счетчик статических. Объект типа каунтер.<br />
*'''Прогресс статических''' - Прогресс-бар статических. Объект типа progress.<br />
<br />
<br />
<br />
<br />
=Времена этапов=<br />
*'''невидимости''' - Начальная пауза перед откртыием пазлы.<br />
*'''открытия''' - Время открытия исходной картинки (проявляется по alpha).<br />
*'''показа''' - Время показа исходной картинки (после проявления).<br />
*'''перемешивания''' - Время визуализации процесса перемешивания ячеек.<br />
*'''финала''' - Время финального показа пазлы после её разбора, перед переходом к закрытию.<br />
*'''закрытия''' - Время закрытия пазлы (в состояниия close, исчезает по alpha).<br />
<br />
<br />
<br />
=Времена игры=<br />
*'''перестановки''' - Время перестановки двух ячеек местами при их выборе.<br />
*'''движения''' - Время движения фишек от одного узла к соседнему.<br />
*'''движения верх''' - Время движения фишек от одного узла к соседнему при отскоке.<br />
*'''отскока''' - Время движения фишек вверх при отскоке. Т.о. при дефолтных значениях фишка отскакивает на 200 / 600 треть высоты фишки"<br />
*'''рождения и удаления''' - Время рождения и удаления фишки.<br />
*'''поворота''' - Время поворота ячейки при повторном клике на нее.<br />
*'''паузы''' - Время паузы перед началом перестановки или поворота.<br />
*'''подсказки1''' - Время за которое проявляется исходная картинка в состоянии hint.<br />
*'''подсказки2''' - Время в течении которого показывается после проявления исходная картинка в состоянии hint.<br />
*'''подсказки3''' - Время в течении которого закрывается после показа исходная картинка в состоянии hint.<br />
<br />
<br />
<br />
=Хинт при бездействии=<br />
*'''время задержки''' - Время бездействия, после которого следует показывать хинт.<br />
*'''машина''' - Объект, который будет установлен между двумя фишками.<br />
<br />
<br />
<br />
=Генерация поля=<br />
*'''min размер кластера''' - min размер кластера из фишек одного типа<br />
*'''max размер кластера''' - max размер кластера из фишек одного типа<br />
<br />
<br />
<br />
=Звуки=<br />
*'''нажатие на фишку''' - Звук нажатия на фишку.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
<br />
<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
*beg пауза перед open<br />
*open появляется по alpha-каналу<br />
<br />
*sel1 ждем окончания первой пометки<br />
*sel1_end показываем окончание первой пометки<br />
*sel1_transf1 первая трансформация первой пометки<br />
*sel1_transf2 вторая трансформация первой пометки<br />
*sel2 ждем окончания второй пометки<br />
*sel2_end показываем окончание второй пометки<br />
*sel2_trands1 первая трансформация второй пометки<br />
*sel2_trands2 вторая трансформация второй пометки<br />
<br />
*born рождение фишек<br />
*move перемещаем фишки <br />
*aftermatch проверяем, не случилось ли чего-то после движения/добавления фишек<br />
*close исчезает по alpha-каналу<br />
*end недоступна, невидима<br />
*rotate_left повернуть влево на 90 градусов<br />
*rotate_right повернуть вправо на 90 градусов<br />
*undo отменить один ход<br />
*remove_color<br />
*remove_single<br />
*shuffle_cols<br />
*remove_last удалить последнюю кликнутую ячейку (покупное удаление одиночных)<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9323Collapse2018-01-17T09:00:42Z<p>Dsyrovat: /* Состояния */</p>
<hr />
<div>[[Object|Объект]] «Collapse» дает возможность организовать ряд игр, основанных на 3х "модах".<br><br />
Все эти механики являются играми на поле, основой, которого является регулярная решетка. Игра происходит при помощи фишек, расположенных в ячейках поля.<br><br />
<br />
[[Файл:27-12-2013 14-15-18.png|150px|thumb|right]]<br />
[[Файл:27-12-2013 16-18-35.png|250px|thumb|right]]<br />
<br />
<br />
=Свойства=<br />
'''Общие параметры'''<br />
*'''Слушатель''' - Объект типа matchbattle.<br />
*'''Время партии''' - Время игры. По окончанию которого будет засчитано поражение.<br />
<br />
<br />
=Перегруженные правила=<br />
*'''Типов фишек''' - Число разновидностей типов фишек.<br />
*'''Номер в фишках''' - Число номеров в фишках. Включая статические.<br />
*'''Номер бомбы''' - Номер фишки, который соответствует бомбе. Не будет генерироваться сам по себе.<br />
*'''Номер крестобомбы''' - Номер фишки, который соответствует крестобомбе, не будет генерироваться сам по себе.<br />
*'''Статический номер''' - Номер фишки, которую нельзя добавить к пометке. Используется, например, для игры, в которой необходимо спустить статические объекты вниз, очистив при этом поле.<br />
*'''Типов узлов''' - Число разновидностей типов нормальных узлов графа.<br />
*'''Условия пометки''' - Условия для вхождения фишек в пометку. 0 - любые фишки, 1 - должен совпадать номер, 2 - должен совпадать цвет, 3 - должен совпадать номер и цвет фишек.<br />
*'''Монотонность''' - Должны ли номера в первой пометке быть монотонной последовательностью.<br />
*'''Мин.пометка''' - Минимальное число фишек помечаемых в первой пометке.<br />
*'''Макс.пометка''' - Максимальное число фишек помечаемых в первой пометке.<br />
*'''Время пометки''' - Пометка завершается спустя заданное в этом поле время.<br />
*'''Переставлять''' - Фишки первой пометки переставляются.<br />
*'''Уменьшать''' - Фишки первой пометки уменьшают свой номер.<br />
*'''Удалять''' - Удалять ячейки первой пометки.<br />
*'''Условие удаления''' - Условия для удаления фишек: 0 - не удалять, 1 - должен совпадать тип, 2 - должен совпадать номер, 3 - должен совпадать тип ИЛИ номер, 4 - должен совпадать тип И номер.<br />
*'''Тип удаления''' - Тип удаления. 0 - заливка, 1 - вертикальные и горизонтальные линии, 2 - только сама пометка.<br />
*'''Мин.удаление''' - Минимальное число фишек, которое можно удалить.<br />
*'''Генерация без мачей''' - При генерации поля избегать готовых совпадений.<br />
*'''Проверка после осыпания''' - После осыпания фишек ещё раз перепроверить возможные комбинации ходов.<br />
*'''Добавление''' - Нужно ли добавлять фишки на поле. Или игра на разбор.<br />
*'''Схлопывание''' - Нужно ли схлопывание (Ликвидация пустых столбцов).<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
<br />
<br />
=Перегруженные цели=<br />
*'''Очистить поле''' - Уничтожить соотв. % фишек. Не стоит комбинировать с досыпанием.<br />
*'''Перекрасить поле''' - Перекрасить все ячейки поля в базовый тип.<br />
*'''Уронить статические''' - Уронить все статические фишки на дно поля.<br />
*'''Уничтожить фишек''' - Уничтожить фишек, количество через запятую.<br />
<br />
<br />
=Внешний вид=<br />
*'''Картинка''' - Графический ресурс картинки пазла.<br />
*'''Фишки''' - Не рекомендуется использовать. Заменено на добавляемые параметр, см.ниже.<br />
*'''Ячейки''' - Графический ресурс ячейки.<br />
*'''Курсор''' - Курсор для выделения фишек.<br />
*'''Колонок''' - Число колонок на которые разбивается пазл.<br />
*'''Строк''' - Число строк на которые разбивается пазл.<br />
*'''Авторазмер''' - Если 1, то для расчета размера ячеек используется картинка. 0 - размер ячейки = размер паззла / число ячеек<br />
*'''Сетка?''' - Если 1, то будет показана сетка при разрезке картинки на блоки. При 0 - сетки не будет.<br />
*'''Счетчик статических''' - Счетчик статических. Объект типа каунтер.<br />
*'''Прогресс статических''' - Прогресс-бар статических. Объект типа progress.<br />
<br />
<br />
<br />
<br />
=Времена этапов=<br />
*'''невидимости''' - Начальная пауза перед откртыием пазлы.<br />
*'''открытия''' - Время открытия исходной картинки (проявляется по alpha).<br />
*'''показа''' - Время показа исходной картинки (после проявления).<br />
*'''перемешивания''' - Время визуализации процесса перемешивания ячеек.<br />
*'''финала''' - Время финального показа пазлы после её разбора, перед переходом к закрытию.<br />
*'''закрытия''' - Время закрытия пазлы (в состояниия close, исчезает по alpha).<br />
<br />
<br />
<br />
=Времена игры=<br />
*'''перестановки''' - Время перестановки двух ячеек местами при их выборе.<br />
*'''движения''' - Время движения фишек от одного узла к соседнему.<br />
*'''движения верх''' - Время движения фишек от одного узла к соседнему при отскоке.<br />
*'''отскока''' - Время движения фишек вверх при отскоке. Т.о. при дефолтных значениях фишка отскакивает на 200 / 600 треть высоты фишки"<br />
*'''рождения и удаления''' - Время рождения и удаления фишки.<br />
*'''поворота''' - Время поворота ячейки при повторном клике на нее.<br />
*'''паузы''' - Время паузы перед началом перестановки или поворота.<br />
*'''подсказки1''' - Время за которое проявляется исходная картинка в состоянии hint.<br />
*'''подсказки2''' - Время в течении которого показывается после проявления исходная картинка в состоянии hint.<br />
*'''подсказки3''' - Время в течении которого закрывается после показа исходная картинка в состоянии hint.<br />
<br />
<br />
<br />
=Хинт при бездействии=<br />
*'''время задержки''' - Время бездействия, после которого следует показывать хинт.<br />
*'''машина''' - Объект, который будет установлен между двумя фишками.<br />
<br />
<br />
<br />
=Генерация поля=<br />
*'''min размер кластера''' - min размер кластера из фишек одного типа<br />
*'''max размер кластера''' - max размер кластера из фишек одного типа<br />
<br />
<br />
<br />
=Звуки=<br />
*'''нажатие на фишку''' - Звук нажатия на фишку.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
<br />
<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
beg пауза перед open<br />
open появляется по alpha-каналу<br />
<br />
sel1 ждем окончания первой пометки<br />
sel1_end показываем окончание первой пометки<br />
sel1_transf1 первая трансформация первой пометки<br />
sel1_transf2 вторая трансформация первой пометки<br />
sel2 ждем окончания второй пометки<br />
sel2_end показываем окончание второй пометки<br />
sel2_trands1 первая трансформация второй пометки<br />
sel2_trands2 вторая трансформация второй пометки<br />
<br />
born рождение фишек<br />
move перемещаем фишки <br />
aftermatch проверяем, не случилось ли чего-то после движения/добавления фишек<br />
close исчезает по alpha-каналу<br />
end недоступна, невидима<br />
rotate_left повернуть влево на 90 градусов<br />
rotate_right повернуть вправо на 90 градусов<br />
undo отменить один ход<br />
remove_color<br />
remove_single<br />
shuffle_cols<br />
remove_last удалить последнюю кликнутую ячейку (покупное удаление одиночных)<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9322Collapse2018-01-17T08:59:39Z<p>Dsyrovat: </p>
<hr />
<div>[[Object|Объект]] «Collapse» дает возможность организовать ряд игр, основанных на 3х "модах".<br><br />
Все эти механики являются играми на поле, основой, которого является регулярная решетка. Игра происходит при помощи фишек, расположенных в ячейках поля.<br><br />
<br />
[[Файл:27-12-2013 14-15-18.png|150px|thumb|right]]<br />
[[Файл:27-12-2013 16-18-35.png|250px|thumb|right]]<br />
<br />
<br />
=Свойства=<br />
'''Общие параметры'''<br />
*'''Слушатель''' - Объект типа matchbattle.<br />
*'''Время партии''' - Время игры. По окончанию которого будет засчитано поражение.<br />
<br />
<br />
=Перегруженные правила=<br />
*'''Типов фишек''' - Число разновидностей типов фишек.<br />
*'''Номер в фишках''' - Число номеров в фишках. Включая статические.<br />
*'''Номер бомбы''' - Номер фишки, который соответствует бомбе. Не будет генерироваться сам по себе.<br />
*'''Номер крестобомбы''' - Номер фишки, который соответствует крестобомбе, не будет генерироваться сам по себе.<br />
*'''Статический номер''' - Номер фишки, которую нельзя добавить к пометке. Используется, например, для игры, в которой необходимо спустить статические объекты вниз, очистив при этом поле.<br />
*'''Типов узлов''' - Число разновидностей типов нормальных узлов графа.<br />
*'''Условия пометки''' - Условия для вхождения фишек в пометку. 0 - любые фишки, 1 - должен совпадать номер, 2 - должен совпадать цвет, 3 - должен совпадать номер и цвет фишек.<br />
*'''Монотонность''' - Должны ли номера в первой пометке быть монотонной последовательностью.<br />
*'''Мин.пометка''' - Минимальное число фишек помечаемых в первой пометке.<br />
*'''Макс.пометка''' - Максимальное число фишек помечаемых в первой пометке.<br />
*'''Время пометки''' - Пометка завершается спустя заданное в этом поле время.<br />
*'''Переставлять''' - Фишки первой пометки переставляются.<br />
*'''Уменьшать''' - Фишки первой пометки уменьшают свой номер.<br />
*'''Удалять''' - Удалять ячейки первой пометки.<br />
*'''Условие удаления''' - Условия для удаления фишек: 0 - не удалять, 1 - должен совпадать тип, 2 - должен совпадать номер, 3 - должен совпадать тип ИЛИ номер, 4 - должен совпадать тип И номер.<br />
*'''Тип удаления''' - Тип удаления. 0 - заливка, 1 - вертикальные и горизонтальные линии, 2 - только сама пометка.<br />
*'''Мин.удаление''' - Минимальное число фишек, которое можно удалить.<br />
*'''Генерация без мачей''' - При генерации поля избегать готовых совпадений.<br />
*'''Проверка после осыпания''' - После осыпания фишек ещё раз перепроверить возможные комбинации ходов.<br />
*'''Добавление''' - Нужно ли добавлять фишки на поле. Или игра на разбор.<br />
*'''Схлопывание''' - Нужно ли схлопывание (Ликвидация пустых столбцов).<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
<br />
<br />
=Перегруженные цели=<br />
*'''Очистить поле''' - Уничтожить соотв. % фишек. Не стоит комбинировать с досыпанием.<br />
*'''Перекрасить поле''' - Перекрасить все ячейки поля в базовый тип.<br />
*'''Уронить статические''' - Уронить все статические фишки на дно поля.<br />
*'''Уничтожить фишек''' - Уничтожить фишек, количество через запятую.<br />
<br />
<br />
=Внешний вид=<br />
*'''Картинка''' - Графический ресурс картинки пазла.<br />
*'''Фишки''' - Не рекомендуется использовать. Заменено на добавляемые параметр, см.ниже.<br />
*'''Ячейки''' - Графический ресурс ячейки.<br />
*'''Курсор''' - Курсор для выделения фишек.<br />
*'''Колонок''' - Число колонок на которые разбивается пазл.<br />
*'''Строк''' - Число строк на которые разбивается пазл.<br />
*'''Авторазмер''' - Если 1, то для расчета размера ячеек используется картинка. 0 - размер ячейки = размер паззла / число ячеек<br />
*'''Сетка?''' - Если 1, то будет показана сетка при разрезке картинки на блоки. При 0 - сетки не будет.<br />
*'''Счетчик статических''' - Счетчик статических. Объект типа каунтер.<br />
*'''Прогресс статических''' - Прогресс-бар статических. Объект типа progress.<br />
<br />
<br />
<br />
<br />
=Времена этапов=<br />
*'''невидимости''' - Начальная пауза перед откртыием пазлы.<br />
*'''открытия''' - Время открытия исходной картинки (проявляется по alpha).<br />
*'''показа''' - Время показа исходной картинки (после проявления).<br />
*'''перемешивания''' - Время визуализации процесса перемешивания ячеек.<br />
*'''финала''' - Время финального показа пазлы после её разбора, перед переходом к закрытию.<br />
*'''закрытия''' - Время закрытия пазлы (в состояниия close, исчезает по alpha).<br />
<br />
<br />
<br />
=Времена игры=<br />
*'''перестановки''' - Время перестановки двух ячеек местами при их выборе.<br />
*'''движения''' - Время движения фишек от одного узла к соседнему.<br />
*'''движения верх''' - Время движения фишек от одного узла к соседнему при отскоке.<br />
*'''отскока''' - Время движения фишек вверх при отскоке. Т.о. при дефолтных значениях фишка отскакивает на 200 / 600 треть высоты фишки"<br />
*'''рождения и удаления''' - Время рождения и удаления фишки.<br />
*'''поворота''' - Время поворота ячейки при повторном клике на нее.<br />
*'''паузы''' - Время паузы перед началом перестановки или поворота.<br />
*'''подсказки1''' - Время за которое проявляется исходная картинка в состоянии hint.<br />
*'''подсказки2''' - Время в течении которого показывается после проявления исходная картинка в состоянии hint.<br />
*'''подсказки3''' - Время в течении которого закрывается после показа исходная картинка в состоянии hint.<br />
<br />
<br />
<br />
=Хинт при бездействии=<br />
*'''время задержки''' - Время бездействия, после которого следует показывать хинт.<br />
*'''машина''' - Объект, который будет установлен между двумя фишками.<br />
<br />
<br />
<br />
=Генерация поля=<br />
*'''min размер кластера''' - min размер кластера из фишек одного типа<br />
*'''max размер кластера''' - max размер кластера из фишек одного типа<br />
<br />
<br />
<br />
=Звуки=<br />
*'''нажатие на фишку''' - Звук нажатия на фишку.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
<br />
<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
beg пауза перед open<br />
open появляется по alpha-каналу<br />
<br />
sel1 ждем окончания первой пометки<br />
sel1_end показываем окончание первой пометки<br />
sel1_transf1 первая трансформация первой пометки<br />
sel1_transf2 вторая трансформация первой пометки<br />
<br />
sel2 ждем окончания второй пометки<br />
sel2_end показываем окончание второй пометки<br />
sel2_trands1 первая трансформация второй пометки<br />
sel2_trands2 вторая трансформация второй пометки<br />
<br />
born рождение фишек<br />
move перемещаем фишки <br />
aftermatch проверяем, не случилось ли чего-то после движения/добавления фишек<br />
close исчезает по alpha-каналу<br />
end недоступна, невидима<br />
rotate_left повернуть влево на 90 градусов<br />
rotate_right повернуть вправо на 90 градусов<br />
undo отменить один ход<br />
remove_color<br />
remove_single<br />
shuffle_cols<br />
remove_last удалить последнюю кликнутую ячейку (покупное удаление одиночных)<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=Statesmanager&diff=9133Statesmanager2017-10-09T13:39:51Z<p>Dsyrovat: /* Очередь из окон */</p>
<hr />
<div>[[Object|Объект]] предназначен для постановки объектов в очередь выполнения единообразными командами. Можно применять для управления отображением всплывающих окон.<br />
<br />
=Свойства=<br />
<br />
==Процесс==<br />
*'''объект открытия''' (obj) - объект который будет переведён в заданное состояние, если данный объект будет первым в очереди на открытие и передадим менеджеру окон состояние ''next''; <br />
*'''состояние открытия''' (st) - перевести выбранный объект в заданное состояние;<br />
*'''объект back''' (obj_b) - объект который будет переведён в заданное состояние, если данный объект будет первым в очереди на закрытие и передадим менеджеру окон состояние ''back''; <br />
*'''состояние back''' (st_b) - перевести выбранный объект в заданное состояние.<br />
<br />
==Визуализация окон==<br />
*'''fading_t''' - Время фейдинга для окон типа ''по альфе''. Statesmanager'у должен приходить таймер!!!<br />
<br />
<br />
=Дополнительные параметры=<br />
[[Файл:+.png]] '''изменить состояние объекта - очередь back пуста:'''<br />
:'''объект''' ('' obj '') - Перевести объект в состояние из следующего поля;<br />
:'''состояние''' ('' st '') - Новое состояние для объекта из предыдущего поля.<br />
<br />
[[Файл:+.png]] '''изменить состояние объекта - очередь next пуста:'''<br />
:'''объект''' ('' obj '') - Перевести объект в состояние из следующего поля;<br />
:'''состояние''' ('' st '') - Новое состояние для объекта из предыдущего поля.<br />
<br />
<br />
=Параметры которые мы можем считать из statesmanager=<br />
*'''n_back''' - количество событий в очереди на закрытие (не учитывая события добавленные как попапы);<br />
*'''n_next''' - количество событий в очереди на открытие (не учитывая события добавленные как попапы).<br />
*'''n_popup''' - количество событий открытых как попапы.<br />
<br />
<br />
=Состояния=<br />
*'''add_first''' - добавить событие в начало очереди на открытие;<br />
*'''add_first_uni''' - добавить событие в начало очереди на открытие, но если данное событие уже добавлено в очередь, то повторно оно не добавиться (удобно если окно не должно открываться дважды);<br />
*'''add_last''' - добавить событие в конец очереди на открытие;<br />
*'''add_last_uni''' - добавить событие в начало очереди на закрытие, но если данное событие уже добавлено в очередь, то повторно оно не добавиться;<br />
*'''add_popup''' - добавить в очередь попапов событие, и сразу его открыть (добавляется в очередь беков на закрытие в начало). Примечание попапы добавляются в свою очередь на закрытие и открытие, параметры объекта statesmanagera (n_back и n_next) не повышаются при добавления попапа. <br />
*'''add_popup_uni''' - добавить попап с проверкой уникальности;<br />
*'''next''' - активировать первое событие в очереди на открытие;<br />
*'''back''' - активировать back для текущего события в очереди на закрытие;<br />
*'''clear''' - очищает стек очереди, очищает обе очереди (на открытие и на закрытие, включая попапы);<br />
*'''clear_back''' - очищает стек очереди на закрытие ( чистит очередь окон на закрытие, очередь попапов не трогает);<br />
*'''delete''' - удалить из очереди элемент с id из param;<br />
*'''log''' - записывает в лог, три очереди ( очередь next и две очереди беков (попапы и окна)):<br />
*'''add_state_last''' - добавить в очередь состояний вызываемых при закрытых окнах<br />
<br />
==================================================<br />
NEXT QUEUE<br />
id = 15, st = open<br />
id = 18, st = open<br />
id = 21, st = open<br />
id = 72, st = open<br />
id = 68, st = open<br />
id = 80, st = open<br />
id = 80, st = open<br />
id = 76, st = open<br />
03/10/14 11:53:17.485: <br />
==================================================<br />
POPUP QUEUE<br />
03/10/14 11:53:17.485: <br />
==================================================<br />
BACK QUEUE<br />
id = 11, st = open<br />
<br />
<br />
==Альтернативное описание состояний, взятое прямиком из кода==<br />
"idle", //!< Состояние простоя<br />
"add_first", //!< Добавить событие в начало очереди<br />
"add_last", //!< Добавить событие в конец очереди<br />
"add_first_uni", //!< Добавить событие в начало очереди<br />
"add_last_uni", //!< Добавить событие в конец очереди<br />
"next", //!< Активировать первое событие в очереди<br />
"back", //!< Активировать back для текущего события в очереди<br />
"clear", //!< Очистить обе очереди<br />
"add_popup", //!< Начать ветку попапов от текущего элемента очереди. Срабатывает<br />
//!< сразу, до зачиски всех попапов next не делает ничего, back сначала <br />
//!< закрывает попапы<br />
"delete", //!< Удалить из очереди элемент с id из param;<br />
"log" //!< Вывести содержимое всех трех очередей в лог<br />
"double_back", //!< двойной back (и отличная песня ZZ Top, к тому же)<br />
"triple_back" //!< тройной back<br />
<br />
<br />
=Схема работы=<br />
<br />
1) Добавить объекты по одному в очередь<br />
<br />
2) вызывать состояния next или back - объекты у которых вызваны состояния убираются из очереди<br />
очередь разбирается с конца<br />
<br />
<br />
=Пример реализации=<br />
<br />
==Очередь из окон==<br />
Задача: У нас открывается окно 1, после его закрытия открывается окно 2,окно 3 и т.д. (после закрытия одного окна открывается другое).<br />
<br />
Пример: Закончили уровень, и после закрытия окна с результатами, мы должны показать два окошка с новыми задачами.<br />
<br />
<br />
'''Реализация:'''<br />
<br />
*'''1) Открываем окно с результатами:'''<br />
:Из машины окна, вызываем состояние ''next'' машине обработчику менеджера окон (9win_root). Предварительно записываем состояния для закрытия и открытия данного окна(машины; состояния ''close'' и ''open'' соответственно):<br />
<br />
::[[Файл:Statesmanager W next.png]]<br />
<br />
:В машине обработчике менеджера окон (9win_root), в состоянии ''next'' мы задаём менеджеру окон и передаём состояние ''add_first'', а затем ''next''. То есть мы добавляем первым в очередь на открытие наше окно с результатами и его открываем:<br />
<br />
::[[Файл:Statesmanager Next.png]]<br />
<br />
<br />
*'''2) Добавляем в очередь окно с задачей:'''<br />
:Из машины окна, вызываем состояние ''add'' машине обработчику менеджера окон (9win_root). Предварительно записываем состояния для закрытия и открытия данного окна(машины; состояния ''close'' и ''open'' соответственно):<br />
<br />
::[[Файл:Statesmanager W add.png]]<br />
<br />
:В машине обработчике менеджера окон (9win_root), в состоянии ''add'' мы задаём менеджеру окон и передаём состояние ''add_last''( то есть мы добавляем окно в конец очереди на открытие).<br />
:[[Файл:Statesmanager.Add.png]]<br />
<br />
<br />
*'''3) Аналогично добавляем другие задачи.'''<br />
<br />
<br />
*'''4) Для закрытия окна с результатами уровня, мы передаём менеджеру окон состояние ''back'' (закрываем окно, первое в списке на закрытие), а затем состояние ''next'' (открываем первое окно в очереди на открытие, в нашем случае - первую добавленную задачу) '''.<br />
<br />
<br />
[[Category:Main objects]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:717171.jpg&diff=9124Файл:717171.jpg2017-10-04T07:06:33Z<p>Dsyrovat: </p>
<hr />
<div></div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=Effect&diff=9123Effect2017-10-04T06:54:16Z<p>Dsyrovat: </p>
<hr />
<div>{{TOC right}}<br />
Effect - [[Object|объект]] редактора, предназначенный для создания различных визуальных эффектов, которые визуализируется (проявляются) в зависимости от частоты кликов пользователя по заданной области проявления эффекта. <br><br />
Обьект Effect расположен в Main objects<br><br />
'''Важное замечание!'''<br><br />
Эффект БЛЮР и ДЫМ не могут быть вызваны одним экземляром класса Effect<br><br />
<br />
=Эффект БЛЮР=<br />
Эффект блюр позволяет создавать дребезжание объекта. Например, раздвоение объекта.<br />
==Механизм работы эффекта БЛЮР==<br />
Ситуация:<br />
Пользователю необходимо отключить звенящий будильник. Пользователь на экране видит дребезжащий будильник. По клику на будильник дребезжание будильника прекращается. <br><br />
Порядок действий:<br><br />
* На сцене размещаем машину состояний с графическим ресурсом будильника. Назовем ее БУД. Обработка клика на машину состояний стандартная.<br />
* На сцене размещаем объект Effect. Положение объекта Effect должно полностью совпадать с положением машины состояний БУД!<br />
* Свойству Объект эффекта БЛЮР устанавливаем значение машину состояний БУД. Значения других свойств эффекта БЛЮР оставляем стандартными.<br><br />
<br />
==Параметры эффекта Блюр==<br />
===Свойства объекта Блюр===<br />
*Объект (obj) - Объект, к которому будет применен эффект блюр.<br />
*Продолжительность (tm) - продолжительность эффекта. По умолчанию 4000.<br />
*Отклонение (dev)-. Чем больше отклонение, тем больше "отскакивает" в разные стороны от центра объекта По умолчанию 10. При задании значений больше 90 объект "скачет" по диагонали.<br />
*Скорость (vel) -Скорость "дрожания" объекта. По умолчанию 1000.<br />
*Прозрачность (al) - По умолчанию 0.5.<br />
<br />
===Состояния===<br />
*beg - включить проявление Блюра<br />
*end - остановить проявление Блюра<br />
'''Замечание!''' По умолчанию Блюр находится в состоянии end<br />
=Эффект ДЫМ=<br />
==Физическое объяснение работы эффекта ДЫМ==<br />
Область проявления эффекта(ОПФ) — строго ограничена. (В данной версии редактора область только прямоугольная).ОПФ является непрерывной поверхностью и находится в ожидании клика пользователя.<br><br />
При одинарном клике внутри ОПФ проявляется объект с набором параметров, установленными в свойствах объекта Effect, и параметров, определяемых частотой, силой кликов и координатами клика внутри ОПФ. Далее этот объект будем называть излучателем. [[Файл:Распространение_1.JPG|right|250px]]<br><br />
При одинарном клике по ОПФ , излучатель направляет во все направления частицы при этом большая часть частиц распространяется вдоль отрицательной оси У (вверх). Чем дальше частицы удаляются от центра излучателя , тем они становятся светлее. На рисунке отображена картинка, которую увидит игрок.<br> [[Файл:Распространение_2.JPG|right]]<br><br />
При наличии 2 и более излучателей, находящихся на достаточном малом расстоянии друг от друга, большая часть частиц излучателей будет распространяться по направленному отрезку, образованному двумя излучателями. На экране игрок увидит эффект как от движения ручки по бумаге. <br><br />
<br />
При наличии на экране 2 и более излучателей, удаленных друг от друга на достаточно большом расстоянии внутри ОПФ, частицы излучателя начинают взаимодействовать друг с другом.<br><br />
Пусть в области ОПФ есть 4 излучателя. На схеме цветными кружками отображены излучатели, и цветными полями отображены направления распространения частиц излучателя. Пусть необходимо определить яркость частицы в точке Z. Не вдаваясь в математические вычисления, яркость частицы в точке Z будет равна средневзвешенному значению яркости частиц, расположенных вблизи точки Z. Все частицы излучателя влияют на яркость соседних. <br><br />
[[Файл:Точка_внутри_ОПФ.JPG|right|250px]]<br />
<br />
==Механизм работы эффекта ДЫМ==<br />
При клике по заданной области на экране проявляется визуальный эффект, который распространяется в границах заданной области<br />
*в зависимости от «силы» клика проявляется эффект<br />
*в зависимости от координаты точки клика внутри ОПФ эффект будет распространяться по всем направлениям<br />
*при одинарном клике эффект движется направленно верх.<br />
*при увеличении частоты кликов эффект начинает двигаться направленно вверх при этом высота эффекта увеличивается<br />
*при достижения верхней / нижней границы заданной области эффект может начать двигаться вдоль нее<br />
*при достижении правой/левой границы эффект может начать двигаться внутрь заданной области<br />
*при нажатии на кнопку мыши и начале движения в любую сторону внутри области эффект начнет вести себя как ручка по бумаге<br />
*при резком отведении нажатой мышки к границе ОПФ в области , находящейся близко к границе ОПФ, создается несколько излучателей/<br />
<br />
[[Файл:Граница_ОПФ.JPG|right|175px]]<br><br />
<br />
==Взаимодействие с картинками эффекта ДЫМ==<br />
Пусть Effect лежит поверх картинки. <br><br />
*После рассеивания всех частиц излучателей на картинке проявится граница ОПФ. Для устранения этого эффекта рекомендуется установить прозрачность объекту Effect. <br />
*При необходимости добавления эффекта в строго ограниченные не прямоугольной области, например, создание эффекта воды в озере, необходимо области, на которых не должен проявляться эффект, "закрыть" фоном<br />
*По умолчанию частица эффекта белого цвета. Есть возможность подгружать частицы любого размера.<br />
<br />
==Параметры эффекта ДЫМ==<br />
'''Внимание! Параметры обьекта будут уточняться!'''<br><br />
===Свойства объекта Дым===<br />
{| class="wikitable"<br />
|'''Название параметра на английском'''<br />
|'''Названия параметра на русском'''<br />
|'''Название параметра в xml'''<br />
|'''Характеристика параметра'''<br />
|'''Значение по умолчанию'''<br />
|-<br />
|<br />
|частица<br />
|smPart<br />
|Ресурс частицы<br />
|Цвет частицы - белый<br />
|-<br />
|w<br />
|Ширина распространения эффекта<br />
|w<br />
|Значения до 40. Увеличивает ширину излучения. Чем меньше значения, тем шире <br />
|70<br />
|-<br />
|h<br />
|Высота распространения эффекта<br />
|h<br />
|До 200. Чем больше значение, тем выше<br />
|70<br />
|-<br />
|Velocity diffusion<br />
|Скорость диффузии<br />
|Vd <br />
|Значение до 25. Больше скорость , больше температура<br />
|0<br />
|-<br />
|Diffusion itterations<br />
|Количество итераций диффузии<br />
|di<br />
|До 400<br />
|0<br />
|-<br />
|Pressure diffusion<br />
|Давление диффузии<br />
|pd<br />
|Больше давление, больше частиц. Рекомендуется ставить до 10<br />
|0<br />
|-<br />
|Ink diffusion<br />
|Плотность газа<br />
|id<br />
|Плотность до 800<br />
|0<br />
|-<br />
|Velocity friction a<br />
|Квадратичное замедление<br />
|fva<br />
|Замедление распространения частиц. <br />
|0<br />
|-<br />
|Velocity friction b<br />
|Линейное замедление<br />
|fvb<br />
|Замедление распространения частиц. <br />
|0<br />
|-<br />
|Velocity friction c<br />
|Изменение скорости на заданную величину<br />
|fvc<br />
|Замедление распространения частиц. <br />
|0<br />
|-<br />
|Vorticity<br />
|Завихренность<br />
|vort<br />
|Чем больше значение, тем больше вихрей<br />
|0<br />
|-<br />
|Pressure acc<br />
|Давление в точке <br />
|pacc<br />
|Создаются маленькие излучатели вокруг излучателя. Рекомендуется ставить значение до 50<br />
|2<br />
|-<br />
|ink heat<br />
|плотность тепла ???<br />
|ih<br />
|Вертикально вниз падают частицы<br />
|0<br />
|-<br />
|Heat force<br />
|????<br />
|hf<br />
|Вертикальное падение частиц<br />
|0.1<br />
|-<br />
|Heat friction a<br />
|Квадратичное трение <br />
|hfa<br />
|<br />
|0.5<br />
|-<br />
||Heat friction b<br />
|Линейное трение Б<br />
|hfa<br />
|<br />
|0.2<br />
|-<br />
||Heat friction с<br />
|Изменение скорости на заданную величину<br />
|hfa<br />
|<br />
|0.01<br />
|-<br />
|Velocity advection<br />
|Скорость адвекции<br />
|va<br />
|Скорость распространения<br />
|150<br />
|-<br />
|Pressure advection<br />
|Давление адвекци<br />
|padv<br />
|Параметр, влияющий на величину давления частиц<br />
|150<br />
|-<br />
|Heat advection<br />
|Температура адвекции<br />
|ha<br />
|Моделируемая температура, при которой распространяются частицы<br />
|150<br />
|-<br />
|}<br />
<br><br />
====Важное замечание====<br />
*Параметры Velocity friction a, Velocity friction b, Velocity friction c,Heat friction a,Heat friction b,Heat friction c позволяют управлять процессом распространения частиц по ОПФ. Хотя эффекты, создаваемые перечисленными параметрами можно получить с использованием других.<br />
*Одновременное использование параметров групп Velocity friction или Heat friction приведет к замедлению распространению частиц. Рекомендуется подбирать значения параметров очень аккуратно при условии, что параметр А >B>C.<br />
<br />
===Состояния эффекта ДЫМ===<br />
В данной версии редактора состояний нет.<br />
<br />
===Параметры, записываемые в options.xml===<br />
В данной версии редактора такие параметры отсутствуют<br />
<br />
<br />
=Эффект AMBIENT WITH LIGHT=<br />
<br />
'''Параметры''' :<br />
<br />
*awl - Тип эффекта.<br />
*tag - Номер эффекта.<br />
<br />
'''Состояния'''<br />
<br />
*awl_beg - Активировать эффект AmbientWithLight.<br />
*awl_run - Эффект AmbientWithLight работает.<br />
*awl_upd - Обновить параметры эффекта AmbientWithLight.<br />
*awl_end - Деактивировать эффект AmbientWithLight.<br />
<br />
Замечание! По умолчанию AmbientWithLight находится в состоянии awl_end.<br />
<br />
'''Примеры подборки коэффициентов:'''<br />
<br />
Стартовая картинка:<br />
<br />
[[Файл:awl_start.png]]<br />
<br />
'''''1) Картинка перекрашивается в темно-синий цвет. Эффект ночи.''''' [[Файл:awl_blue.png|right]]<br />
<br />
r="0.1, 0.0, 0.0, 0.0"<br> <br />
g="0.0, 0.1, 0.0, 0.0"<br> <br />
b="0.0, 0.0, 0.5, 0.0"<br><br />
<br />
<br />
<br />
<br />
<br />
<br />
'''''2) Цветной негатив.''''' [[Файл:awl_c_neg.png|right]]<br />
<br />
r="-1.0, 0.0, 0.0, 1.0"<br><br />
g="0.0, -1.0, 0.0, 1.0"<br><br />
b="0.0, 0.0, -1.0, 1.0"<br><br />
<br />
<br />
<br />
<br />
<br />
<br />
'''''3) Черно-белая сепия.''''' [[Файл:awl_dw.png|right]]<br />
<br />
r="1.0, 0.0, 0.0, 0.0"<br><br />
g="1.0, 0.0, 0.0, 0.0"<br><br />
b="1.0, 0.0, 0.0, 0.0"<br><br />
<br />
<br />
<br />
<br />
<br />
<br />
'''''4) Черно-белый негатив.''''' [[Файл:awl_dw_neg.png|right]]<br />
<br />
r="-1.0, 0.0, 0.0, 1.0"<br><br />
g="-1.0, 0.0, 0.0, 1.0"<br><br />
b="-1.0, 0.0, 0.0, 1.0"<br><br />
<br />
<br />
<br />
<br />
<br />
<br />
'''Пример подключения эффекта AmbientWithLight:'''<br />
<br />
[[Файл:Effect_awl.png]]<br />
<br />
=Пример использования обьекта Effect=<br />
Примеры эффектов создаваемых с использованием обьекта Effect расположены по ссылке. В проекте 28 экранов, на каждом из которых расположен один пример эффекта с описанием применяемых параметров.<br><br />
[[Файл:Пример_экрана_с_эффектом.JPG|500px]]<br><br />
<br />
== Перекрашивание графики ==<br />
Для начала - перекрашиваемая графика должна быть максимально осветлённая ( чтобы точнее перекрасить цвет, чем темнее графика - тех меньше будет влиять перекрашивание).<br />
<br />
Имеем графику:<br />
<br />
[[Файл:Bg seryj copy.png|430px]]<br />
<br />
Далее, производим махинации - узнаём при помощи пипетки ( Photoshop ) цвет эталлоного пикселя ( один и тот же пиксель, на нужной и на осветлённой графиках).<br />
Заносим полученные значения RGB каналов в таблицу, и для каждого канала узнаём процент цвета ( делим нужный цвет на эталонный).<br />
<br />
[[Файл:Colors.ods - LibreOffice Calc.jpg|960px]]<br />
<br />
<br />
Полученные % используем в объекте effect:<br />
<br />
[[Файл:Splitmanager_setup_awl_6.jpg|460px]]<br />
<br />
Далее всё по обычному - указываем тип эффекта awl, указываем номер эффекта и передаём сост. "awl_beg", результат:<br />
[[Файл:66c7052ca8.jpg|960px]]<br />
<br />
== Пример ==<br />
<br />
[http://fs5.absolutist.com/files/wikisample/effect.rar Download]<br />
<br />
[[Category:Main objects]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=Effect&diff=9122Effect2017-10-04T06:53:45Z<p>Dsyrovat: </p>
<hr />
<div>{{TOC right}}<br />
Effect - [[Object|объект]] редактора, предназначенный для создания различных визуальных эффектов, которые визуализируется (проявляются) в зависимости от частоты кликов пользователя по заданной области проявления эффекта. <br><br />
Обьект Effect расположен в Main objects<br><br />
'''Важное замечание!'''<br><br />
Эффект БЛЮР и ДЫМ не могут быть вызваны одним экземляром класса Effect<br><br />
<br />
=Эффект БЛЮР=<br />
Эффект блюр позволяет создавать дребезжание обьекта. Например, раздвоение обьекта.<br />
==Механизм работы эффекта БЛЮР==<br />
Ситуация:<br />
Пользователю необходимо отключить звенящий будильник. Пользователь на экране видит дребезжащий будильник. По клику на будильник дребезжание будильника прекращается. <br><br />
Порядок действий:<br><br />
* На сцене размещаем машину состояний с графическим ресурсом будильника. Назовем ее БУД. Обработка клика на машину состояний стандартная.<br />
* На сцене размещаем объект Effect. Положение объекта Effect должно полностью совпадать с положением машины состояний БУД!<br />
* Свойству Объект эффекта БЛЮР устанавливаем значение машину состояний БУД. Значения других свойств эффекта БЛЮР оставляем стандартными.<br><br />
<br />
==Параметры эффекта Блюр==<br />
===Свойства объекта Блюр===<br />
*Объект (obj) - Объект, к которому будет применен эффект блюр.<br />
*Продолжительность (tm) - продолжительность эффекта. По умолчанию 4000.<br />
*Отклонение (dev)-. Чем больше отклонение, тем больше "отскакивает" в разные стороны от центра объекта По умолчанию 10. При задании значений больше 90 объект "скачет" по диагонали.<br />
*Скорость (vel) -Скорость "дрожания" объекта. По умолчанию 1000.<br />
*Прозрачность (al) - По умолчанию 0.5.<br />
<br />
===Состояния===<br />
*beg - включить проявление Блюра<br />
*end - остановить проявление Блюра<br />
'''Замечание!''' По умолчанию Блюр находится в состоянии end<br />
=Эффект ДЫМ=<br />
==Физическое объяснение работы эффекта ДЫМ==<br />
Область проявления эффекта(ОПФ) — строго ограничена. (В данной версии редактора область только прямоугольная).ОПФ является непрерывной поверхностью и находится в ожидании клика пользователя.<br><br />
При одинарном клике внутри ОПФ проявляется объект с набором параметров, установленными в свойствах объекта Effect, и параметров, определяемых частотой, силой кликов и координатами клика внутри ОПФ. Далее этот объект будем называть излучателем. [[Файл:Распространение_1.JPG|right|250px]]<br><br />
При одинарном клике по ОПФ , излучатель направляет во все направления частицы при этом большая часть частиц распространяется вдоль отрицательной оси У (вверх). Чем дальше частицы удаляются от центра излучателя , тем они становятся светлее. На рисунке отображена картинка, которую увидит игрок.<br> [[Файл:Распространение_2.JPG|right]]<br><br />
При наличии 2 и более излучателей, находящихся на достаточном малом расстоянии друг от друга, большая часть частиц излучателей будет распространяться по направленному отрезку, образованному двумя излучателями. На экране игрок увидит эффект как от движения ручки по бумаге. <br><br />
<br />
При наличии на экране 2 и более излучателей, удаленных друг от друга на достаточно большом расстоянии внутри ОПФ, частицы излучателя начинают взаимодействовать друг с другом.<br><br />
Пусть в области ОПФ есть 4 излучателя. На схеме цветными кружками отображены излучатели, и цветными полями отображены направления распространения частиц излучателя. Пусть необходимо определить яркость частицы в точке Z. Не вдаваясь в математические вычисления, яркость частицы в точке Z будет равна средневзвешенному значению яркости частиц, расположенных вблизи точки Z. Все частицы излучателя влияют на яркость соседних. <br><br />
[[Файл:Точка_внутри_ОПФ.JPG|right|250px]]<br />
<br />
==Механизм работы эффекта ДЫМ==<br />
При клике по заданной области на экране проявляется визуальный эффект, который распространяется в границах заданной области<br />
*в зависимости от «силы» клика проявляется эффект<br />
*в зависимости от координаты точки клика внутри ОПФ эффект будет распространяться по всем направлениям<br />
*при одинарном клике эффект движется направленно верх.<br />
*при увеличении частоты кликов эффект начинает двигаться направленно вверх при этом высота эффекта увеличивается<br />
*при достижения верхней / нижней границы заданной области эффект может начать двигаться вдоль нее<br />
*при достижении правой/левой границы эффект может начать двигаться внутрь заданной области<br />
*при нажатии на кнопку мыши и начале движения в любую сторону внутри области эффект начнет вести себя как ручка по бумаге<br />
*при резком отведении нажатой мышки к границе ОПФ в области , находящейся близко к границе ОПФ, создается несколько излучателей/<br />
<br />
[[Файл:Граница_ОПФ.JPG|right|175px]]<br><br />
<br />
==Взаимодействие с картинками эффекта ДЫМ==<br />
Пусть Effect лежит поверх картинки. <br><br />
*После рассеивания всех частиц излучателей на картинке проявится граница ОПФ. Для устранения этого эффекта рекомендуется установить прозрачность объекту Effect. <br />
*При необходимости добавления эффекта в строго ограниченные не прямоугольной области, например, создание эффекта воды в озере, необходимо области, на которых не должен проявляться эффект, "закрыть" фоном<br />
*По умолчанию частица эффекта белого цвета. Есть возможность подгружать частицы любого размера.<br />
<br />
==Параметры эффекта ДЫМ==<br />
'''Внимание! Параметры обьекта будут уточняться!'''<br><br />
===Свойства объекта Дым===<br />
{| class="wikitable"<br />
|'''Название параметра на английском'''<br />
|'''Названия параметра на русском'''<br />
|'''Название параметра в xml'''<br />
|'''Характеристика параметра'''<br />
|'''Значение по умолчанию'''<br />
|-<br />
|<br />
|частица<br />
|smPart<br />
|Ресурс частицы<br />
|Цвет частицы - белый<br />
|-<br />
|w<br />
|Ширина распространения эффекта<br />
|w<br />
|Значения до 40. Увеличивает ширину излучения. Чем меньше значения, тем шире <br />
|70<br />
|-<br />
|h<br />
|Высота распространения эффекта<br />
|h<br />
|До 200. Чем больше значение, тем выше<br />
|70<br />
|-<br />
|Velocity diffusion<br />
|Скорость диффузии<br />
|Vd <br />
|Значение до 25. Больше скорость , больше температура<br />
|0<br />
|-<br />
|Diffusion itterations<br />
|Количество итераций диффузии<br />
|di<br />
|До 400<br />
|0<br />
|-<br />
|Pressure diffusion<br />
|Давление диффузии<br />
|pd<br />
|Больше давление, больше частиц. Рекомендуется ставить до 10<br />
|0<br />
|-<br />
|Ink diffusion<br />
|Плотность газа<br />
|id<br />
|Плотность до 800<br />
|0<br />
|-<br />
|Velocity friction a<br />
|Квадратичное замедление<br />
|fva<br />
|Замедление распространения частиц. <br />
|0<br />
|-<br />
|Velocity friction b<br />
|Линейное замедление<br />
|fvb<br />
|Замедление распространения частиц. <br />
|0<br />
|-<br />
|Velocity friction c<br />
|Изменение скорости на заданную величину<br />
|fvc<br />
|Замедление распространения частиц. <br />
|0<br />
|-<br />
|Vorticity<br />
|Завихренность<br />
|vort<br />
|Чем больше значение, тем больше вихрей<br />
|0<br />
|-<br />
|Pressure acc<br />
|Давление в точке <br />
|pacc<br />
|Создаются маленькие излучатели вокруг излучателя. Рекомендуется ставить значение до 50<br />
|2<br />
|-<br />
|ink heat<br />
|плотность тепла ???<br />
|ih<br />
|Вертикально вниз падают частицы<br />
|0<br />
|-<br />
|Heat force<br />
|????<br />
|hf<br />
|Вертикальное падение частиц<br />
|0.1<br />
|-<br />
|Heat friction a<br />
|Квадратичное трение <br />
|hfa<br />
|<br />
|0.5<br />
|-<br />
||Heat friction b<br />
|Линейное трение Б<br />
|hfa<br />
|<br />
|0.2<br />
|-<br />
||Heat friction с<br />
|Изменение скорости на заданную величину<br />
|hfa<br />
|<br />
|0.01<br />
|-<br />
|Velocity advection<br />
|Скорость адвекции<br />
|va<br />
|Скорость распространения<br />
|150<br />
|-<br />
|Pressure advection<br />
|Давление адвекци<br />
|padv<br />
|Параметр, влияющий на величину давления частиц<br />
|150<br />
|-<br />
|Heat advection<br />
|Температура адвекции<br />
|ha<br />
|Моделируемая температура, при которой распространяются частицы<br />
|150<br />
|-<br />
|}<br />
<br><br />
====Важное замечание====<br />
*Параметры Velocity friction a, Velocity friction b, Velocity friction c,Heat friction a,Heat friction b,Heat friction c позволяют управлять процессом распространения частиц по ОПФ. Хотя эффекты, создаваемые перечисленными параметрами можно получить с использованием других.<br />
*Одновременное использование параметров групп Velocity friction или Heat friction приведет к замедлению распространению частиц. Рекомендуется подбирать значения параметров очень аккуратно при условии, что параметр А >B>C.<br />
<br />
===Состояния эффекта ДЫМ===<br />
В данной версии редактора состояний нет.<br />
<br />
===Параметры, записываемые в options.xml===<br />
В данной версии редактора такие параметры отсутствуют<br />
<br />
<br />
=Эффект AMBIENT WITH LIGHT=<br />
<br />
'''Параметры''' :<br />
<br />
*awl - Тип эффекта.<br />
*tag - Номер эффекта.<br />
<br />
'''Состояния'''<br />
<br />
*awl_beg - Активировать эффект AmbientWithLight.<br />
*awl_run - Эффект AmbientWithLight работает.<br />
*awl_upd - Обновить параметры эффекта AmbientWithLight.<br />
*awl_end - Деактивировать эффект AmbientWithLight.<br />
<br />
Замечание! По умолчанию AmbientWithLight находится в состоянии awl_end.<br />
<br />
'''Примеры подборки коэффициентов:'''<br />
<br />
Стартовая картинка:<br />
<br />
[[Файл:awl_start.png]]<br />
<br />
'''''1) Картинка перекрашивается в темно-синий цвет. Эффект ночи.''''' [[Файл:awl_blue.png|right]]<br />
<br />
r="0.1, 0.0, 0.0, 0.0"<br> <br />
g="0.0, 0.1, 0.0, 0.0"<br> <br />
b="0.0, 0.0, 0.5, 0.0"<br><br />
<br />
<br />
<br />
<br />
<br />
<br />
'''''2) Цветной негатив.''''' [[Файл:awl_c_neg.png|right]]<br />
<br />
r="-1.0, 0.0, 0.0, 1.0"<br><br />
g="0.0, -1.0, 0.0, 1.0"<br><br />
b="0.0, 0.0, -1.0, 1.0"<br><br />
<br />
<br />
<br />
<br />
<br />
<br />
'''''3) Черно-белая сепия.''''' [[Файл:awl_dw.png|right]]<br />
<br />
r="1.0, 0.0, 0.0, 0.0"<br><br />
g="1.0, 0.0, 0.0, 0.0"<br><br />
b="1.0, 0.0, 0.0, 0.0"<br><br />
<br />
<br />
<br />
<br />
<br />
<br />
'''''4) Черно-белый негатив.''''' [[Файл:awl_dw_neg.png|right]]<br />
<br />
r="-1.0, 0.0, 0.0, 1.0"<br><br />
g="-1.0, 0.0, 0.0, 1.0"<br><br />
b="-1.0, 0.0, 0.0, 1.0"<br><br />
<br />
<br />
<br />
<br />
<br />
<br />
'''Пример подключения эффекта AmbientWithLight:'''<br />
<br />
[[Файл:Effect_awl.png]]<br />
<br />
=Пример использования обьекта Effect=<br />
Примеры эффектов создаваемых с использованием обьекта Effect расположены по ссылке. В проекте 28 экранов, на каждом из которых расположен один пример эффекта с описанием применяемых параметров.<br><br />
[[Файл:Пример_экрана_с_эффектом.JPG|500px]]<br><br />
<br />
== Перекрашивание графики ==<br />
Для начала - перекрашиваемая графика должна быть максимально осветлённая ( чтобы точнее перекрасить цвет, чем темнее графика - тех меньше будет влиять перекрашивание).<br />
<br />
Имеем графику:<br />
<br />
[[Файл:Bg seryj copy.png|430px]]<br />
<br />
Далее, производим махинации - узнаём при помощи пипетки ( Photoshop ) цвет эталлоного пикселя ( один и тот же пиксель, на нужной и на осветлённой графиках).<br />
Заносим полученные значения RGB каналов в таблицу, и для каждого канала узнаём процент цвета ( делим нужный цвет на эталонный).<br />
<br />
[[Файл:Colors.ods - LibreOffice Calc.jpg|960px]]<br />
<br />
<br />
Полученные % используем в объекте effect:<br />
<br />
[[Файл:Splitmanager_setup_awl_6.jpg|460px]]<br />
<br />
Далее всё по обычному - указываем тип эффекта awl, указываем номер эффекта и передаём сост. "awl_beg", результат:<br />
[[Файл:66c7052ca8.jpg|960px]]<br />
<br />
== Пример ==<br />
<br />
[http://fs5.absolutist.com/files/wikisample/effect.rar Download]<br />
<br />
[[Category:Main objects]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1011.png&diff=9121Файл:1011.png2017-10-04T05:57:53Z<p>Dsyrovat: Dsyrovat загрузил новую версию Файл:1011.png</p>
<hr />
<div></div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1011.png&diff=9120Файл:1011.png2017-10-04T05:53:18Z<p>Dsyrovat: Dsyrovat загрузил новую версию Файл:1011.png</p>
<hr />
<div></div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1011.png&diff=9119Файл:1011.png2017-10-02T07:49:13Z<p>Dsyrovat: Dsyrovat загрузил новую версию Файл:1011.png</p>
<hr />
<div></div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:1011.png&diff=9118Файл:1011.png2017-10-02T07:48:37Z<p>Dsyrovat: Dsyrovat загрузил новую версию Файл:1011.png</p>
<hr />
<div></div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B3%D1%80%D1%8B_%C2%ABHidden_Object_Game%C2%BB&diff=9117Создание игры «Hidden Object Game»2017-10-02T07:26:45Z<p>Dsyrovat: </p>
<hr />
<div>{| width="100%" <br />
| width="40%"|[[Редактор текстовых ресурсов|Урок 6]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Настройка миниигр|Урок 8]]<br />
|}<br />
----<br />
{{TOC right}}<br />
<br />
'''Цель:''' Изучить настройки объектов [[HiddenList]], [[HiddenObject]] и [[Table]] для типа механики Hidden Object Game на базе создания уровня из игры Travel.<br />
<br />
'''Задача:''' Создать уровень игры содержащей 10 поисковых объектов расположенных на одном бэкграунде (фоне). При инициализации сцены обеспечить размещение 5 объектов для поиска. <br />
<br />
== Создание экрана и сцены в игровом проекте ==<br />
<br />
Откроем проект lessons. Создадим экран Lesson_7. [[Файл:Lesson7_textbase.png|right]]<br />
В экране Lesson_7 создадим новую сцену* stg_7 с разрешением 960*640 (по умолчанию), в которую (через ResourcesEditor) добавим графические ресурсы из папки Lesson_7. (см. подготовка к работе [[Создание проекта]])<br />
<br />
* Для корректной работы на мобильном устройстве необходимо настроить параметр.<br />
<br />
* Графические объекты должны разместиться точно на местах предназначенных для их «Прятанья».<br />
<br />
Создадим папку Lesson_7 в базе текстовых описаний с помощью TextEditor. Добавим в неё 10 текстовых записей, соответствующих именам поисковых объектов. Заполним для каждой текстовой записи значение [[Интерфейс TextEditor#Создание и заполнение текстовой базы проекта | Word]], [[Интерфейс TextEditor#Создание и заполнение текстовой базы проекта | Sentence-En]], добавим графическое отображение поискового объекта. Сделать это можно вручную, перетащив картинку соответствующего объекта из редактора ресурсов и, по нажатию на картинке правой кнопкой мыши, выберем тип "icon1". Или же более быстрым [[Интерфейс TextEditor#Добавление иконок в текстовый элемент | способом]].<br />
<br />
== Общая настройка объектов ==<br />
<br />
1. Для всех поисковых графических объектов изменить тип с image на [[HiddenObject]].<br />
<br />
[[Файл:Lesson7_hidden_obj.png]]<br />
<br />
2. Создать специальные объекты [[Table]] и [[HiddenList]]. Для этого необходимо перенести графическое изображение table с последующим изменением типа с image на Table. Название объекта изменить на HOT**<br />
<br />
[[Файл:07 5.png]]<br />
<br />
3. Для объекта HiddenList перенести любое графическое изображение с последующим изменением типа с image на HiddenList и удалением графического ресурса из поля настроек (res)*. Для данного типа объекта не требуется графический ресурс. Название объекта изменить на HOL**<br />
<br />
[[Файл:Lesson7_HiddenList.png]]<br />
<br />
<br />
'''**''' Имена для специальных объектов могут использоваться любые.<br />
<br />
== Детальная настройка объектов ==<br />
<br />
'''1. Описание HiddenObject.'''<br />
<br />
''HiddenObject'' - это поисковый объект, взаимодействующий со списком HiddenList. Каждому поисковому объекту необходимо указать графический ресурс (картинку), идентификатор объекта HiddenList и идентификатор текстового ресурса (строки описания) в HiddenList.[[Файл:07 7.png|right]]<br />
<br />
Необходимо выбрать используемый объект с именем HOL (тип HiddenObjectList) в поле list.<br />
<br />
<br />
''текстID'' – название хидден-объекта, которое будет отображаться в списке. Перетаскивается мышкой из текстового редактора;<br />
<br />
''текст'' – обычный текст (будет отображаться в таблице при отсутствии ТекстID, для быстрых экспериментов);<br />
<br />
''list'' – ссылка на HiddenList, к которому будет подключен объект, для обеспечения связи между ними;<br />
<br />
''flyer'' – объект типа flyer, который запустится в работу при нахождении поискового объекта. Неудачный клик обрабатывает HiddenList. Если параметр не задан, используется fly_ok объекта HiddenList.(objid);<br />
<br />
''actor'' – объект, который отображает анимацию спрятанного объекта после удачного клика на него (обычно это машина состояния). Парметр необязателен. Актёры нужны тогда, когда отличается графика объекта, который непосредственно находится на сцене и который летит к таблице. Это может быть случай, когда на сцене лежит часть объекта, а летит целый. Или же на сцене - с тенью, а летит - без.<br />
<br />
''тип'' – номер типа объекта, используется для логического разделения объектов при обработке HiddenList.<br />
<br />
<br />
<br />
<br />
'''2. Описание HiddenObjectList.'''<br />
<br />
HiddenList - это список поисковых объектов (Hidden), которые надо найти в хидден-сцене. [[Файл:07 8.png|right]] Каждый поисковый объект на сцене связывают со списком. Объектов может быть больше, чем будет показано в данной игровой сессии (поле "объектов"). В этом случае они выбираются случайным образом. Запоминаются те из них, по которым произошёл клик (увеличивается счетчик их кликов). При следующем заходе на сцену, поисковые слова сортируются по возрастанию числа кликов и снова активизируется количество спрятанных объектов, указанных в поле "количество".<br />
<br />
HiddenList определяет основные параметры для настройки HiddenObject (скорость полета и т.п.). В дальнейшем, при необходимости, эти же параметры можно добавить в HiddenObject, чтобы для данного объекта они "перебивали" общие значения для всех.<br />
<br />
<br />
Подготовка спрятанных объектов: <br />
<br />
''num'' (поле "объектов") – максимальное количество объектов, участвующие в поиске. (int)<br />
<br />
''hide'' (поле "прятать") – если 1, то делать невидимыми объекты, не участвующие в поиске. (int) <br />
<br />
Визуальные параметры списка: <br />
<br />
''table'' (поле "таблица") – идентификатор объекта Table. (objid)<br />
<br />
''kind'' (внешний вид - поле "тип списка") – тип отображения объекта в списке (0-слово,1-ассоциация, 2-иконка, 3-иконка). (int)<br />
<br />
''cross'' (внешний вид - поле "вычеркнуть") – зачеркивать найденный элемент списка. Eсли 0 (по умолчанию), то найденный элемент удаляется, иначе "зачеркивается".(int).<br />
<br />
<br />
<br />
3. Описание Table<br />
<br />
<br />
[[Файл:Table lesson7.png]]<br />
<br />
хотелось бы напомнить , что вы можете “поиграться” с вкладкой “таблица” , что бы настроить внешний вид , вспомогательную область для поиска предметов.<br />
<br />
6. Параметры, общие для всех спрятанных объектов:<br />
<br />
''die'' – тип исчезания при удачном клике на объект (если нет актера) (int): <br />
<br />
0: просто исчезает;<br />
<br />
1: летит к пункту с описанием в списке HiddenList;<br />
<br />
2: улетает в случайном направлении;<br />
<br />
3: улетает к заданным координатам (fx, fy).<br />
<br />
vm - скорость движения при полете к списку предметов после клика в px/sec (float) <br />
<br />
vr - скорость вращения при полете к списку предметов после клик в град/sec (float) <br />
<br />
fw - финальная ширина к которой надо уменьшится при подлете к финальной точке (int) <br />
<br />
fh - финальная высота к которой надо уменьшится при подлете к финальной точке (int). Объект не должен изменять своих пропорций, поэтому fw или fh (или оба) всегда отрицательны. <br />
<br />
fx - финальная координата x, к которой объект должен перелететь, при удачном клике (см. тип исчезания). (int) <br />
<br />
fy - финальная координата x, к которой объект должен перелететь, при удачном клике (см. тип исчезания). (int)<br />
<br />
<br />
<blockquote><br />
[[файл:wrong.png|right|32px]]<br />
'''Внимание!''' HiddenList не будет работать без объекта [[Редактор текстовых ресурсов#Упражнения|Options]], который вы должны были создать в предыдущем уроке, а так же без параметра ''id игры'' (Очковая система -> id игры; для теста заполним его любой строкой).<br />
</blockquote><br />
<br />
== Упражнения ==<br />
<br />
1. Щелкнув правой кнопкой мыши по экрану Lesson_7, создать новый экран Lesson_7_1.<br />
<br />
2. Создать новую сцену (с названием stg_7_1).<br />
<br />
3. Скопировать все объекты из сцены stg_7 (экрана Lesson_7).<br />
<br />
4. Вставить скопированые объекты в новую сцену stg_7_1.<br />
<br />
[[Файл:07 11.png]]<br />
<br />
5. В новой сцене:<br />
<br />
a) добавить еще 3 графических ресурса и перевести в тип HiddenObject;<br />
<br />
b) разместить на местах предназначенных для их «Прятанья»;<br />
<br />
c) добавить текстовое описание в TextEditor;<br />
<br />
e) установить время игры 20 секунд, паузу 2 секунды с переходом на экран Lesson_7_1.<br />
<br />
6. Модифицировать экран Lesson_7 в полноценный уровень с выводом количества очков, игрой на время и графикой.<br />
<br />
== Упражнение № 6 ==<br />
Экран lesson_7 необходимо модифицировать в полноценный уровень.<br />
<br />
Для этого первый экран дополняем 2 счетчиками ([[counter]]), таймером ([[timer]]), машиной-блокатором ([[machine]]), машиной-комбо3 ([[machine]]) и прогрессом ([[progress]]). Второй экран с выводом очков составим позже.<br />
<br />
[[Файл:1.png]] <br />
<br />
Счетчик «amt» ([[counter]]) показывает сколько объектов найдено. Счетчик «score_H» ([[counter]]) насчитывает баллы за собранные объекты. Таймер ([[timer]]) запускается при старте игры и отсчитывает заданное время на игру, машина-блокатор «ban_H» блокирует сцену при серии ошибочных кликов. Прогресс «progr» ([[progress]]) отображает уровень прохождения игры.<br />
<br />
Чтобы всё заработало необходимо указать счетчики, таймер, машину-блокатор, машину-комбо3 и прогресс в хиденлисте «HL_01» ([[hiddenList]]).<br />
<br />
== СЧЕТЧИК ==<br />
<br />
В редакторе ресурсов выбираем анимацию и добавляем графику для счетчика. <br />
<br />
<blockquote><br />
[[файл:wrong.png|right|32px]]<br />
'''Внимание!''' Если в редакторе ресурсов нету анимации, то [[Интерфейс_ResourceEditor#Анимация|создайте]] её - это просто).<br />
</blockquote><br />
<br />
[[Файл:Coun (5).png]] [[Файл:Coun (6).png]] [[Файл:Coun (7).png]] [[Файл:Coun (8).png]] [[Файл:Coun (9).png]] [[Файл:Coun_(10).png]] [[Файл:Coun (11).png]] [[Файл:Coun (1).png]] [[Файл:Coun (2).png]] [[Файл:Coun (3).png]] [[Файл:Coun (4).png]]<br />
<br />
Создаем объект сцены с типом «[[counter]]», в поле res перетаскиваем анимацию с цифрами от 0 до 9, разделитель перетаскиваем в отдельную графу без анимации. Настройки для счетчика:<br />
<br />
[[Файл:243.png]] [[Файл:33.png]]<br />
<br />
== ТАЙМЕР ==<br />
<br />
В свойствах таймера «[[timer]]» необходимо указать «значение» с которого начнется отсчет времени (18000 = 18 сек.). <br />
В свойство «графика» из графического редактора перетаскиваем анимацию которую делали для счетчика и двоеточие. Настройки для таймера:<br />
<br />
[[Файл:444.png]]<br />
<br />
Также стоит обновить настройки , в HiddenObjectList , т.к. если мы его не укажем отсчет времени просто не начнется , и так же нужно помнить чтобы время таймера и время указанное в HiddenObjectList должны совпадать , иначе отсчет будет идти от меньшего времени вне зависимости указано оно в HOL или в таймере<br />
[[Файл:HOL_time.png]]<br />
<br />
<br />
== ПРОГРЕСС ==<br />
<br />
[[Progress]] используют для отображения каких либо ачивментов, например когда игрок проходить уровень он может получить 1,2,3 звезды или бронзовую, серебряную, золотую. <br />
Настройки для прогресса : <br />
<br />
[[Файл:555.png]]<br />
<br />
Графика для Progress: [[Файл:666.png]]<br />
<br />
Настройки для машины-Combo3c :<br />
<br />
[[Файл:777.png]]<br />
<br />
Во всех HiddenObject добавить свойство "изменить состояние объекта" combo3c [[Файл:1818.png]]<br />
<br />
Настройки для машины-блокатора «ban_H» (machine) :<br />
<br />
[[Файл:9.png]]<br />
<br />
Настройки для hiddenList:<br />
<br />
[[Файл:1010.png]] [[Файл:1011.png]]<br />
<br />
Группа - звезды combo num =1 Количество быстро найденных объектов, нужное для получения звезды Combo combo time = 3000 Интервал между кликами, считающимися быстрыми для Combo accuracy = 0,85 Точность кликов для получения звезды Accuracy (1 = 100%, все клики должны быть только удачные) лимит ложных кликов =5 Лимит ложных кликов. Формула расчета количество верных кликов делим на общее количество получаем коэффициент если он равен или больше указного нами то в опции пишем параметр, если нет то не пишем.<br />
<br />
<br />
Для HiddenList и Counter пункт "сохранить в профиль" должен совпадать. Если в HiddenList указано "глобально", то и в Counter также необходимо установить "глобально".<br />
<br />
<br />
Создаем вторую сцену на которой формируем окно вывода результатов из ректангла (Rectangle), текстовых объектов и счетчиков, окно<br />
должно открываться по окончанию игры, при выигрыше показывать набранные очки и надпись об удаче,при проигрыше нулевые очки и надпись о неудаче.<br />
<br />
Графика для Rectangle rec: [[Файл:0001.png]] [[Файл:0002.png]] [[Файл:0003.png]] [[Файл:0004.png]] [[Файл:0005.png]] [[Файл:0006.png]] [[Файл:0007.png]] [[Файл:0008.png]] [[Файл:0009.png]] [[Файл:00010.png]] <br />
<br />
Графика для Rectangle black : [[Файл:0101.png]]<br />
<br />
<blockquote><br />
[[файл:wrong.png|right|32px]]<br />
'''Внимание!''' Графика для Rectangle black используется в качестве фона, на котором будет размещаться всплывающие окно с показаниями результата пройденной игры. <br />
</blockquote><br />
<br />
[[Файл:1012.png]] [[Файл:0102.png]] <br />
<br />
<br />
Далее копируем Rectangle black и делаем подобъектом блокатора ban_H, а также меняем размеры rectangle black (устанавливаем не нулевые!).<br />
<br />
<br />
В свойствах счетчиков необходимо прописать уровень!<br />
<br />
1) счетчик 7_4_1 — игровые очки;<br />
<br />
уровень: last_game.score30_total<br />
<br />
2) счетчик 7_4_2 — бонус за время;<br />
<br />
уровень: last_game.score30_time<br />
<br />
3) счетчик 7_4_3 — бонус за аккуратность;<br />
<br />
уровень: last_game.score30_accuracy<br />
<br />
4) счетчик 7_4_4 — бонус за комбо;<br />
<br />
уровень: last_game.ecmbRowMax<br />
<br />
5) счетчик 7_4_5 — очки за уровень;<br />
<br />
уровень: last_game.score30_level<br />
<br />
Важный аспект:После того как вы добавили last.game.xxx в графу уровень в каждом счетчике , графа игра должна остаться пустой и так же не стоит эти счетчики закидывать в HOL , т.к. одни и те же данные могут конфликтовать между собой. Также обязательным условием является включение графы “очки 3.0” в HOL`e.<br />
<br />
После создания счетчиков и установки уровней добавляем 5 текстовых объектов, которые описывают значения, выводящиеся счетчиками в конце игры в окне результатов (игровые очки, бонус за время и т.д.).<br />
<br />
<br />
Настройки для машины — star1 <br />
(проверка в опциях параметра last_game.last_star_accuracy0, <br />
last_game.last_star_time0, )<br />
<br />
[[Файл:0303.png]]<br />
<br />
Настройки для машины — star2 <br />
(если параметр accuracy=0)<br />
<br />
[[Файл:0304.png]]<br />
<br />
Настройки для машины — star3 <br />
(если игра пройдена за указанное время)<br />
<br />
[[Файл:0305.png]]<br />
<br />
Настройки для машины — win<br />
<br />
[[Файл:0306.png]]<br />
<br />
<br />
Машина win считывает «read» показания счетчика и запускает star1 если игра пройдена.<br />
<br />
Также создаем кнопку close (button), которая должна закрывать окно результатов. Добавляем "изменить состояние объекта"; объект win, состояние close. <br />
<br />
Включаем вьювер и наблюдаем как автоматически включается таймер, за каждый собранный предмет вам начисляются очки, прогресс показывает прохождение игры, в конце игры появляется окно с выводом результатов набранных очков с звездами.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
----<br />
<br />
{| width="100%" <br />
| width="40%"|[[Редактор текстовых ресурсов|Урок 6]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Настройка миниигр|Урок 8]]<br />
|}<br />
<br />
[[Category:Learning]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&diff=9116Настройка миниигр2017-10-02T07:12:57Z<p>Dsyrovat: </p>
<hr />
<div>{| width="100%" <br />
| width="40%"|[[Создание игры «Hidden Object Game»|Урок 7]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Работа с эффектами|Урок 9]]<br />
|}<br />
----<br />
{{TOC right}}<br />
<br />
'''Цель:''' изучить настройки объектов, реализующих различные минигры.<br />
<br />
'''Задачи:''' <br />
* создать уровень игры с объектом, содержащим тип механики Puzzle<br />
* создать уровень игры с объектом, содержащим тип механики Patchwork <br />
<br />
== Puzzle ==<br />
<br />
=== Создание экрана и сцены в игровом проекте ===<br />
<br />
1. Запустить SceneEditor.<br />
<br />
2. В меню Проект → Загрузить → Learning.seproj. <br />
<br />
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_07.1, создать экран Lesson_08.<br />
<br />
[[Файл:08 1.png]]<br />
<br />
4. В экране Lesson_08 создать новые сцены 08 и Buttons, в которую (через ResourcesEditor) добавить графические ресурсы (Level_01, hint_normal в папку 05 и hint_normal, ico_R_normal2 в папку Buttons) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»).<br />
<br />
[[Файл:08 2.png]] [[Файл:08 3.png]]<br />
<br />
=== Настройка объектов, создание машин состояний ===<br />
<br />
1. В сцене 08 изменить название графического ресурса hint_normal на applause и в общих настройках элемента удалить саму графику через модификаторы → res.<br />
<br />
[[Файл:08 4.png]]<br />
<br />
2. Графическое изображение level_01 перевести в тип [[Puzzle|puzzle]] и установить такие настройки:<br />
<br />
[[Файл:08 5.png]]<br />
<br />
3. Объект applause перевести в тип машина и прописать ему состояния on и off.<br />
<br />
4. В состоянии on добавить команду play (проиграть звук) и в списке команды выбрать snd (короткий звук), подгружаемый с помощью ResourcesEditor из папки ресурсов Level_08; <br />
<br />
[[Файл:08 6.png]]<br />
<br />
5. Создать новое состояние с именем off. В общих настройка свойства элемента изначально установить состояние off.<br />
<br />
[[Файл:08 7.png]] [[Файл:08 8.png]]<br />
<br />
6. Далее перейти к сцене Buttons, перевести графические объекты hint_normal, ico_R_normal2 в тип button, в свойстве элемента установить такие настройки:<br />
<br />
[[Файл:08 9.png]] [[Файл:08 10.png]]<br />
<br />
''Кнопка R (переиграть)'' — кнопка, запускающая игру Puzzle сначала. В общих настройках свойства элемента устанавливаем, в какое начало должна возвращать кнопка (в нашем случае перейти на экран Lesson_08).Для данной игры, мы сделали переход на экран <tt>Lesson_08</tt>, который запускает игру сначала. Но в дальнейшем, чтобы не переводить все объекты в начальное состояние правильнее будет, в графе '''«изменить состояние»''' выбрать объект <tt>Level_01</tt> и указать ему состояние <tt>mix</tt>, которое означает, что игра возвращается в состояние перемешивания картинок, а не запускает всю игру заново.<br />
<br />
7. В объекте (кнопке) hint_normal нажать правой кнопкой и выбрать изменить состояние объекта → потом выбрать объект level_01 и вписать состояние hint, которое означает, что при нажатии кнопки, в качестве подсказки, игра покажет картинку в собранном виде.<br />
<br />
[[Файл:08 11.png]] [[Файл:08 12.png]]<br />
<br />
''hint'' – кнопка, реализующая подсказку на экране поиска.<br />
<br />
8. Вернуться на сцену 08 к объекту level_01 и в общих настройках свойства элемента изменить состояние объекта → выбрать объект applause и вписать состояние on.<br />
<br />
[[Файл:08 13.png]]<br />
<br />
9. Проверить выполнение задачи с помощью проигрывателя сцен Viewer.<br />
<br />
=== Упражнения ===<br />
<br />
1. Щелкнув правой кнопкой мыши по экрану Lesson_08, создать новый экран Lesson_08.1<br />
<br />
2. Создать новые сцены (с названием 08.1 и Buttons).<br />
<br />
3. Скопировать все объекты из сцены 08 (экрана Lesson_08) и Buttons (экрана Lesson_08).<br />
<br />
4. Вставить скопированые объекты в новую сцену 08.1 и Buttons (экрана Lesson_08.1).<br />
<br />
[[Файл:08 15.png]]<br />
<br />
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:<br />
<br />
a) заменить звук аплодисментов другим аудиофайлом, имеющимся в базе ресурсов;<br />
<br />
b) в пазле изменить количество разбиваемых частей на шесть (3х2), добавить сетку, изменить перестановку ячеек на смешивание по alpha, изменить время смешивания на 500 миллисекунд;<br />
<br />
c) при нажатии hint (подсказки) изменить время показа подсказки на 2 секунды, изменить время финального показа пазла на 3 секунды, установить время закрытия пазла 500 миллисекунд.<br />
<br />
6. Сделать счетчик подсказок, используя объект '''[[Store|Store]]''' создать возможность совершать покупки подсказок за реальные деньги.<br />
<br />
Щелкнув правой кнопкой мыши по экрану Lesson_08.1 создадим новый экран '''lessons_8_1_1'''. Добавим в него сцены str_8_1 и Button_8_1. В сцену str_8_1 поместим объекты из экрана Lesson_08.1: level_01, applause; оставим их без изменения. В сцену Button_8_1 скопируем из Lesson_08.1 кнопки hint_normal и ico_R_normal2 и создадим новый объект, поменяв ему тип на '''counter''' (счетчик) и названия на '''hint'''. Добавим ресурс из базы ресурсов — анимацию brown_big. Счетчик hint будет считывать купленные подсказки.<br />
<br />
[[Файл:Счетчик.PNG]]<br />
<br />
В hint_normal добавим подобъект, сделаем его машиной и назовем '''hint_m'''.<br />
<br />
Щелкнув правой кнопкой мыши на сцену Button_8_1 создадим новые сцены store и error, которые, соответственно, будут предназначены для совершения покупок — начисления подсказок и окна с ошибкой при невозможности купить подсказку.<br />
<br />
В сцену store добавим две машины: '''buy''' и '''store'''; в error - машину '''error'''.<br />
<br />
[[Файл:8 1 1 .PNG]]<br />
<br />
Для машины buy зададим состояния, при котором значении параметра hint=1, то есть она начисляет подсказку:<br />
<br />
[[Файл:Buy.PNG]]<br />
<br />
Соответственно в машине store зададим считывания со счетчика и прозрачность экрана:<br />
<br />
[[Файл:Store.PNG]]<br />
<br />
Машина error будет отвечать за вывод ошибки при неудачной покупке, то есть задает прозрачность экрана с ошибкой<br />
<br />
[[Файл:Error.PNG]]<br />
<br />
Вернемся к машине hint_m сцены Button_8_1 и пропишем для нее состояния. Машина отвечает за начисление подсказки при удачной покупке<br />
<br />
[[Файл:Hint m.PNG]]<br />
<br />
<br />
'''Совершение покупки'''<br />
<br />
Для того что бы покупку можно было совершить необходимо задать в глобальных свойствах возможность совершения покупки. Для этого на сцене в глобальном экране opt добавим новый элемент, которому изменим тип на store. В свойствах объекта store кликнем правой кнопкой мыши на свойстве wallet, вставляем новое свойство — '''in-app покупка'''. Добавляем поля для покупки: внутренний id, и выбираем расходуемая.<br />
<br />
[[Файл:Store2.PNG]]<br />
<br />
<br />
'''Описание объекта Store'''<br />
<br />
Объект '''Store''' необходим для описания InApp покупок (позволяют продавать отдельные бонусы, паки и т.п.) в игре.<br />
<br />
Основные параметры объекта Store<br />
<br />
''id покупки'' – внутренний id покупки.<br />
<br />
''Расходуемая'' – 1 – покупка расходуемая, 0 – покупка раз и навсегда, если параметр не указан, по-умолчанию покупка – одноразовая.<br />
<br />
''объект (restore)'' – объект - Слушатель восстановления покупки. Этому объекту будет сообщено об успехе восстановления этой покупки покупки.<br />
состояние (restore) – это состояние будет установлено объекту при успешном восстановлении этой покупки.<br />
<br />
'''Для того, чтобы объект Store работал во Вьювере, нужно подкорректировать файл app.icf'''<br />
<br />
1. Найти файл app.icf в папке с вашим проектом.<br />
<br />
2. Открыть его и найти тег [Game].<br />
<br />
3. В теге Game добавить строку purchaseEverything=1.<br />
<br />
4. Сохранить файл<br />
<br />
<pre><br />
<br />
[Game]<br />
purchaseEverything=1<br />
DispFixRot="Landscape"<br />
# comments and whitespace stripped by deployment tool<br />
debug="Absolutist-2253"<br />
show_build_date=1<br />
AppTitle="Viewer"<br />
DebuggerIP="127.0.0.1"<br />
DebuggerPort=5322<br />
<br />
</pre><br />
<br />
<br />
<br />
'''Оформление'''<br />
<br />
Теперь перейдем к оформлению. Для того что бы на экране появлялось окно с предложением о покупке подсказке необходимо его создать. В начальный момент оно должно быть невидимым и прокликиваем, это состояние задано в машине store. Создадим в ней 5 подобъектов.<br />
<br />
<br />
1.1. Первые два переименуем в '''black''' и '''rec''', изменим им тип на '''[[Rectangle|Rectangle]]'''.<br />
<br />
Откроем объект black, пропишем ему свойствах, оставив его пустым рамку, и цвет фона<br />
<br />
[[Файл:Black.PNG]]<br />
<br />
Для объекта rec зададим рамку и текстуру заливки. Для этого из базы ресурсов мышкой перетащим соответствующие элементы. Ресурсы для графики находятся в предыдущем уроке. Чтобы прямоугольник отображался правильно, задайте ему ненулевые размеры.<br />
<br />
[[Файл:Rec.PNG]]<br />
<br />
Чтобы прямоугольник отображался правильно, задайте ему ненулевые параметры размера.<br />
<br />
1.2. Третьему элементу поменяем тип на text с текстом<br />
<br />
[[Файл:Text.PNG]]<br />
<br />
<br />
1.3. Четвертый и пятый объекты сделаем кнопками, и назовем их '''ok''' – купить подсказку, '''no''' – отказаться от покупки. <br />
<br />
Для кнопки ok из базы ресурсов выберем внешний вид<br />
<br />
[[Файл:Ok1.PNG]]<br />
<br />
и зададим переход на совершение или провал покупки. Для этого кликнем правой кнопкой мыши на свойстве позиционирование и добавим свойство совершить in-app покупку, заполним для нее поля как указано на картинки<br />
<br />
[[Файл:Ok2.PNG]]<br />
<br />
Аналогично поступим с кнопкой no. Добавим графический ресурс и свойство «изменить состояние объекта», которое будет закрывать окно с предложением о покупке<br />
<br />
[[Файл:No1.PNG]] [[Файл:No2.PNG]]<br />
<br />
<br />
2. Таким же само сделаем со сценой error. В ней создадим четыре объекта: два rectangle: '''rec_error''' – пустой, '''black_error''' — оформленный в такую же рамку; кнопку '''buy''', которая будет делать активным состояние error; текстовый объект '''text_error''' с текстом «error!»<br />
<br />
[[Файл:Buy1.PNG]]<br />
<br />
Разместим все объекты так, что бы картинка хорошо смотрелась. Сохраним все изменения и запустим вьювер. <br />
<br />
[[Файл:Снимок1.PNG]] <br />
<br />
Сейчас при покупке подсказки количество покупок не имеет лимита, по этому вывод ошибки мы не получим. Этот параметр в реальной игре будет реализован с помощью объекта store, заданием ему соответствующих свойств.<br />
<br />
== Patchwork ==<br />
<br />
=== Создание экрана и сцены в игровом проекте ===<br />
<br />
1. Запустить SceneEditor.<br />
<br />
2. В меню Проект → Загрузить → Learning.seproj. <br />
<br />
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_08.1, создать экран Lesson_08.2.<br />
<br />
[[Файл:Lesson8_1.jpg|right]]<br />
<br />
4. В экране Lesson_08.2 создать новую сцену 08, в которую (через ResourcesEditor) добавить графические ресурсы (bg_game, panel_down, btb_replay_normal) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»). В редактор ресурсов добавить графику нашего будущего Patchwork: level_17, level_17_mask.<br />
<br />
=== Настройка объектов ===<br />
<br />
1. Создадим на сцене 08 еще два объекта. Для этого нажмем правой кнопкой мыши по сцене и выберем "Создать объект в текущем элементе".<br />
<br />
[[Файл:Lesson8_2.jpg]]<br />
<br />
2. Переименуем один из созданных объектов в Patchwork, а другой в table.<br />
<br />
[[Файл:Lesson8_3.jpg]]<br />
<br />
[[Файл:Lesson8_4.jpg|right]]<br />
<br />
3. Теперь будем изменять тип объектов на сцене, чтобы получить нужные нам элементы. Графические ресурсы bg_game и panel_down оставляем без изменений. Ресурсу btb_replay_normal изменяем тип на button. Объекту Patchwork меняем тип на patchwork, table изменяем на тип table.<br />
4. Теперь объекты нужно разместить на сцене. Обратим внимание на то, что два последних объекта которые мы добавили без графического ресурса. По умолчанию, создаваемые на сцене объекты имеют размер 100х100 пикселей. Увеличим размер таблицы по высоте до 450 пикселей и перетащим ее влево, поместив над объектом panel_down.<br />
<br />
[[Файл:Lesson8_5.jpg]]<br />
<br />
Кнопку поместим в левый нижний угол. Добиваемся такого расположения объектов, как показанно на рисунке.<br />
<br />
[[Файл:Lesson8_6.jpg]]<br />
<br />
5. Настроим наши объекты. Для кнопки btb_replay_normal в поле "перейти на" укажите текущий экран Lesson_8.2.<br />
<br />
<br />
[[Файл:правка_намба_1.png|200px]]<br />
<br />
<br />
Для таблицы измените следующие параметры<br />
<br />
<br />
[[Файл:правка_намба_2.png|200px]]<br />
<br />
<br />
Для Patchwork устанавливаем следующие настройки. Обратите внимание, что поля "карт.спереди" и "шаблон" заполняются перетаскиванием графического ресурса из редактора ресурсов.<br />
<br />
[[Файл:Lesson8_9.jpg]]<br />
<br />
6. Для корректной работы вашего Patchwork необходимо, чтобы таблица находилась выше Patchwork по дереву объектов.<br />
<br />
[[Файл:Lesson8_10.jpg]]<br />
<br />
<br />
7. Проверьте выполнение задачи с помощью проигрывателя сцен Viewer.<br />
<br />
<br />
=== Упражнения ===<br />
<br />
1. Щелкнув правой кнопкой мыши по экрану Lesson_08.2, создать новый экран Lesson_08.3<br />
<br />
2. Создать новую сцену с названием game.<br />
<br />
3. Скопировать все объекты из сцены 08 (экрана Lesson_08.2).<br />
<br />
4. Вставить скопированые объекты в новую сцену game (экрана Lesson_08.3).<br />
<br />
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:<br />
<br />
a) заменить картинку пэчворка и маски на другую, имеющуюся в базе ресурсов;<br />
<br />
b) изменить настройки кнопки рестарта таким образом, чтобы не переходить на экран Lesson_08.3, а сразу передавать пэчворку состояние mix.<br />
----<br />
{| width="100%" <br />
| width="40%"|[[Создание игры «Hidden Object Game»|Урок 7]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Работа с эффектами|Урок 9]]<br />
|}<br />
<br />
[[Category:Learning]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&diff=9115Настройка миниигр2017-10-02T07:12:00Z<p>Dsyrovat: </p>
<hr />
<div>{| width="100%" <br />
| width="40%"|[[Создание игры «Hidden Object Game»|Урок 7]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Работа с эффектами|Урок 9]]<br />
|}<br />
----<br />
{{TOC right}}<br />
<br />
'''Цель:''' изучить настройки объектов, реализующих различные минигры.<br />
<br />
'''Задачи:''' <br />
* создать уровень игры с объектом, содержащим тип механики Puzzle<br />
* создать уровень игры с объектом, содержащим тип механики Patchwork <br />
<br />
== Puzzle ==<br />
<br />
=== Создание экрана и сцены в игровом проекте ===<br />
<br />
1. Запустить SceneEditor.<br />
<br />
2. В меню Проект → Загрузить → Learning.seproj. <br />
<br />
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_07.1, создать экран Lesson_08.<br />
<br />
[[Файл:08 1.png]]<br />
<br />
4. В экране Lesson_08 создать новые сцены 08 и Buttons, в которую (через ResourcesEditor) добавить графические ресурсы (Level_01, hint_normal в папку 05 и hint_normal, ico_R_normal2 в папку Buttons) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»).<br />
<br />
[[Файл:08 2.png]] [[Файл:08 3.png]]<br />
<br />
=== Настройка объектов, создание машин состояний ===<br />
<br />
1. В сцене 08 изменить название графического ресурса hint_normal на applause и в общих настройках элемента удалить саму графику через модификаторы → res.<br />
<br />
[[Файл:08 4.png]]<br />
<br />
2. Графическое изображение level_01 перевести в тип [[Puzzle|puzzle]] и установить такие настройки:<br />
<br />
[[Файл:08 5.png]]<br />
<br />
3. Объект applause перевести в тип машина и прописать ему состояния on и off.<br />
<br />
4. В состоянии on добавить команду play (проиграть звук) и в списке команды выбрать snd (короткий звук), подгружаемый с помощью ResourcesEditor из папки ресурсов Level_08; <br />
<br />
[[Файл:08 6.png]]<br />
<br />
5. Создать новое состояние с именем off. В общих настройка свойства элемента изначально установить состояние off.<br />
<br />
[[Файл:08 7.png]] [[Файл:08 8.png]]<br />
<br />
6. Далее перейти к сцене Buttons, перевести графические объекты hint_normal, ico_R_normal2 в тип button, в свойстве элемента установить такие настройки:<br />
<br />
[[Файл:08 9.png]] [[Файл:08 10.png]]<br />
<br />
''Кнопка R (переиграть)'' — кнопка, запускающая игру Puzzle сначала. В общих настройках свойства элемента устанавливаем, в какое начало должна возвращать кнопка (в нашем случае перейти на экран Lesson_08).Для данной игры, мы сделали переход на экран <tt>Lesson_08</tt>, который запускает игру сначала. Но в дальнейшем, чтобы не переводить все объекты в начальное состояние правильнее будет, в графе '''«изменить состояние»''' выбрать объект <tt>Level_01</tt> и указать ему состояние <tt>mix</tt>, которое означает, что игра возвращается в состояние перемешивания картинок, а не запускает всю игру заново.<br />
<br />
7. В объекте (кнопке) hint_normal нажать правой кнопкой и выбрать изменить состояние объекта → потом выбрать объект level_01 и вписать состояние hint, которое означает, что при нажатии кнопки, в качестве подсказки, игра покажет картинку в собранном виде.<br />
<br />
[[Файл:08 11.png]] [[Файл:08 12.png]]<br />
<br />
''hint'' – кнопка, реализующая подсказку на экране поиска.<br />
<br />
8. Вернуться на сцену 08 к объекту level_01 и в общих настройках свойства элемента изменить состояние объекта → выбрать объект applause и вписать состояние on.<br />
<br />
[[Файл:08 13.png]]<br />
<br />
9. Проверить выполнение задачи с помощью проигрывателя сцен Viewer.<br />
<br />
=== Упражнения ===<br />
<br />
1. Щелкнув правой кнопкой мыши по экрану Lesson_08, создать новый экран Lesson_08.1<br />
<br />
2. Создать новые сцены (с названием 08.1 и Buttons).<br />
<br />
3. Скопировать все объекты из сцены 08 (экрана Lesson_08) и Buttons (экрана Lesson_08).<br />
<br />
4. Вставить скопированые объекты в новую сцену 08.1 и Buttons (экрана Lesson_08.1).<br />
<br />
[[Файл:08 15.png]]<br />
<br />
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:<br />
<br />
a) заменить звук аплодисментов другим аудиофайлом, имеющимся в базе ресурсов;<br />
<br />
b) в пазле изменить количество разбиваемых частей на шесть (3х2), добавить сетку, изменить перестановку ячеек на смешивание по alpha, изменить время смешивания на 500 миллисекунд;<br />
<br />
c) при нажатии hint (подсказки) изменить время показа подсказки на 2 секунды, изменить время финального показа пазла на 3 секунды, установить время закрытия пазла 500 миллисекунд.<br />
<br />
6. Сделать счетчик подсказок, используя объект '''[[Store|Store]]''' создать возможность совершать покупки подсказок за реальные деньги.<br />
<br />
Щелкнув правой кнопкой мыши по экрану Lesson_08.1 создадим новый экран '''lessons_8_1_1'''. Добавим в него сцены str_8_1 и Button_8_1. В сцену str_8_1 поместим объекты из экрана Lesson_08.1: level_01, applause; оставим их без изменения. В сцену Button_8_1 скопируем из Lesson_08.1 кнопки hint_normal и ico_R_normal2 и создадим новый объект, поменяв ему тип на '''counter''' (счетчик) и названия на '''hint'''. Добавим ресурс из базы ресурсов — анимацию brown_big. Счетчик hint будет считывать купленные подсказки.<br />
<br />
[[Файл:Счетчик.PNG]]<br />
<br />
В hint_normal добавим подобъект, сделаем его машиной и назовем '''hint_m'''.<br />
<br />
Щелкнув правой кнопкой мыши на сцену Button_8_1 создадим новые сцены store и error, которые, соответственно, будут предназначены для совершения покупок — начисления подсказок и окна с ошибкой при невозможности купить подсказку.<br />
<br />
В сцену store добавим две машины: '''buy''' и '''store'''; в error - машину '''error'''.<br />
<br />
[[Файл:8 1 1 .PNG]]<br />
<br />
Для машины buy зададим состояния, при котором значении параметра hint=1, то есть она начисляет подсказку:<br />
<br />
[[Файл:Buy.PNG]]<br />
<br />
Соответственно в машине store зададим считывания со счетчика и прозрачность экрана:<br />
<br />
[[Файл:Store.PNG]]<br />
<br />
Машина error будет отвечать за вывод ошибки при неудачной покупке, то есть задает прозрачность экрана с ошибкой<br />
<br />
[[Файл:Error.PNG]]<br />
<br />
Вернемся к машине hint_m сцены Button_8_1 и пропишем для нее состояния. Машина отвечает за начисление подсказки при удачной покупке<br />
<br />
[[Файл:Hint m.PNG]]<br />
<br />
<br />
'''Совершение покупки'''<br />
<br />
Для того что бы покупку можно было совершить необходимо задать в глобальных свойствах возможность совершения покупки. Для этого на сцене в глобальном экране opt добавим новый элемент, которому изменим тип на store. В свойствах объекта store кликнем правой кнопкой мыши на свойстве wallet, вставляем новое свойство — '''in-app покупка'''. Добавляем поля для покупки: внутренний id, и выбираем расходуемая.<br />
<br />
[[Файл:Store2.PNG]]<br />
<br />
<br />
'''Описание объекта Store'''<br />
<br />
Объект '''Store''' необходим для описания InApp покупок (позволяют продавать отдельные бонусы, паки и т.п.) в игре.<br />
<br />
Основные параметры объекта Store<br />
<br />
''id покупки'' – внутренний id покупки.<br />
<br />
''Расходуемая'' – 1 – покупка расходуемая, 0 – покупка раз и навсегда, если параметр не указан, по-умолчанию покупка – одноразовая.<br />
<br />
''объект (restore)'' – объект - Слушатель восстановления покупки. Этому объекту будет сообщено об успехе восстановления этой покупки покупки.<br />
состояние (restore) – это состояние будет установлено объекту при успешном восстановлении этой покупки.<br />
<br />
'''Для того, чтобы объект Store работал во Вьювере, нужно подкорректировать файл app.icf'''<br />
<br />
1. Найти файл app.icf в папке с вашим проектом.<br />
<br />
2. Открыть его и найти тег [Game].<br />
<br />
3. В теге Game добавить строку purchaseEverything=1.<br />
<br />
4. Сохранить файл<br />
<br />
<pre><br />
<br />
[Game]<br />
purchaseEverything=1<br />
DispFixRot="Landscape"<br />
# comments and whitespace stripped by deployment tool<br />
debug="Absolutist-2253"<br />
show_build_date=1<br />
AppTitle="Viewer"<br />
DebuggerIP="127.0.0.1"<br />
DebuggerPort=5322<br />
<br />
</pre><br />
<br />
<br />
<br />
'''Оформление'''<br />
<br />
Теперь перейдем к оформлению. Для того что бы на экране появлялось окно с предложением о покупке подсказке необходимо его создать. В начальный момент оно должно быть невидимым и прокликиваем, это состояние задано в машине store. Создадим в ней 5 подобъектов.<br />
<br />
<br />
1.1. Первые два переименуем в '''black''' и '''rec''', изменим им тип на '''[[Rectangle|Rectangle]]'''.<br />
<br />
Откроем объект black, пропишем ему свойствах, оставив его пустым рамку, и цвет фона<br />
<br />
[[Файл:Black.PNG]]<br />
<br />
Для объекта rec зададим рамку и текстуру заливки. Для этого из базы ресурсов мышкой перетащим соответствующие элементы. Ресурсы для графики находятся в предыдущем уроке. Чтобы прямоугольник отображался правильно, задайте ему ненулевые размеры.<br />
<br />
[[Файл:Rec.PNG]]<br />
<br />
Чтобы прямоугольник отображался правильно, задайте ему ненулевые размеры.<br />
<br />
1.2. Третьему элементу поменяем тип на text с текстом<br />
<br />
[[Файл:Text.PNG]]<br />
<br />
<br />
1.3. Четвертый и пятый объекты сделаем кнопками, и назовем их '''ok''' – купить подсказку, '''no''' – отказаться от покупки. <br />
<br />
Для кнопки ok из базы ресурсов выберем внешний вид<br />
<br />
[[Файл:Ok1.PNG]]<br />
<br />
и зададим переход на совершение или провал покупки. Для этого кликнем правой кнопкой мыши на свойстве позиционирование и добавим свойство совершить in-app покупку, заполним для нее поля как указано на картинки<br />
<br />
[[Файл:Ok2.PNG]]<br />
<br />
Аналогично поступим с кнопкой no. Добавим графический ресурс и свойство «изменить состояние объекта», которое будет закрывать окно с предложением о покупке<br />
<br />
[[Файл:No1.PNG]] [[Файл:No2.PNG]]<br />
<br />
<br />
2. Таким же само сделаем со сценой error. В ней создадим четыре объекта: два rectangle: '''rec_error''' – пустой, '''black_error''' — оформленный в такую же рамку; кнопку '''buy''', которая будет делать активным состояние error; текстовый объект '''text_error''' с текстом «error!»<br />
<br />
[[Файл:Buy1.PNG]]<br />
<br />
Разместим все объекты так, что бы картинка хорошо смотрелась. Сохраним все изменения и запустим вьювер. <br />
<br />
[[Файл:Снимок1.PNG]] <br />
<br />
Сейчас при покупке подсказки количество покупок не имеет лимита, по этому вывод ошибки мы не получим. Этот параметр в реальной игре будет реализован с помощью объекта store, заданием ему соответствующих свойств.<br />
<br />
== Patchwork ==<br />
<br />
=== Создание экрана и сцены в игровом проекте ===<br />
<br />
1. Запустить SceneEditor.<br />
<br />
2. В меню Проект → Загрузить → Learning.seproj. <br />
<br />
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_08.1, создать экран Lesson_08.2.<br />
<br />
[[Файл:Lesson8_1.jpg|right]]<br />
<br />
4. В экране Lesson_08.2 создать новую сцену 08, в которую (через ResourcesEditor) добавить графические ресурсы (bg_game, panel_down, btb_replay_normal) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»). В редактор ресурсов добавить графику нашего будущего Patchwork: level_17, level_17_mask.<br />
<br />
=== Настройка объектов ===<br />
<br />
1. Создадим на сцене 08 еще два объекта. Для этого нажмем правой кнопкой мыши по сцене и выберем "Создать объект в текущем элементе".<br />
<br />
[[Файл:Lesson8_2.jpg]]<br />
<br />
2. Переименуем один из созданных объектов в Patchwork, а другой в table.<br />
<br />
[[Файл:Lesson8_3.jpg]]<br />
<br />
[[Файл:Lesson8_4.jpg|right]]<br />
<br />
3. Теперь будем изменять тип объектов на сцене, чтобы получить нужные нам элементы. Графические ресурсы bg_game и panel_down оставляем без изменений. Ресурсу btb_replay_normal изменяем тип на button. Объекту Patchwork меняем тип на patchwork, table изменяем на тип table.<br />
4. Теперь объекты нужно разместить на сцене. Обратим внимание на то, что два последних объекта которые мы добавили без графического ресурса. По умолчанию, создаваемые на сцене объекты имеют размер 100х100 пикселей. Увеличим размер таблицы по высоте до 450 пикселей и перетащим ее влево, поместив над объектом panel_down.<br />
<br />
[[Файл:Lesson8_5.jpg]]<br />
<br />
Кнопку поместим в левый нижний угол. Добиваемся такого расположения объектов, как показанно на рисунке.<br />
<br />
[[Файл:Lesson8_6.jpg]]<br />
<br />
5. Настроим наши объекты. Для кнопки btb_replay_normal в поле "перейти на" укажите текущий экран Lesson_8.2.<br />
<br />
<br />
[[Файл:правка_намба_1.png|200px]]<br />
<br />
<br />
Для таблицы измените следующие параметры<br />
<br />
<br />
[[Файл:правка_намба_2.png|200px]]<br />
<br />
<br />
Для Patchwork устанавливаем следующие настройки. Обратите внимание, что поля "карт.спереди" и "шаблон" заполняются перетаскиванием графического ресурса из редактора ресурсов.<br />
<br />
[[Файл:Lesson8_9.jpg]]<br />
<br />
6. Для корректной работы вашего Patchwork необходимо, чтобы таблица находилась выше Patchwork по дереву объектов.<br />
<br />
[[Файл:Lesson8_10.jpg]]<br />
<br />
<br />
7. Проверьте выполнение задачи с помощью проигрывателя сцен Viewer.<br />
<br />
<br />
=== Упражнения ===<br />
<br />
1. Щелкнув правой кнопкой мыши по экрану Lesson_08.2, создать новый экран Lesson_08.3<br />
<br />
2. Создать новую сцену с названием game.<br />
<br />
3. Скопировать все объекты из сцены 08 (экрана Lesson_08.2).<br />
<br />
4. Вставить скопированые объекты в новую сцену game (экрана Lesson_08.3).<br />
<br />
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:<br />
<br />
a) заменить картинку пэчворка и маски на другую, имеющуюся в базе ресурсов;<br />
<br />
b) изменить настройки кнопки рестарта таким образом, чтобы не переходить на экран Lesson_08.3, а сразу передавать пэчворку состояние mix.<br />
----<br />
{| width="100%" <br />
| width="40%"|[[Создание игры «Hidden Object Game»|Урок 7]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Работа с эффектами|Урок 9]]<br />
|}<br />
<br />
[[Category:Learning]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&diff=9114Настройка миниигр2017-10-02T07:06:13Z<p>Dsyrovat: </p>
<hr />
<div>{| width="100%" <br />
| width="40%"|[[Создание игры «Hidden Object Game»|Урок 7]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Работа с эффектами|Урок 9]]<br />
|}<br />
----<br />
{{TOC right}}<br />
<br />
'''Цель:''' изучить настройки объектов, реализующих различные минигры.<br />
<br />
'''Задачи:''' <br />
* создать уровень игры с объектом, содержащим тип механики Puzzle<br />
* создать уровень игры с объектом, содержащим тип механики Patchwork <br />
<br />
== Puzzle ==<br />
<br />
=== Создание экрана и сцены в игровом проекте ===<br />
<br />
1. Запустить SceneEditor.<br />
<br />
2. В меню Проект → Загрузить → Learning.seproj. <br />
<br />
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_07.1, создать экран Lesson_08.<br />
<br />
[[Файл:08 1.png]]<br />
<br />
4. В экране Lesson_08 создать новые сцены 08 и Buttons, в которую (через ResourcesEditor) добавить графические ресурсы (Level_01, hint_normal в папку 05 и hint_normal, ico_R_normal2 в папку Buttons) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»).<br />
<br />
[[Файл:08 2.png]] [[Файл:08 3.png]]<br />
<br />
=== Настройка объектов, создание машин состояний ===<br />
<br />
1. В сцене 08 изменить название графического ресурса hint_normal на applause и в общих настройках элемента удалить саму графику через модификаторы → res.<br />
<br />
[[Файл:08 4.png]]<br />
<br />
2. Графическое изображение level_01 перевести в тип [[Puzzle|puzzle]] и установить такие настройки:<br />
<br />
[[Файл:08 5.png]]<br />
<br />
3. Объект applause перевести в тип машина и прописать ему состояния on и off.<br />
<br />
4. В состоянии on добавить команду play (проиграть звук) и в списке команды выбрать snd (короткий звук), подгружаемый с помощью ResourcesEditor из папки ресурсов Level_08; <br />
<br />
[[Файл:08 6.png]]<br />
<br />
5. Создать новое состояние с именем off. В общих настройка свойства элемента изначально установить состояние off.<br />
<br />
[[Файл:08 7.png]] [[Файл:08 8.png]]<br />
<br />
6. Далее перейти к сцене Buttons, перевести графические объекты hint_normal, ico_R_normal2 в тип button, в свойстве элемента установить такие настройки:<br />
<br />
[[Файл:08 9.png]] [[Файл:08 10.png]]<br />
<br />
''Кнопка R (переиграть)'' — кнопка, запускающая игру Puzzle сначала. В общих настройках свойства элемента устанавливаем, в какое начало должна возвращать кнопка (в нашем случае перейти на экран Lesson_08).Для данной игры, мы сделали переход на экран <tt>Lesson_08</tt>, который запускает игру сначала. Но в дальнейшем, чтобы не переводить все объекты в начальное состояние правильнее будет, в графе '''«изменить состояние»''' выбрать объект <tt>Level_01</tt> и указать ему состояние <tt>mix</tt>, которое означает, что игра возвращается в состояние перемешивания картинок, а не запускает всю игру заново.<br />
<br />
7. В объекте (кнопке) hint_normal нажать правой кнопкой и выбрать изменить состояние объекта → потом выбрать объект level_01 и вписать состояние hint, которое означает, что при нажатии кнопки, в качестве подсказки, игра покажет картинку в собранном виде.<br />
<br />
[[Файл:08 11.png]] [[Файл:08 12.png]]<br />
<br />
''hint'' – кнопка, реализующая подсказку на экране поиска.<br />
<br />
8. Вернуться на сцену 08 к объекту level_01 и в общих настройках свойства элемента изменить состояние объекта → выбрать объект applause и вписать состояние on.<br />
<br />
[[Файл:08 13.png]]<br />
<br />
9. Проверить выполнение задачи с помощью проигрывателя сцен Viewer.<br />
<br />
=== Упражнения ===<br />
<br />
1. Щелкнув правой кнопкой мыши по экрану Lesson_08, создать новый экран Lesson_08.1<br />
<br />
2. Создать новые сцены (с названием 08.1 и Buttons).<br />
<br />
3. Скопировать все объекты из сцены 08 (экрана Lesson_08) и Buttons (экрана Lesson_08).<br />
<br />
4. Вставить скопированые объекты в новую сцену 08.1 и Buttons (экрана Lesson_08.1).<br />
<br />
[[Файл:08 15.png]]<br />
<br />
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:<br />
<br />
a) заменить звук аплодисментов другим аудиофайлом, имеющимся в базе ресурсов;<br />
<br />
b) в пазле изменить количество разбиваемых частей на шесть (3х2), добавить сетку, изменить перестановку ячеек на смешивание по alpha, изменить время смешивания на 500 миллисекунд;<br />
<br />
c) при нажатии hint (подсказки) изменить время показа подсказки на 2 секунды, изменить время финального показа пазла на 3 секунды, установить время закрытия пазла 500 миллисекунд.<br />
<br />
6. Сделать счетчик подсказок, используя объект '''[[Store|Store]]''' создать возможность совершать покупки подсказок за реальные деньги.<br />
<br />
Щелкнув правой кнопкой мыши по экрану Lesson_08.1 создадим новый экран '''lessons_8_1_1'''. Добавим в него сцены str_8_1 и Button_8_1. В сцену str_8_1 поместим объекты из экрана Lesson_08.1: level_01, applause; оставим их без изменения. В сцену Button_8_1 скопируем из Lesson_08.1 кнопки hint_normal и ico_R_normal2 и создадим новый объект, поменяв ему тип на '''counter''' (счетчик) и названия на '''hint'''. Добавим ресурс из базы ресурсов — анимацию brown_big. Счетчик hint будет считывать купленные подсказки.<br />
<br />
[[Файл:Счетчик.PNG]]<br />
<br />
В hint_normal добавим подобъект, сделаем его машиной и назовем '''hint_m'''.<br />
<br />
Щелкнув правой кнопкой мыши на сцену Button_8_1 создадим новые сцены store и error, которые, соответственно, будут предназначены для совершения покупок — начисления подсказок и окна с ошибкой при невозможности купить подсказку.<br />
<br />
В сцену store добавим две машины: '''buy''' и '''store'''; в error - машину '''error'''.<br />
<br />
[[Файл:8 1 1 .PNG]]<br />
<br />
Для машины buy зададим состояния, при котором значении параметра hint=1, то есть она начисляет подсказку:<br />
<br />
[[Файл:Buy.PNG]]<br />
<br />
Соответственно в машине store зададим считывания со счетчика и прозрачность экрана:<br />
<br />
[[Файл:Store.PNG]]<br />
<br />
Машина error будет отвечать за вывод ошибки при неудачной покупке, то есть задает прозрачность экрана с ошибкой<br />
<br />
[[Файл:Error.PNG]]<br />
<br />
Вернемся к машине hint_m сцены Button_8_1 и пропишем для нее состояния. Машина отвечает за начисление подсказки при удачной покупке<br />
<br />
[[Файл:Hint m.PNG]]<br />
<br />
<br />
'''Совершение покупки'''<br />
<br />
Для того что бы покупку можно было совершить необходимо задать в глобальных свойствах возможность совершения покупки. Для этого на сцене в глобальном экране opt добавим новый элемент, которому изменим тип на store. В свойствах объекта store кликнем правой кнопкой мыши на свойстве wallet, вставляем новое свойство — '''in-app покупка'''. Добавляем поля для покупки: внутренний id, и выбираем расходуемая.<br />
<br />
[[Файл:Store2.PNG]]<br />
<br />
<br />
'''Описание объекта Store'''<br />
<br />
Объект '''Store''' необходим для описания InApp покупок (позволяют продавать отдельные бонусы, паки и т.п.) в игре.<br />
<br />
Основные параметры объекта Store<br />
<br />
''id покупки'' – внутренний id покупки.<br />
<br />
''Расходуемая'' – 1 – покупка расходуемая, 0 – покупка раз и навсегда, если параметр не указан, по-умолчанию покупка – одноразовая.<br />
<br />
''объект (restore)'' – объект - Слушатель восстановления покупки. Этому объекту будет сообщено об успехе восстановления этой покупки покупки.<br />
состояние (restore) – это состояние будет установлено объекту при успешном восстановлении этой покупки.<br />
<br />
'''Для того, чтобы объект Store работал во Вьювере, нужно подкорректировать файл app.icf'''<br />
<br />
1. Найти файл app.icf в папке с вашим проектом.<br />
<br />
2. Открыть его и найти тег [Game].<br />
<br />
3. В теге Game добавить строку purchaseEverything=1.<br />
<br />
4. Сохранить файл<br />
<br />
<pre><br />
<br />
[Game]<br />
purchaseEverything=1<br />
DispFixRot="Landscape"<br />
# comments and whitespace stripped by deployment tool<br />
debug="Absolutist-2253"<br />
show_build_date=1<br />
AppTitle="Viewer"<br />
DebuggerIP="127.0.0.1"<br />
DebuggerPort=5322<br />
<br />
</pre><br />
<br />
<br />
<br />
'''Оформление'''<br />
<br />
Теперь перейдем к оформлению. Для того что бы на экране появлялось окно с предложением о покупке подсказке необходимо его создать. В начальный момент оно должно быть невидимым и прокликиваем, это состояние задано в машине store. Создадим в ней 5 подобъектов.<br />
<br />
<br />
1.1. Первые два переименуем в '''black''' и '''rec''', изменим им тип на '''[[Rectangle|Rectangle]]'''.<br />
<br />
Откроем объект black, пропишем ему свойствах, оставив его пустым рамку, и цвет фона<br />
<br />
[[Файл:Black.PNG]]<br />
<br />
Для объекта rec зададим рамку и текстуру заливки. Для этого из базы ресурсов мышкой перетащим соответствующие элементы. Ресурсы для графики находятся в предыдущем уроке.<br />
<br />
[[Файл:Rec.PNG]]<br />
<br />
<br />
1.2. Третьему элементу поменяем тип на text с текстом<br />
<br />
[[Файл:Text.PNG]]<br />
<br />
<br />
1.3. Четвертый и пятый объекты сделаем кнопками, и назовем их '''ok''' – купить подсказку, '''no''' – отказаться от покупки. <br />
<br />
Для кнопки ok из базы ресурсов выберем внешний вид<br />
<br />
[[Файл:Ok1.PNG]]<br />
<br />
и зададим переход на совершение или провал покупки. Для этого кликнем правой кнопкой мыши на свойстве позиционирование и добавим свойство совершить in-app покупку, заполним для нее поля как указано на картинки<br />
<br />
[[Файл:Ok2.PNG]]<br />
<br />
Аналогично поступим с кнопкой no. Добавим графический ресурс и свойство «изменить состояние объекта», которое будет закрывать окно с предложением о покупке<br />
<br />
[[Файл:No1.PNG]] [[Файл:No2.PNG]]<br />
<br />
<br />
2. Таким же само сделаем со сценой error. В ней создадим четыре объекта: два rectangle: '''rec_error''' – пустой, '''black_error''' — оформленный в такую же рамку; кнопку '''buy''', которая будет делать активным состояние error; текстовый объект '''text_error''' с текстом «error!»<br />
<br />
[[Файл:Buy1.PNG]]<br />
<br />
Разместим все объекты так, что бы картинка хорошо смотрелась. Сохраним все изменения и запустим вьювер. <br />
<br />
[[Файл:Снимок1.PNG]] <br />
<br />
Сейчас при покупке подсказки количество покупок не имеет лимита, по этому вывод ошибки мы не получим. Этот параметр в реальной игре будет реализован с помощью объекта store, заданием ему соответствующих свойств.<br />
<br />
== Patchwork ==<br />
<br />
=== Создание экрана и сцены в игровом проекте ===<br />
<br />
1. Запустить SceneEditor.<br />
<br />
2. В меню Проект → Загрузить → Learning.seproj. <br />
<br />
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_08.1, создать экран Lesson_08.2.<br />
<br />
[[Файл:Lesson8_1.jpg|right]]<br />
<br />
4. В экране Lesson_08.2 создать новую сцену 08, в которую (через ResourcesEditor) добавить графические ресурсы (bg_game, panel_down, btb_replay_normal) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»). В редактор ресурсов добавить графику нашего будущего Patchwork: level_17, level_17_mask.<br />
<br />
=== Настройка объектов ===<br />
<br />
1. Создадим на сцене 08 еще два объекта. Для этого нажмем правой кнопкой мыши по сцене и выберем "Создать объект в текущем элементе".<br />
<br />
[[Файл:Lesson8_2.jpg]]<br />
<br />
2. Переименуем один из созданных объектов в Patchwork, а другой в table.<br />
<br />
[[Файл:Lesson8_3.jpg]]<br />
<br />
[[Файл:Lesson8_4.jpg|right]]<br />
<br />
3. Теперь будем изменять тип объектов на сцене, чтобы получить нужные нам элементы. Графические ресурсы bg_game и panel_down оставляем без изменений. Ресурсу btb_replay_normal изменяем тип на button. Объекту Patchwork меняем тип на patchwork, table изменяем на тип table.<br />
4. Теперь объекты нужно разместить на сцене. Обратим внимание на то, что два последних объекта которые мы добавили без графического ресурса. По умолчанию, создаваемые на сцене объекты имеют размер 100х100 пикселей. Увеличим размер таблицы по высоте до 450 пикселей и перетащим ее влево, поместив над объектом panel_down.<br />
<br />
[[Файл:Lesson8_5.jpg]]<br />
<br />
Кнопку поместим в левый нижний угол. Добиваемся такого расположения объектов, как показанно на рисунке.<br />
<br />
[[Файл:Lesson8_6.jpg]]<br />
<br />
5. Настроим наши объекты. Для кнопки btb_replay_normal в поле "перейти на" укажите текущий экран Lesson_8.2.<br />
<br />
<br />
[[Файл:правка_намба_1.png|200px]]<br />
<br />
<br />
Для таблицы измените следующие параметры<br />
<br />
<br />
[[Файл:правка_намба_2.png|200px]]<br />
<br />
<br />
Для Patchwork устанавливаем следующие настройки. Обратите внимание, что поля "карт.спереди" и "шаблон" заполняются перетаскиванием графического ресурса из редактора ресурсов.<br />
<br />
[[Файл:Lesson8_9.jpg]]<br />
<br />
6. Для корректной работы вашего Patchwork необходимо, чтобы таблица находилась выше Patchwork по дереву объектов.<br />
<br />
[[Файл:Lesson8_10.jpg]]<br />
<br />
<br />
7. Проверьте выполнение задачи с помощью проигрывателя сцен Viewer.<br />
<br />
<br />
=== Упражнения ===<br />
<br />
1. Щелкнув правой кнопкой мыши по экрану Lesson_08.2, создать новый экран Lesson_08.3<br />
<br />
2. Создать новую сцену с названием game.<br />
<br />
3. Скопировать все объекты из сцены 08 (экрана Lesson_08.2).<br />
<br />
4. Вставить скопированые объекты в новую сцену game (экрана Lesson_08.3).<br />
<br />
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:<br />
<br />
a) заменить картинку пэчворка и маски на другую, имеющуюся в базе ресурсов;<br />
<br />
b) изменить настройки кнопки рестарта таким образом, чтобы не переходить на экран Lesson_08.3, а сразу передавать пэчворку состояние mix.<br />
----<br />
{| width="100%" <br />
| width="40%"|[[Создание игры «Hidden Object Game»|Урок 7]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Работа с эффектами|Урок 9]]<br />
|}<br />
<br />
[[Category:Learning]]</div>Dsyrovathttps://wiki.appsalutecreator.com/index.php?title=%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BE%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD:_%C2%AB%D0%9B%D0%B0%D0%BC%D0%BF%D0%BE%D1%87%D0%BA%D0%B0%C2%BB_%D0%B8_%C2%AB%D0%A1%D0%B2%D0%B5%D1%82%D0%BE%D1%84%D0%BE%D1%80%C2%BB&diff=9077Взаимодействие машин: «Лампочка» и «Светофор»2017-09-25T11:43:48Z<p>Dsyrovat: /* Создание машин */</p>
<hr />
<div>{| width="100%" <br />
| width="40%"|[[Checkbox как машина состояний|Урок 3]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Движение машин: жучки, ключи и многое другое|Урок 5]]<br />
|}<br />
----<br />
{{TOC right}}<br />
<br />
'''Цель:''' изучить взаимодействие машин состояний и организацию циклов.<br />
<br />
'''Задачи:''' <br />
* создать переключатель, включающий и выключающий лампочку;<br />
* сделать лампу активной, знающей о состоянии переключателя;<br />
* создать простой светофор, переключающий по кругу три лампы;<br />
* создать уличный светофор с "правильным" поведением на основе управляющей машины;<br />
* включать и выключать светофор при помощи кнопки.<br />
<br />
<br />
== Лампочка и выключатель ==<br />
<br />
=== Создание машин ===<br />
<br />
Создайте в учебном проекте новый экран lesson_4 и сцену stg_main.<br />
Перетащите на сцену из редактора ресурсов переключатель и лампочку:<br />
<br />
[[Файл:lesson4_switch_lamp.png|300px|center]]<br />
<br />
<br />
Поменяйте обоим объектам тип, сделав их [[Machine|машинами состояний]].<br />
Переименуйте (поле свойств "'''имя'''") переключатель в '''switch''', а лампочку в '''lamp'''.<br />
<br />
Наша задача состоит в организации взаимодействия переключателя и лампочки.<br />
Переключатель, как ему и положено, включает и выключает свет.<br />
Поэтому, связанная с ним машина состояний, должна воздействовать на вторую<br />
машину, которой является лампочка.<br />
Нарисуем сначала граф машин состояний:<br />
<br />
[[Файл:lesson_4_state1.png|300px|center]]<br />
<br />
<br />
Верхние красные кружочки относятся к переключателю.<br />
Он может находиться в двух состояниях '''on''' и '''off'''.<br />
Лампочка (синие кружочки), также имеет два состояния, которые мы<br />
назовем '''dark''' и '''light'''.<br />
<br />
Cоздайте эти состояния в машинах так, как это было описано в предыдущем уроке. Добавьте в каждое состояние команду draw с параметром res, в которые перетащите<br />
картинки из редактора ресурсов.<br />
Затем в переключателе добавьте команду '''click''' с параметром '''go'''.<br />
Сделайте из него "чекбокс":<br />
<br />
[[Файл:lesson_4_switch_state1_new.png]]<br />
<br />
В лампочке создайте пока только по команде рисования draw:<br />
<br />
[[Файл:lesson_4_lamp_state1.png]]<br />
<br />
Протестируйте получившийся результат.<br />
Переключатель должен переключаться, тогда как лампочка на это ни как не реагирует.<br />
<br />
=== Подключаем провода ===<br />
<br />
Теперь самое время подключить к лампочке и выключателю провода.<br />
Этими проводами будет служить команда '''set'''.<br />
Вспомним теорию. '''При входе''' в состояние происходит выполнение <br />
команд инициализации, которые сразу выполняются, как только машина поменяла своё состояние.<br />
К таким командам и относится команда '''set'''.<br />
С её помощью происходит изменение состояния других машин.<br />
Добавим в каждое из состояний переключателя по команде set с параметрами '''obj''' и '''st'''.<br />
Для параметра obj из выпадалки выберем объект '''lamp'''.<br />
В параметре st зададим руками требуемые состояния лампочки.<br />
В результате должно получиться:<br />
<br />
[[Файл:lesson_4_switch_state2.png]]<br />
<br />
<br />
Снова протестируйте работу машин. Стоит во вьювере нажать '''S''',<br />
чтобы понаблюдать за происходящими изменениями состояний объектов.<br />
<br />
=== Активная лампочка ===<br />
<br />
Давайте усложним поведение лампочки.<br />
Пусть она, независимо от переключателя, может включаться,<br />
если на неё кликнули в состоянии '''dark'''. <br />
Перейдя в горящее состояние '''light''' она горит 2 секунды,<br />
а затем сама выключается, возвращаясь в '''dark''':<br />
<br />
[[файл:lesson_4_states2.png|300px|center]]<br />
<br />
Не подглядывая на следующую картинку, запрограммируйте такое поведение лампочки.<br />
<br />
<br />
У Вас, конечно, должен был получиться следующий результат:<br />
<br />
[[файл:lesson_4_lamp2.png]]<br />
<br />
=== Условия переходов ===<br />
<br />
Потребуем теперь, чтобы лампочка, при клике на неё, могла включаться только,<br />
если в этот момент включен переключатель.<br />
Таким образом, необходимо заблокировать команду click если переключатель находится<br />
в состоянии off. Делается это при помощи команды '''if''',<br />
которую необходимо добавить в состояние dark лампочки:<br />
<br />
[[файл:lesson_4_lamp3.png]]<br />
<br />
Обратим внимание, что кроме команды if, было добавлено одноименное поле<br />
в команде '''click''' с параметром 0. Разберемся, как работают эти команды.<br />
В состоянии может быть несколько команд-условий if.<br />
Все они нумеруются начиная с нуля. Т.е. первая сверху в списке команда if<br />
имеет номер 0, следующая 1 и т.д. <br />
Однако сами по себе условия ещё ничего не делают.<br />
Запуск их на проверку выполнимости осуществляют другие команды.<br />
В нашем случае это делает команда click.<br />
В её поле if стоит ноль. Это означает, что при клике на лампочку<br />
переход go произойдет только, если выполняется условие под номером 0.<br />
В этом условии происходит проверка того, находится ли объект '''obj''' в состоянии '''st'''.<br />
Если находится, то условие срабатывает и клик приводит к требуемой смене состояния.<br />
Все просто :).<br />
<br />
Протестируйте получившийся результат. <br />
Сначала на выключенном переключателе кликните на лампочку.<br />
Она не загорится. Теперь, включите переключатель.<br />
Лампа загорится и после 2-х секунд погаснет.<br />
Теперь, если кликнуть на лампочку, она снова загорится,<br />
так как переключатель находится в состоянии on.<br />
Стоит, как обычно, в процессе этих экспериментов понаблюдать за отладочной информацией.<br />
<br />
=== Начальное состояние ===<br />
<br />
[[файл:lesson_4_prop.png|right]]<br />
Каждая машина в момент начала работы находится в определённом состоянии.<br />
По умолчанию, это первое состояние в линейке состояний, в соответствующем окне редактирования.<br />
Однако его можно изменить.<br />
Сделаем так, чтобы в начальный момент времени переключатель<br />
был включен, а не выключен. Для этого необходимо в его свойствах (панель Properties) в поле '''состояние''' задать имя начального состояния '''on'''.<br />
<br />
Запустим вьювер. Обратим внимание, что лампочка сразу загорелась.<br />
Так и должно быть, так как машина переключателя начала работать из<br />
состояния on, а, следовательно, запустила команаду '''set''',<br />
меняющую состояние лампочки.<br />
<br />
Если лампочка сразу не загорелась, это означает, что в дереве проекта<br />
она находится ниже переключателя. Поменяйте их местами, перетащив мышкой, и все заработает как описано выше.<br />
С чем связаны такие магические действия, мы выясним ниже, при рассмотрении простого светофора.<br />
<br />
=== Подробнее о командах ===<br />
<br />
Подытожим информацию о командах, работающих в состояниях внутри машин.<br />
Существует четыре типа команд:<br />
* '''инициализаций''' (draw, set) - выполняется сразу как только машина оказалась в данном состоянии. Это "мгновенные" команды, т.к. их действие не растянуто во времени;<br />
* '''воздействий''' (click) - выполняются, если на машину было оказано внешнее воздействие, например, в неё кликнули мышкой;<br />
* '''процессов''' (wait) - эти команды начинают выполняться, когда произошел переход в данное состояние. В отличии от команд инициализации, их действие растянуто во времени. К этому типу команд относится также команда move, которая встречалась в машинах первого урока;<br />
* '''условий''' (if) - описание различных логических условий, которые могут использовать другие команды данного состояния.<br />
<br />
К настоящему моменту нам уже известны следующие команды:<br />
<br />
* '''draw''' — управление внешним видом машины, определение её графического ресурса. Эта команда, как и set является командой инициализации, т.е. выполняется в момент попадания машины в данное состояние. Если в состоянии машины такой команды нет, то автоматически устанавливается графический ресурс, указанный в свойствах данной машины (поле '''res''');<br />
<br />
* '''set''' – установка состояния другого объекта (команда инициализации);<br />
<br />
* '''click''' – что делать при клике на объект (команда воздействия). В нашем случае - переход в другое состояние той же машины;<br />
<br />
* '''wait''' – временная пауза, после которой происходит переход в другое состояние (время исчисляется в миллисекундах, где 1 сек = 1000 миллисекунд). Это команда процессов, т.е. её выполнение длится во времени;<br />
<br />
* '''if''' – логическое условие перехода (команда перехода).<br />
<br />
== Светофор ==<br />
<br />
[[файл:lesson_4_lights1.png|right]]<br />
Рассмотрим теперь обычный уличный светофор. Вспомним как он работает:<br />
* сначала обычно (к сожалению) горит красная лампа, остальные выключены;<br />
* затем, при горящей красной лампе, загорается ещё и желтая;<br />
* затем желтая и красная лампы гаснут и загорается зеленая;<br />
* в конце горения зеленой лампы она три раза мигает и выключается;<br />
* затем включается желтая лампа, горит и гаснет<br />
* затем включается красный, чтобы повторить весь процесс с самого начала.<br />
<br />
Подобное сложное поведение можно реализовать с помощью самых разных машин состояния.<br />
Сначала мы создадим три машины для каждой лампочки, которые будут взаимодействовать друг с другом,<br />
переключая себя и своих соседей.<br />
<br />
[[файл:lessons_4_tree.png|right]]<br />
Разместим на сцене подложку для светофора. Она останется статической картинкой.<br />
Затем поместим поверх неё три лампы разного цвета и сделаем их подобъектами подложки.<br />
Обложку назовем lights, а лампы '''light_R''', '''light_Y''', '''light_G'''.<br />
Изменяя тип у ламп, превратим их в машины.<br />
<br />
=== Простой светофор ===<br />
<br />
Проигнорируем пока одновременное горение и мигание, сделав просто последовательное<br />
переключений ламп по кругу. <br />
Такой "простой светофор" можно попробовать реализовать тремя машинами, имеющих по два состояния в каждой из них. В качестве графического ресурса в выключенном состоянии off перетащите серую картинку light_D:<br />
<br />
[[файл:lesson_4_R1.png]]<br />
<br />
[[файл:lesson_4_Y1.png]]<br />
<br />
[[файл:lesson_4_G1.png]]<br />
<br />
<br />
Хотя "простой светофор" будет работать вполне корректно,<br />
приведенные выше машины не очень хороши. <br />
Все лампы находятся в своем стартовом состоянии '''off'''.<br />
В них есть команда инициализации '''set''', которая устанавливает состояние горения<br />
следующей лампы. Что должно произойти в начальный момент запуска проекта?<br />
Машины работают также как и рисуются - сверху вниз по дереву проекта.<br />
Сначала инициализируется красная лампа. Это её первое попадание в состояние '''off''',<br />
поэтому она пытается включить желтую лампу. Однако этого не происходит,<br />
так как желтая лампа еще "не существует". Когда до неё доходит очередь, она создается<br />
и пытается включить зеленую лампу которой также "ещё нет",<br />
поэтому этого тоже не происходит. И только когда доходит дело до создания зеленой<br />
лампы, она включает (уже существующую и находящуюся в состоянии '''off''') красную лампу.<br />
<br />
С этого момента всё начинает работать вполне логично. При входе в состояние '''on'''<br />
выключается предыдущая лампа, а при входе в состояние '''off''' включается следующая.<br />
<br />
Стоит теперь вспомнить, отмеченную выше, важность порядка переключателя и лампы в дереве проекта.<br />
Если там лампа не зажигалась при запуске проекта, это значит, что она была ниже<br />
по дереву. В момент запуска проекта сначала создавался переключатель, который пытался зажечь<br />
еще не существующую лампу. <br />
<br />
Почему же "простой светофор" плох, если он верно работает?<br />
Потому, что держать в голове детали последовательного создания машин состояний<br />
не стоит, т.к. это усложняет логику понимания их функционирования.<br />
Если что-либо в этом разделе показалось неясным - нестрашно:<br />
<blockquote><br />
'''Надо по-возможности проектировать машины так, чтобы их стартовое состояние было максимально простым и не вызывало из себя цепочки изменений состояний других машин.'''<br />
</blockquote><br />
Тогда не возникнет непредсказуемости в поведении проекта.<br />
<br />
=== Промежуточные состояния ===<br />
<br />
Исправить ситуацию можно, добавив в каждую лампу промежуточное состояние next,<br />
в котором собственно происходит управление переключением следующей лампы.<br />
Приведем пример такой машины для красной лампы. Остальные сделайте по её образу и подобию:<br />
<br />
[[файл:lesson_4_R2.png]]<br />
<br />
Как мы видим, в добавленное состояние '''next''' переехала команда '''set''',<br />
которая раньше была в состоянии '''off'''.<br />
<br />
[[файл:lesson_4_R2_prop.png|right]]<br />
Зададим в свойствах (Properties) стартовое состояние красной лампы в '''on''', а остальным лампам поставим состояние '''off''' (этого можно не делать, если состояние off в линейках состояний стоит первым).<br />
<br />
В выключенных состояниях ничего не происходит кроме рисования серой картинки для выключенной лампы.<br />
Поэтому,теперь ни каких попыток изменить состояния других ламп у light_Y и light_G не будет.<br />
Красная лампа light_R начнет работать из состояния on. Прогорев 1 сек, она перейдет <br />
в состояние next, в котором переустановит состояние следующей лампы.<br />
В состоянии next красная лампа и останется (рисуя серую картинку), пока её не включит <br />
на очередном цикле зеленая лампа.<br />
<br />
Подчеркнем еще раз, что команда '''set''' является командой инициализации состояния.<br />
Она запускается при '''входе''' в состояние. Если бы она запускалась при выходе,<br />
дополнительное состояние next не потребовалось бы и set можно было бы вставить в on.<br />
Именно из-за "стартовости" выполнения set нам потребовалось ещё одно состояние.<br />
<br />
=== Управляющая машина ===<br />
<br />
Продолжая аналогичным образом, можно превратить простой светофор в светофор реалистичный.<br />
Однако, мы пойдем другим путём. <br />
<br />
Взаимодействие нескольких, достаточно сложных машин, часто затрудняет анализ<br />
их логики, т.к. приходится постоянно перемещаться между описаниями состояний этих машин,<br />
чтобы разобраться в их работе. <br />
<br />
Обычно, более удобным является создание одной управляющей машины, в которой сконцентрирована <br />
вся логика. Продемонстрируем, как это сделать на примере светофора.<br />
Для этого превратим подложку светофора (серый прямоугольник) в машину и создадим<br />
в ней состояния со следующими командами:<br />
<br />
[[файл:lesson_4_lights.png]]<br />
<br />
<br />
Каждое состояние является этапом функционирования светофора, между которыми происходят переходы.<br />
Красная и желая лампы - это простые машины с двумя состояниями '''on''' и '''off'''<br />
в которых только рисуются соответствующие картинки:<br />
<br />
[[файл:lesson_4_R3.png]]<br />
<br />
[[файл:lesson_4_Y3.png]]<br />
<br />
<br />
Зеленая лампа пока состоит из 3-х состояний '''on''', '''off''' и '''blink'''.<br />
Первые два аналогичны предыдущим лампам. В состоянии мигания blink<br />
временно поставим рисование картинки желтого цвета (draw) и команду wait,<br />
после действия которой происходит переход в состояние off.<br />
Дальше мы это состояние подправим.<br />
<br />
[[файл:lesson_4_G3.png]]<br />
<br />
Как мы видим теперь вся логика работы сконцентрирована в управляющей машине (подложка)<br />
и легко прослеживается. Остальные машины очень простые (за исключением мигающей зеленой лампы).<br />
Такой стиль организации взаимодействия машин часто оказывается существенно более ясным и удобным.<br />
<br />
Анализ поведения управляющей машины не должен составить труда.<br />
Прокомментируем только состояние '''G_blink'''.<br />
В этом состоянии зеленая лампа переводится в состояние мигания ('''blink''').<br />
Предполагается, что когда мигание закончится, зеленая лампа должна перейти в состояние '''off'''.<br />
В управляющей машине в команде wait мы ждем этого перехода при помощи проверки условия if.<br />
<br />
Обратим внимание, что сама команда wait вызвана без параметра t. Если время ожидания t не указано, это означает, что <br />
wait должен выполниться "мгновенно" и произойти переход в следующее состояние (go=Y). <br />
Однако это случится только, если выполнится условие '''if''' (зеленая лампа отмигает).<br />
Иначе идет переход к следующей команде wait. В ней находится единственный параметр '''loop'''<br />
со значением -1. Это означает, что все команды wait нужно зациклить, <br />
повторяя сверху вниз (до loop) бесконечное число раз,<br />
пока условие не выполнится и машина совершит переход go=Y.<br />
Подробнее использование циклов в командах мы разберем чуть ниже.<br />
<br />
=== Мигание как цепочка состояний ===<br />
<br />
Выше процесс мигания зеленой лампы мы временно представили при помощи рисования на её месте желтой лампы.<br />
Займемся теперь вплотную настоящим процессом мигания.<br />
Как и многие машины состояний, это поведение можно запрограммировать при помощи различных приёмов.<br />
Самым простым (но не очень удобным) является представление каждого<br />
включения и выключения лампы при помощи отдельного состояния.<br />
Для простоты, пусть она мигает не 3, а 2 раза.<br />
Тогда такая машина может выглядеть следующим образом: <br />
<br />
[[файл:lesson_4_G4.png]]<br />
<br />
<br />
Начиная с состояния blink происходит последовательный переход в состояния blink1, blink2, blink3.<br />
Из последнего состояния blink3 мы прыгаем в состояние off, где процесс мигания заканчивается.<br />
<br />
Почему такая машина не удобна? Если нам необходимо изменить период мигания,<br />
прийдётся менять параметр t в каждой команде wait всех 4-х состояний.<br />
А если надо мигнуть не 2, а 10 раз?<br />
Понятно, что для решения такой задачи необходимо использовать другие механизмы.<br />
<br />
=== Мигание как цикл ===<br />
<br />
Для реализации повторяющихся событий можно использовать<br />
процессы, длящиеся внутри одного события. Сейчас мы рассмотрим как это делается.<br />
Изменим машину зеленой лампы на следующую:<br />
<br />
[[Файл:lesson_4_G5.png]]<br />
<br />
Запустим вьювер, убедившись, что всё работает правильно. <br />
Теперь разберемся с функционированием состояния '''blink'''.<br />
<br />
Напомним, что команды set и draw -- это команды инициализации.<br />
Сколько бы их не было в состоянии, они все сразу выполнятся сверху вниз, как только машина переходит в это состояние.<br />
Последовательное выполнение нескольких команд draw - достаточно бессмысленное мероприятие.<br />
Эта команда задает ресурс рисования, поэтому в последовательности команд draw реально сработает только последняя, <br />
которая "перебьет" ресурс рисования предыдущих команд draw.<br />
<br />
Последовательность выполнения инициализационных команд с одинаковым именем можно прервать, если добавить в некоторые из<br />
них параметр '''break''' (прервать). В примере выше есть 2 команды draw. <br />
Нулевая из них имеет в своих параметрах break<br />
(напоминаем, что нумерация всех команд, как и if-ов начинается с нуля).<br />
Поэтому, в момент запуска состояния, выполнится эта нулевая команда и следующая (первая) команда draw выполняться не будет.<br />
В нулевом draw мы гасим лампочку (res=light_D).<br />
<br />
Посмотрим теперь на последовательность команд wait. <br />
Это команды процессов и, в отличии от команд инициализации, их выполнение занимает некоторое время.<br />
Команды процессов с одним названием выполняются '''последовательно''' друг за другом.<br />
В нашем случае начнет выполняться нулевая команда wait и только после t=500ms будет передано управление следующему wait-у.<br />
<br />
В нулевой команде команде wait появился новый параметр draw со значением 1.<br />
Этот параметр означает, что когда wait закончит работать она перезапустит команду draw под номером 1 (которая еще не выполнялась). <br />
В этой команде установится картинка рисования включенной зеленой лампы (res=light_D).<br />
<br />
Теперь настало время следующей команды wait.<br />
Отработав, она также перезапустит команду draw, но уже под номером 0 (т.е. лампочка погаснет).<br />
Если бы в этой команде wait не было параметра loop произошла бы передача управления последней команде wait.<br />
<br />
Параметр loop в командах процессов означает, что цепочку команд с данным именем надо повторить loop раз (в нашем случае еще 2 раза).<br />
Фактически, когда вьювер пробегается по командам wait, он каждый раз уменьшает loop на 1.<br />
Если в поле loop ещё не получился ноль, он запускает по новой выполнение последовательности команд wait.<br />
<br />
Таким образом, первые 2 команды wait выполнятся при первом прохождении по ним сверху вниз,<br />
а затем ещё два раза. В результате и получится три мигания.<br />
<br />
Когда цикл отработает, он передаст управление последней команде wait без параметра t.<br />
Она сработает мгновенно, осуществляя переход из состояния blink в состояние off.<br />
<br />
Заметим, что если в параметре loop стоит значение -1, то такой цикл будет длится бесконечное число раз. Он может быть прерван только в результате срабатывания условия при наличие параметра go<br />
(посмотрите еще раз на состояние blink_G управляющей машины светофора).<br />
<br />
=== Инициализация на выходе ===<br />
<br />
<br />
Команды '''set''' (как команды инициализации) выполняются при входе в состояние.<br />
Выше нам потребовалось еще одно состояние, <br />
для реализации простого светофора, чтобы осуществить инициализацию на выходе. <br />
При помощи параметров запуска команд, введение дополнительного состояния можно избежать.<br />
Для этого надо сделать команду-пустышку set, которая никого не меняет и на ней прервать<br />
выполнение set-команд.<br />
Затем, при выходе из состояния вызвать нужную последовательность set-ов.<br />
Так, машина зеленой лампы простого светофора может выглядеть следующим образом:<br />
<br />
[[файл:lesson_4_set.png]]<br />
<br />
=== Случайные мигания ===<br />
<br />
В заключение урока cделаем отдельную машину '''flasher''' (мигалка), которую заставим случайно гореть одним из трех цветов. Для этого перетащим на сцену из редактора ресурсов<br />
одну из ламп светофора и превратим её в машину состояний.<br />
Введем следующие команды в четырех состояниях этой машины:<br />
<br />
[[файл:lesson_4_flash1.png]]<br />
<br />
Последние три состояния - это просто рисование того или иного цвета<br />
в течении секунды, после чего переход в стартовое состояние switch.<br />
В этом состоянии происходит случайный выбор следующего состояния.<br />
Делается это при помощи трех команд wait не имеющих временной задержки.<br />
В первых двух командах стоит параметр "'''p'''". <br />
Это вероятность с которой осуществляется переход в состояние, определяемое параметром "'''go'''".<br />
Если "'''p'''" отсутствует, то переход по "'''go'''" происходит в любом случае.<br />
Иначе только с вероятностью p. С вероятностью же 1-p передается управление следующей команде<br />
wait. <br />
<br />
Таким образом, в нулевом wait-e состояния switch с вероятностью 0.33 машина перейдет в состояние R (красная лампа). <br />
С вероятностью 0.67=1-0.33 перехода не будет и запустится следующий wait.<br />
Из него с вероятностью 0.50 загорится желтая лампа (итоговая вероятность её горения будет равна 0.67*0.50=0.33). Наконец, если и этого не произойдет, то включится зеленый цвет.<br />
Все три цвета будут зажигаться с одинаковой вероятностью.<br />
<br />
В общем случае, если есть n случайных переходов, чтобы добиться их равновероятности,<br />
необходимо использовать следующие вероятности:<br />
p1=1/n, p2=1/(n-1), p3=1/(n-2),.... <br />
Ниже в таблице приведены значения вероятностей для некоторых n:<br />
{| border="1" <br />
! n <br />
! p1 <br />
! p2 <br />
! p3 <br />
! p4 <br />
|-<br />
| 2 || 0.50 <br />
|-<br />
| 3 || 0.33 || 0.50 <br />
|-<br />
| 4 || 0.25 || 0.33 || 0.50 <br />
|-<br />
| 5 || 0.20 || 0.25 || 0.33 || 0.50 <br />
|} <br />
<br />
Заметим, что иногда длительность горения может оказаться больше секунды (две, три и т.д.)<br />
Это просто означает, что данный цвет зажегся подряд несколько раз.<br />
<br />
== Упражнения ==<br />
<br />
* Создать машину состояний, имитирующую поведение обычной кнопки. <br />
* Сделать так, чтобы нажатием на кнопку (машину) светофор из любого состояния переводился в стартовое горение красной лампы.<br />
* Сделать то-же при помощи обычной кнопки, используя добавляемое при помощи правой кнопки мыши свойство "изменить состояние объекта". <br />
* Добавить в светофор состояние off, сделав его стартовым. В этом состоянии все лампы должны быть серыми. При помощи чекбокса (с любыми картинками, например, скопируйте голову слоненка из [[Checkbox как машина состояний|третьего урока]]) включайте и выключайте светофор (для этого правой кнопкой мыши в панели свойств добавьте свойства "''при включении изменить состояние объекта''" и "''при выключении изменить состояние объекта''"). <br />
* Сделать предыдущую задачу при помощи машины состояний вместо чекбокса. Какое решение у Вас получилось быстрее?<br />
<br />
----<br />
{| width="100%" <br />
| width="40%"|[[Checkbox как машина состояний|Урок 3]] << <br />
! width="20%"|[[Learning|Оглавление]] <br />
| width="40%" align="right"| >> [[Движение машин: жучки, ключи и многое другое|Урок 5]]<br />
|}<br />
<br />
[[Category:Learning]]</div>Dsyrovat