https://wiki.appsalutecreator.com/api.php?action=feedcontributions&user=Odyadina&feedformat=atomwiki.appsalutecreator.com - Вклад участника [ru]2024-03-29T14:39:31ZВклад участникаMediaWiki 1.31.15https://wiki.appsalutecreator.com/index.php?title=Advertisement&diff=9760Advertisement2018-12-12T13:37:32Z<p>Odyadina: </p>
<hr />
<div>[[Object|Объект]] '''Advertisement''' позволяет отображать рекламу разных типов. Объект должен находиться на экране, на котором необходимо показать рекламу, либо на глобальном экране. Данный объект предназначен для соблюдения условий запуска рекламы. Огромный плюс, что большинство настроек, могут задавать удалённо маркетологи.<br />
<br />
<br />
==Параметры==<br />
<br />
<br />
*'''синхронизация''' - не синхронизировать=0, синхронизировать=1;<br />
<br />
*'''сохранение параметров''' - нет=0, только объект=1, объект с подобъектами=2, только подобъекты=3;<br />
<br />
*'''placement''' - Идентификатор места показа рекламы в игре.<br />
<br />
<br />
==Добавляемые параметры==<br />
<br />
<br />
[[Файл:+.png]] '''реклама готова к показу: изменить состояние объекта'''<br />
<br />
*'''объект''' - Объект, состояние которого нужно изменить; '''!!! Объект должен находиться выше по дереву, чтобы успеть проинициализироваться до готовности рекламы !!!'''<br />
<br />
*'''состояние''' - Новое состояние объекта.<br />
<br />
<br />
[[Файл:+.png]] '''реклама готова к показу: изменить свойство объекта'''<br />
<br />
*'''объект''' - Объект, свойство которого нужно изменить; '''!!! Объект должен находиться выше по дереву, чтобы успеть проинициализироваться до готовности рекламы !!!'''<br />
<br />
*'''свойство''' - Свойство, которое нужно изменить.<br />
<br />
*'''значение''' - Новое значение свойства.<br />
<br />
<br />
[[Файл:+.png]] '''реклама успешно показана: изменить состояние объекта'''<br />
<br />
*'''объект''' - Объект, состояние которого нужно изменить;<br />
<br />
*'''состояние''' - Новое состояние объекта.<br />
<br />
==Состояния==<br />
<br />
*'''show''' - показать рекламу.<br />
<br />
<br />
==Коды ошибок==<br />
<br />
*'''0''' - ''AD_ERROR_NONE = 0'' - все хорошо, ошибок нет;<br />
*'''1''' - ''AD_ERROR_SKIP = 1'' - показывать нечего (нет ни одного активного провайдера рекламы, нужно спрятать кнопки показа, пользовательские окна при этой ошибке показывать не нужно!!!);<br />
*'''2''' - ''AD_ERROR_INTERNET = 2'' - ошибка отсутствия интернета;<br />
*'''3''' - ''AD_ERROR_NOT_FOUND = 3'' - запрос на показ рекламы был отправлен, но реклама по данному запросу отсутствует;<br />
*'''4''' - ''AD_ERROR_CANCELED = 4'' - показ рекламы был отменен пользователем.<br />
*'''5''' - ''AD_ERROR_UNKNOWN = 5'' - неизвестная ошибка.<br />
<br />
Для обработки ошибок использовать [[Errormanager|ErrorManager]].<br />
<br />
==Симулятор==<br />
<br />
Для работы симулятора рекламы на редакторном вьювере необходимо добавить в app.icf параметры:<br />
<br />
[Game]<br />
bundle="%id_game"<br />
[Game]<br />
VersionMain=%m<br />
VersionGraphic=%g<br />
VersionLogic=%l<br />
<br />
где:<br />
%id_game - бандл игры, соответствующий файлу конфигурации рекламы,<br />
%m, %g, %l - номер версии игры, соответствующий файлу конфигурации рекламы.<br />
<br />
При вызове состояния ''show'' объекту на экране появится черный прямоугольник с названием placement'а вызванной рекламы. Esc симулирует закрытие рекламы и вызов ''ошибки 4'' (показ рекламы отменен пользователем). Enter симулирует закрытие рекламы и вызов обработчика ''реклама успешно показана''.<br />
<br />
<br />
[[Category:Options]]<br />
[[Category:Реклама]]<br />
<br />
==GDPR==<br />
<br />
Некоторые провайдеры требуют согласия на сбор и обработку персональных данных в европейских странах. Для корректной работы необходимо в app.icf добавить параметр:<br />
<br />
[Parameters]<br />
gdpr=1<br />
<br />
Значения, которые может принимать параметр: -1 - не известно, 0 - не согласен, 1 - согласен (Провайдер AppLovin воспринимает 0/1, Chartboost -1/0/1).<br />
Значение по-умолчанию, с которым собирать проект 1.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9696Collapse2018-08-07T06:55:38Z<p>Odyadina: /* Вычитаемые параметры */</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 />
*'''Номер в фишках'''(''numTokenNums'') - Число номеров в фишках которые (для текущего уровня). Включая статические.<br />
*'''макс. номеров в фишках'''(''numTokenNumsMax'') - Максимальное число номеров в фишках. Включая статические.<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 />
*'''Добавление'''(''needBirth'') - Нужно ли добавлять фишки на поле. Или игра на разбор; Можно перегрузить настройками уровня;<br />
*'''Схлопывание'''(''needCollapse'') - Нужно ли схлопывание (Ликвидация пустых столбцов);Можно перегрузить настройками уровня;<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
*'''Перемешивать при 0 ходов''' - если нет больше ходов на поле, да - поле перемешивать, нет - проигрыш.<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 />
*'''стиль'''(''style'') - стиль фишек (перегрузка арта фишек; артом из файла уровня); Стиль указанный в настройках уровня перебьёт стиль объекта; Получается вот такой приоритет (Арт из объекта -> Стиль указанный в объекте -> Стиль указанный в уровне);<br />
*'''анимация рождения'''(''dropBorn'') - тип рождения фишек объектом (скалирование/падение сверху), может быть перегруженно файлом уровня;<br />
*'''бомбы''' - Прогресс-бар статических. Объект типа progress.<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 />
*'''добавление фишки в выделение''' - Звук при выделении фишки (режим dots); звук воспроизводится с 2-й фишки.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
*'''применение крестовой бомбы'''(''sndcross'') - звук при применении крестовой бомбы;<br />
*'''применение горизонтальной бомбы'''(''sndhor'') - звук при применении горизонтальной бомбы;<br />
*'''применение вертикальной бомбы'''(''sndver'') - звук при применении вертикальной бомбы.<br />
<br />
=Специальные типы фишек=<br />
*'''nt_lock''' - графический ресурс фона при работающем "замке";<br />
*'''nt_lock_''' - графический ресурс поверх графики фишки при работающем "замке" (последовательность клипов через ","; первый клип д.б. задан, но он не используется; далее клипы по возрастанию жизни);<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - запланирована новая линия в аркаде===<br />
- изменить состояние объекта при старте отсчёта времени для генерации следующей линии в режиме Аркада (в объект пишется перечень фишек(nextLine), которые будут добавлены и время до их добавления (currentDt))<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект бомбы===<br />
- Объект, который при взрыве фишек посредством бонуса бомба(цветная или обычная) будет склонирован и будет передано состояние "beg".<br />
Данному объекту будет записано параметры:<br />
*'''effectOriginX,effectOriginY''' - координаты бонуса, который вызвал схлопывание(в координатах объекта); Эффект самой бомбы (которая взорвалась) получает координаты (0;0);<br />
*'''additionalNum''' - номер фишки; (для удобства, бонусы смещены до 100 номера(первый бонус иммет номер 100(первая цветная бомба)));<br />
П.С. данный эффект генерируется только при взрыве бомбы из поля (бонусы запущенные через matchbattle - не создают эффект);<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
*'''beg''' - пауза перед open<br />
*'''open''' - появляется по alpha-каналу<br />
*'''start''' - запустить новую игру (объект применяет все данные из лейаута + из файла уровней);<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 />
Фишки которые использует объект, нумеруются от 0 до N. Данная нумерация зависит от количества цветов. Последовательность выглядит как:<br />
*'''0''' - обычная цветная фишка (рандомного цвета - при запуске игры изменится на цветную фишку в диапазоне [1,numTokenNums])<br />
*'''[1;n]''' - цветные фишки (n==numTokenNumsMax, максимальное количество цветов);<br />
*'''[n+1;n+n]''' - цветные бомбы;<br />
*'''n+n+1''' - обычная бомба;<br />
*'''n+n+2''' - горизонтальная бомба;<br />
*'''n+n+3''' - вертикальная бомба;<br />
*'''n+n+4''' - крестовая бомба;<br />
*'''n+n+5''' - ячейка-Хамелеон;<br />
<br />
=Вычитаемые параметры= <br />
*'''tokenStyle''' - перечень основных клипов для фишек ("," -разделитель;клипы фишек "norm");<br />
*'''bombClips''' - перечень клипов бонусов (по порядку "нумерации фишек"; первый клип - первая цветная бомба); <br />
*'''nextLine''' - перечень номеров фишек следующего ряда для режима Аркада ("," - разделитель; все номера бонусов смещены и начинаются с 100 (для удобства чтения); т.е. первая цветная бомба имеет номер 100, дальше по порядку);<br />
*'''currentDt''' - время между генерациями следующего ряда(режим Аркада);<br />
*'''chameleonColors''' - номера цветных фишек, используемых для ячейки-Хамелеон;<br />
*'''level_cols''' - количество строчек поля текущего уровня;<br />
*'''level_rows''' - количество колонок поля текущего уровня;<br />
*'''lastMouseDnX,lastMouseDnY''' - координаты X,Y последнего нажатия мыши в координатах родительского объекта;<br />
*'''goal_any''' - текущее значение цели - выбить N фишек;<br />
*'''goal_lines''' - текущее значение цели - выжить N генераций линий(Аркада);<br />
*'''goal_locks''' - текущее значение цели - убрать N замков;<br />
*'''goal_num_%N%''' - текущее значение цели - выбить m фишек N-го цвета (%N% - номер цвета фишки (нумерация с 0));<br />
*'''randomSize''' - размер "мешка" со случайными числами для досыпаний фишек. По умолчанию равен 100* на кол-во цветов фишек. Мешок генерируется в формате 0,1,2,0,1,2,0,1,2... затем перемешивается. Кастомный размер мешка не должен быть меньше, чем кол-во цветов фишек.<br />
*'''randomShuffles''' - число перемешиваний "мешка" для досыпаний. По умолчанию число перемешиваний равно размеру "мешка" (т.е. проходимся по каждой фишке и меняем ее с рандомной). Если кол-во перемешиваний меньше размера мешка, то игра усложнится (подсыпания приблизятся к последовательности 0,1,2,0,1,2... и будет сложнее матчить. Если кол-во перемешиваний = размеру мешка, то получаем полное перемешивание, т.е. абсолютно рандомную последовательность фишек. Ставить кол-во перемешиваний больше размера мешка нет смысла.<br />
<br />
=Файл уровней=<br />
Объект умеет загружать настройки из файла уровней, для этих целей у объекта должны быть заданы:<br />
*'''файл уровня'''(levelFile) - путь к xml файлу уровней;<br />
*'''номер уровня'''(levelNum) - id уровня из файла уровней;<br />
<br />
На текущий момент объект вычитывает уровень из файла только при старте, т.е. чтобы сменить уровень нужно или сменить экран или проинитить сцену с коллапсом.<br />
<br />
==Структура файла==<br />
<br />
<levels><br />
<!-- style --><br />
<style id="3"><br />
<tokens norm="355"/><br />
<tokens norm="356"/><br />
</style><br />
<!-- levels --><br />
<level id="1" rows="2" cols="2" numTokenNums="2" ><br />
<field><br />
0,0,<br />
0,0<br />
</field><br />
</level><br />
<level id="2" rows="2" cols="2" numTokenNums="2" ><br />
<field><br />
0,0,<br />
0,0<br />
</field><br />
</level><br />
</levels><br />
<br />
Где <style> - стиль в котором перечисляем настройки фишек (resID);<br />
<level> - один игровой уровень<br />
<field> - стартовая настройка поля<br />
<br />
<br />
==Поле==<br />
Поле указывается в файле уровня: <br />
<level><field>NTKXY,NTKXY,NTKXY,NTKXY</field></level><br />
<br />
Поле объекта - это строка которая имеет разделитель фишек ","(пробелы,табуляции и символы переноса игнорируются).<br />
Код каждой фишки может состоять от 1-го до 5-ти символов ("NTKXY"). <br />
Т.е. объект воспринимает поле как последовательность "NTKXY,NTKXY,NTKXY,NTKXY". <br />
<br />
Значение символов:<br />
*'''N''' - индекс фишки объекта ( стартует с "0");<br />
**'''0''' - рандомная цветная фишка (цвет получится в диапазоне [1;numTokenNums]);<br />
**'''[1;m]''' - цветная фишка;<br />
**'''*''' - "дырка" (пустая ячейка) которая никогда не заполнится;<br />
**'''#''' - "разовая дырка" (пустая ячейка) которая может заполнится (для Аркады);<br />
**'''B''' - маркер который говорит, что данная фишка является бомбой, номер бомбы указывается в следующем поле('''T'''):<br />
***'''0''' - цветная бомба 1-го цвета;<br />
***'''[1;m-1]''' - цветная бомба с 2-го по (m-1) цвета;<br />
***'''m''' - обычная бомба (взрывает всё в радиусе);<br />
**'''Z''' - маркер который говорит, что данная фишка является бонусом, после цветных бомб, номер бомбы указывается в следующем поле ('''T'''):<br />
***'''0''' - обычная бомба (взрывает всё в радиусе);<br />
***'''1''' - горизонтальная бомба;<br />
***'''2''' - вертикальная бомба;<br />
***'''3''' - крестовая бомба;<br />
***'''4''' - ячейка-Хамелеон;<br />
*'''T''' - используется как дополнительное поле, для поля предыдущего поля ('''N''');<br />
*'''K''' - покраска фона (фон имеет жизнь, и при каждом матчинге, уменьшает её, при этом меняет меняется клип):<br />
**'''0''' - нет покраски;<br />
*'''X''' - специальный функционал:<br />
**'''0''' - обычная ячейка;<br />
**'''Z''' - замок с жизнью(ячейка залочена, не даём на неё нажимать если есть жизнь), при каждом матчинге жизнь уменьшается, количество жизней задаётся параметром '''Y'''(если параметр не указан, считаем == 1):<br />
***'''0''' - нет жизни (но смысла в этом мало);<br />
***'''[1;n]''' - количество жизней;<br />
*'''Y''' - используется как дополнительное поле, для поля '''X''';<br />
<br />
==Цели==<br />
Важно указать в самом объекте флаг "перегрузка целей"(override_goal) и зануляем все параметры в теге "перегруженные цели" - чтобы не добавлялись цели которые нам не нужны (уронить статические, очистить поле).<br />
*'''goalAny''' - выбить N фишек (у объекте параметр '''goal_any''');<br />
*'''goalLines''' - выжить N генераций линий, для Аркады (у объекта параметр '''goal_lines''');<br />
*'''goalLocks''' - убрать N замков (у объекта параметр '''goal_locks''');<br />
*'''goalTokens''' - выбить N фишек конкретного цвета (последовательность через запятую для каждого нужного цвета); Объект пишет N параметров в себя '''goal_num_%N%''', где %N% - номер фишки (нумерация с 0);Важно задавать количество цветов '''numTokenNums''' не меньшим чем количество целей - иначе уровень нельзя будет пройти;<br />
<br />
==Основные параметры==<br />
*'''id''' - id уровня (объект возьмёт первый уровень который совпадёт по id);<br />
*'''cols''' - высота поля;<br />
*'''rows''' - ширина поля;<br />
*'''numTokenNums''' - количество цветов которые будет генерировать объект(если у вас режим дотсы - будьте бдительны, статическая фишка тоже считается цветом, и по-умолчанию она будет первой фишкой);<br />
<br />
==Дополнительные параметры==<br />
*'''needCollapse''' - схлопывание фишек при пустой вертикальной линии;<br />
*'''needBirth''' - досыпание фишек (для аркады можно не указывать);<br />
*'''style''' - id стиля, применит указанный стиль (применит настройки фишек из стиля и запишет в себя строку '''tokenStyle''' (resID фишек через запятую));<br />
<br />
==Бонусы==<br />
===Бонус Хамелеон===<br />
Ячейка Хамелеон - это цветная фишка, которая периодически меняет свой цвет. Настраивается параметрами:<br />
*'''chameleonTime''' - время изменения фишки-Хамелеон (у объекта параметр '''currentDt''');<br />
*'''chameleonColors''' - перечень цветов, которые будет менять фишка-Хамелеон (у объекта параметр '''chameleonColors''');<br />
<br />
===Стартовая генерация бонусов===<br />
Для того чтобы стартово на поле были бонусы (рандомное место положение), мы указываем следующие настройки:<br />
startBomb'''N'''="'''4'''";<br />
где '''N''' - номер бонуса ( нумерация с "0"(первая цветная бомба));<br />
'''4''' - требуемое количество;<br />
<br />
===Генерация бонусов при досыпании===<br />
Для уровней с досыпанием (режим аркада, тоже считается с досыпанием), мы можем указать перечень бонусов и вероятность их генерации:<br />
*'''bombProbArray''' - перечень бонусов через ","(нумерация с "0"(первая цветная бомба));<br />
*'''bombProb''' - общая вероятность генерации бонусов (бонус будет выбран из списка '''bombProbArray''' рандомно);<br />
<br />
<br />
==Аркада==<br />
Режим в котором ряд фишек добавляется снизу через время со сдвигом поля вверх. При этом проигрышь случается в случае когда мы не можем добавить ряд (размер поля увеличивается). В данном режиме очень не желательно использовать отмену действия (состояние undo).<br />
*'''dt0''' - если больше 0 - включается режим аркады;<br />
*'''n''' - количество линий через которое время уменьшиться на множитель;<br />
*'''mult''' - множитель на которое уменьшиться время;<br />
<br />
При работе режима, объект записывает строку ('''nextLine''') в которой указан добавляемый ряд (цифры эквиваленты индексу фишки) и пинает обработчик - "запланирована новая линия в аркаде".<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]<br />
<br />
<br />
=Создание простейшего коллапса (классика)=<br />
<br />
Коллапс - самостоятельный обьект, и для создания простейшего коллапса не нужно никаких дополнительных обьектов. Создайте новый проект, и на сцену поместите пустой обьект, измените тип на коллапс.<br />
<br />
[[Файл:Tree.JPG]]<br />
<br />
Графику для игры коллапс можно скачать здесь: [[Media:Fishki.rar]] <br />
<br />
Сначала стоит рассчитать размеры поля. При создании обычного коллапса поле делают квадратным, а сверху добавляют еще один ряд для статических обьектов. Соответственно, размерность коллапса составит х*(х+1). Размер поля в пикселях должен соответствовать размеру фишки, умноженной на количество строк/столбцов.<br />
Создадим поле размером 12х13. Размеры нашей фишки в пикселях составляют 58х58, соответственно, размер нашего поля в пикслях составит 696*754.<br />
<br />
[[Файл:Size.JPG]]<br />
[[Файл:Size2.JPG]]<br />
<br />
Устанавливаем параметр "авторазмер" - авто.<br />
<br />
'''ОБРАТИТЕ ВНИМАНИЕ: Не надо загружать текстуры фишек в поле "фишки" во внешнем виде! Это делается отдельно в добавляемом свойстве "Графика фишки" отдельно для каждой фишки''' <br />
<br />
[[Файл:Grafika_fishki.JPG]]<br />
<br />
Добавьте графику для ваших фишек (один цвет - одна фишка), а также графику для статической фишки (которая будет находиться в верхнем ряду).<br />
<br />
== Перегрузка правил ==<br />
<br />
Теперь перегрузим правила для коллапса классического. Так как обьект collapse многоцелевой и с его помощью можно сделать несколько различных миниигр, мы установим правила, нужные для классического коллапса.<br />
<br />
[[Файл:Rules_classic.JPG]]<br />
<br />
Разберем поподробнее некоторые установленные параметры:<br />
<br />
* перегрузка - да<br />
:- для перегрузки правил необходимо уставить этот флаг;<br />
* номеров в фишках - 5<br />
:- это количество цветов и статических фишек, что у нас есть<br />
* номер бомбы/крестобомбы - -1<br />
:- будьте внимательны - изначально это значение стоит на 0, изза этого первый цветной блок у вас будет считаться бомбой, и при клике уничтожать все фишки своего цвета!<br />
:- ''в классическом коллапсе вообще не используются бомбы''<br />
* статический номер - 0<br />
:- это номер фишки, которая будет лежать на самом верхнем ряду, и которые надо опустить вниз<br />
'''Все, что касается пометки, не требуется для классического коллапса, так как в нем не нужно отмечать фишки.'''<br />
<br />
При установке номеров фишек для бомб и статических учтите, как нумеруется графика фишек.<br />
<br />
[[Файл:Graphics_num.JPG]]<br />
<br />
Самый верхний добавленный ресурс будет иметь номер 0, следующий за ним - 1 и далее по возрастанию.<br />
<br />
Перегрузим также и условия победы в нашей игре:<br />
<br />
[[Файл:Celi.JPG]]<br />
<br />
Так как условие победы в нашей игре - опустить все статические фишки на дно, то это мы и отметим, как цель игры.<br />
Обрабочтик победы добавляется так же, как и фишки - с помощью создания нового свойства:<br />
<br />
[[Файл:Win.JPG]]<br />
<br />
== Внешний вид ==<br />
<br />
Настроим внешний вид нашей игры.<br />
<br />
[[Файл:Vneshniy.JPG]]<br />
<br />
Некоторые параметры мы уже рассмотрели, немного об остальных:<br />
* сетка? - работает по каким-то собственным алгоритмам, поэтому иногда выглядит странно, можно ее просто не показывать<br />
* таймер - подключает таймер (можно установить ограничения по времени для решения коллапса)<br />
* счетчик статических - подключаем счетчик, который ведет учет статических элементов, которые еще не опущены ко дну коллапса<br />
* бомбы - в классическом коллапсе не используются<br />
<br />
Со временами всяких анимаций и появлений можете поэксперементировать сами или использовать вот эти:<br />
<br />
[[Файл:Vremena.JPG]]<br />
<br />
При генерации коллапс устанавливает блоки одинаковых фишек рядом, подчиняясь этим правилам:<br />
<br />
[[Файл:Generation.JPG]]<br />
<br />
Запустим получившуюся игру:<br />
<br />
[[Файл:Game.JPG]]<br />
<br />
Более глубокие механики и условия попробуйте проработать сами с помощью машин, меняйте состояния для коллапса с помощью кнопок и создавайте красивые игры!</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9693Collapse2018-08-06T14:13:56Z<p>Odyadina: /* Вычитаемые параметры */</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 />
*'''Номер в фишках'''(''numTokenNums'') - Число номеров в фишках которые (для текущего уровня). Включая статические.<br />
*'''макс. номеров в фишках'''(''numTokenNumsMax'') - Максимальное число номеров в фишках. Включая статические.<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 />
*'''Добавление'''(''needBirth'') - Нужно ли добавлять фишки на поле. Или игра на разбор; Можно перегрузить настройками уровня;<br />
*'''Схлопывание'''(''needCollapse'') - Нужно ли схлопывание (Ликвидация пустых столбцов);Можно перегрузить настройками уровня;<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
*'''Перемешивать при 0 ходов''' - если нет больше ходов на поле, да - поле перемешивать, нет - проигрыш.<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 />
*'''стиль'''(''style'') - стиль фишек (перегрузка арта фишек; артом из файла уровня); Стиль указанный в настройках уровня перебьёт стиль объекта; Получается вот такой приоритет (Арт из объекта -> Стиль указанный в объекте -> Стиль указанный в уровне);<br />
*'''анимация рождения'''(''dropBorn'') - тип рождения фишек объектом (скалирование/падение сверху), может быть перегруженно файлом уровня;<br />
*'''бомбы''' - Прогресс-бар статических. Объект типа progress.<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 />
*'''добавление фишки в выделение''' - Звук при выделении фишки (режим dots); звук воспроизводится с 2-й фишки.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
*'''применение крестовой бомбы'''(''sndcross'') - звук при применении крестовой бомбы;<br />
*'''применение горизонтальной бомбы'''(''sndhor'') - звук при применении горизонтальной бомбы;<br />
*'''применение вертикальной бомбы'''(''sndver'') - звук при применении вертикальной бомбы.<br />
<br />
=Специальные типы фишек=<br />
*'''nt_lock''' - графический ресурс фона при работающем "замке";<br />
*'''nt_lock_''' - графический ресурс поверх графики фишки при работающем "замке" (последовательность клипов через ","; первый клип д.б. задан, но он не используется; далее клипы по возрастанию жизни);<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - запланирована новая линия в аркаде===<br />
- изменить состояние объекта при старте отсчёта времени для генерации следующей линии в режиме Аркада (в объект пишется перечень фишек(nextLine), которые будут добавлены и время до их добавления (currentDt))<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект бомбы===<br />
- Объект, который при взрыве фишек посредством бонуса бомба(цветная или обычная) будет склонирован и будет передано состояние "beg".<br />
Данному объекту будет записано параметры:<br />
*'''effectOriginX,effectOriginY''' - координаты бонуса, который вызвал схлопывание(в координатах объекта); Эффект самой бомбы (которая взорвалась) получает координаты (0;0);<br />
*'''additionalNum''' - номер фишки; (для удобства, бонусы смещены до 100 номера(первый бонус иммет номер 100(первая цветная бомба)));<br />
П.С. данный эффект генерируется только при взрыве бомбы из поля (бонусы запущенные через matchbattle - не создают эффект);<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
*'''beg''' - пауза перед open<br />
*'''open''' - появляется по alpha-каналу<br />
*'''start''' - запустить новую игру (объект применяет все данные из лейаута + из файла уровней);<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 />
Фишки которые использует объект, нумеруются от 0 до N. Данная нумерация зависит от количества цветов. Последовательность выглядит как:<br />
*'''0''' - обычная цветная фишка (рандомного цвета - при запуске игры изменится на цветную фишку в диапазоне [1,numTokenNums])<br />
*'''[1;n]''' - цветные фишки (n==numTokenNumsMax, максимальное количество цветов);<br />
*'''[n+1;n+n]''' - цветные бомбы;<br />
*'''n+n+1''' - обычная бомба;<br />
*'''n+n+2''' - горизонтальная бомба;<br />
*'''n+n+3''' - вертикальная бомба;<br />
*'''n+n+4''' - крестовая бомба;<br />
*'''n+n+5''' - ячейка-Хамелеон;<br />
<br />
=Вычитаемые параметры= <br />
*'''tokenStyle''' - перечень основных клипов для фишек ("," -разделитель;клипы фишек "norm");<br />
*'''bombClips''' - перечень клипов бонусов (по порядку "нумерации фишек"; первый клип - первая цветная бомба); <br />
*'''nextLine''' - перечень номеров фишек следующего ряда для режима Аркада ("," - разделитель; все номера бонусов смещены и начинаются с 100 (для удобства чтения); т.е. первая цветная бомба имеет номер 100, дальше по порядку);<br />
*'''currentDt''' - время между генерациями следующего ряда(режим Аркада);<br />
*'''chameleonColors''' - номера цветных фишек, используемых для ячейки-Хамелеон;<br />
*'''level_cols''' - количество строчек поля текущего уровня;<br />
*'''level_rows''' - количество колонок поля текущего уровня;<br />
*'''lastMouseDnX,lastMouseDnY''' - координаты X,Y последнего нажатия мыши в координатах родительского объекта;<br />
*'''goal_any''' - текущее значение цели - выбить N фишек;<br />
*'''goal_lines''' - текущее значение цели - выжить N генераций линий(Аркада);<br />
*'''goal_locks''' - текущее значение цели - убрать N замков;<br />
*'''goal_num_%N%''' - текущее значение цели - выбить m фишек N-го цвета (%N% - номер цвета фишки (нумерация с 0));<br />
*'''randomSize''' - размер "мешка" со случайными числами для досыпаний фишек. По умолчанию равен 100* на кол-во цветов фишек. Мешок генерируется в формате 0,1,2,0,1,2,0,1,2... затем перемешивается.<br />
*'''randomShuffles''' - число перемешиваний "мешка" для досыпаний. По умолчанию число перемешиваний равно размеру "мешка" (т.е. проходимся по каждой фишке и меняем ее с рандомной). Если кол-во перемешиваний меньше размера мешка, то игра усложнится (подсыпания приблизятся к последовательности 0,1,2,0,1,2... и будет сложнее матчить. Если кол-во перемешиваний = размеру мешка, то получаем полное перемешивание, т.е. абсолютно рандомную последовательность фишек. Ставить кол-во перемешиваний больше размера мешка нет смысла.<br />
<br />
=Файл уровней=<br />
Объект умеет загружать настройки из файла уровней, для этих целей у объекта должны быть заданы:<br />
*'''файл уровня'''(levelFile) - путь к xml файлу уровней;<br />
*'''номер уровня'''(levelNum) - id уровня из файла уровней;<br />
<br />
На текущий момент объект вычитывает уровень из файла только при старте, т.е. чтобы сменить уровень нужно или сменить экран или проинитить сцену с коллапсом.<br />
<br />
==Структура файла==<br />
<br />
<levels><br />
<!-- style --><br />
<style id="3"><br />
<tokens norm="355"/><br />
<tokens norm="356"/><br />
</style><br />
<!-- levels --><br />
<level id="1" rows="2" cols="2" numTokenNums="2" ><br />
<field><br />
0,0,<br />
0,0<br />
</field><br />
</level><br />
<level id="2" rows="2" cols="2" numTokenNums="2" ><br />
<field><br />
0,0,<br />
0,0<br />
</field><br />
</level><br />
</levels><br />
<br />
Где <style> - стиль в котором перечисляем настройки фишек (resID);<br />
<level> - один игровой уровень<br />
<field> - стартовая настройка поля<br />
<br />
<br />
==Поле==<br />
Поле указывается в файле уровня: <br />
<level><field>NTKXY,NTKXY,NTKXY,NTKXY</field></level><br />
<br />
Поле объекта - это строка которая имеет разделитель фишек ","(пробелы,табуляции и символы переноса игнорируются).<br />
Код каждой фишки может состоять от 1-го до 5-ти символов ("NTKXY"). <br />
Т.е. объект воспринимает поле как последовательность "NTKXY,NTKXY,NTKXY,NTKXY". <br />
<br />
Значение символов:<br />
*'''N''' - индекс фишки объекта ( стартует с "0");<br />
**'''0''' - рандомная цветная фишка (цвет получится в диапазоне [1;numTokenNums]);<br />
**'''[1;m]''' - цветная фишка;<br />
**'''*''' - "дырка" (пустая ячейка) которая никогда не заполнится;<br />
**'''#''' - "разовая дырка" (пустая ячейка) которая может заполнится (для Аркады);<br />
**'''B''' - маркер который говорит, что данная фишка является бомбой, номер бомбы указывается в следующем поле('''T'''):<br />
***'''0''' - цветная бомба 1-го цвета;<br />
***'''[1;m-1]''' - цветная бомба с 2-го по (m-1) цвета;<br />
***'''m''' - обычная бомба (взрывает всё в радиусе);<br />
**'''Z''' - маркер который говорит, что данная фишка является бонусом, после цветных бомб, номер бомбы указывается в следующем поле ('''T'''):<br />
***'''0''' - обычная бомба (взрывает всё в радиусе);<br />
***'''1''' - горизонтальная бомба;<br />
***'''2''' - вертикальная бомба;<br />
***'''3''' - крестовая бомба;<br />
***'''4''' - ячейка-Хамелеон;<br />
*'''T''' - используется как дополнительное поле, для поля предыдущего поля ('''N''');<br />
*'''K''' - покраска фона (фон имеет жизнь, и при каждом матчинге, уменьшает её, при этом меняет меняется клип):<br />
**'''0''' - нет покраски;<br />
*'''X''' - специальный функционал:<br />
**'''0''' - обычная ячейка;<br />
**'''Z''' - замок с жизнью(ячейка залочена, не даём на неё нажимать если есть жизнь), при каждом матчинге жизнь уменьшается, количество жизней задаётся параметром '''Y'''(если параметр не указан, считаем == 1):<br />
***'''0''' - нет жизни (но смысла в этом мало);<br />
***'''[1;n]''' - количество жизней;<br />
*'''Y''' - используется как дополнительное поле, для поля '''X''';<br />
<br />
==Цели==<br />
Важно указать в самом объекте флаг "перегрузка целей"(override_goal) и зануляем все параметры в теге "перегруженные цели" - чтобы не добавлялись цели которые нам не нужны (уронить статические, очистить поле).<br />
*'''goalAny''' - выбить N фишек (у объекте параметр '''goal_any''');<br />
*'''goalLines''' - выжить N генераций линий, для Аркады (у объекта параметр '''goal_lines''');<br />
*'''goalLocks''' - убрать N замков (у объекта параметр '''goal_locks''');<br />
*'''goalTokens''' - выбить N фишек конкретного цвета (последовательность через запятую для каждого нужного цвета); Объект пишет N параметров в себя '''goal_num_%N%''', где %N% - номер фишки (нумерация с 0);Важно задавать количество цветов '''numTokenNums''' не меньшим чем количество целей - иначе уровень нельзя будет пройти;<br />
<br />
==Основные параметры==<br />
*'''id''' - id уровня (объект возьмёт первый уровень который совпадёт по id);<br />
*'''cols''' - высота поля;<br />
*'''rows''' - ширина поля;<br />
*'''numTokenNums''' - количество цветов которые будет генерировать объект(если у вас режим дотсы - будьте бдительны, статическая фишка тоже считается цветом, и по-умолчанию она будет первой фишкой);<br />
<br />
==Дополнительные параметры==<br />
*'''needCollapse''' - схлопывание фишек при пустой вертикальной линии;<br />
*'''needBirth''' - досыпание фишек (для аркады можно не указывать);<br />
*'''style''' - id стиля, применит указанный стиль (применит настройки фишек из стиля и запишет в себя строку '''tokenStyle''' (resID фишек через запятую));<br />
<br />
==Бонусы==<br />
===Бонус Хамелеон===<br />
Ячейка Хамелеон - это цветная фишка, которая периодически меняет свой цвет. Настраивается параметрами:<br />
*'''chameleonTime''' - время изменения фишки-Хамелеон (у объекта параметр '''currentDt''');<br />
*'''chameleonColors''' - перечень цветов, которые будет менять фишка-Хамелеон (у объекта параметр '''chameleonColors''');<br />
<br />
===Стартовая генерация бонусов===<br />
Для того чтобы стартово на поле были бонусы (рандомное место положение), мы указываем следующие настройки:<br />
startBomb'''N'''="'''4'''";<br />
где '''N''' - номер бонуса ( нумерация с "0"(первая цветная бомба));<br />
'''4''' - требуемое количество;<br />
<br />
===Генерация бонусов при досыпании===<br />
Для уровней с досыпанием (режим аркада, тоже считается с досыпанием), мы можем указать перечень бонусов и вероятность их генерации:<br />
*'''bombProbArray''' - перечень бонусов через ","(нумерация с "0"(первая цветная бомба));<br />
*'''bombProb''' - общая вероятность генерации бонусов (бонус будет выбран из списка '''bombProbArray''' рандомно);<br />
<br />
<br />
==Аркада==<br />
Режим в котором ряд фишек добавляется снизу через время со сдвигом поля вверх. При этом проигрышь случается в случае когда мы не можем добавить ряд (размер поля увеличивается). В данном режиме очень не желательно использовать отмену действия (состояние undo).<br />
*'''dt0''' - если больше 0 - включается режим аркады;<br />
*'''n''' - количество линий через которое время уменьшиться на множитель;<br />
*'''mult''' - множитель на которое уменьшиться время;<br />
<br />
При работе режима, объект записывает строку ('''nextLine''') в которой указан добавляемый ряд (цифры эквиваленты индексу фишки) и пинает обработчик - "запланирована новая линия в аркаде".<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]<br />
<br />
<br />
=Создание простейшего коллапса (классика)=<br />
<br />
Коллапс - самостоятельный обьект, и для создания простейшего коллапса не нужно никаких дополнительных обьектов. Создайте новый проект, и на сцену поместите пустой обьект, измените тип на коллапс.<br />
<br />
[[Файл:Tree.JPG]]<br />
<br />
Графику для игры коллапс можно скачать здесь: [[Media:Fishki.rar]] <br />
<br />
Сначала стоит рассчитать размеры поля. При создании обычного коллапса поле делают квадратным, а сверху добавляют еще один ряд для статических обьектов. Соответственно, размерность коллапса составит х*(х+1). Размер поля в пикселях должен соответствовать размеру фишки, умноженной на количество строк/столбцов.<br />
Создадим поле размером 12х13. Размеры нашей фишки в пикселях составляют 58х58, соответственно, размер нашего поля в пикслях составит 696*754.<br />
<br />
[[Файл:Size.JPG]]<br />
[[Файл:Size2.JPG]]<br />
<br />
Устанавливаем параметр "авторазмер" - авто.<br />
<br />
'''ОБРАТИТЕ ВНИМАНИЕ: Не надо загружать текстуры фишек в поле "фишки" во внешнем виде! Это делается отдельно в добавляемом свойстве "Графика фишки" отдельно для каждой фишки''' <br />
<br />
[[Файл:Grafika_fishki.JPG]]<br />
<br />
Добавьте графику для ваших фишек (один цвет - одна фишка), а также графику для статической фишки (которая будет находиться в верхнем ряду).<br />
<br />
== Перегрузка правил ==<br />
<br />
Теперь перегрузим правила для коллапса классического. Так как обьект collapse многоцелевой и с его помощью можно сделать несколько различных миниигр, мы установим правила, нужные для классического коллапса.<br />
<br />
[[Файл:Rules_classic.JPG]]<br />
<br />
Разберем поподробнее некоторые установленные параметры:<br />
<br />
* перегрузка - да<br />
:- для перегрузки правил необходимо уставить этот флаг;<br />
* номеров в фишках - 5<br />
:- это количество цветов и статических фишек, что у нас есть<br />
* номер бомбы/крестобомбы - -1<br />
:- будьте внимательны - изначально это значение стоит на 0, изза этого первый цветной блок у вас будет считаться бомбой, и при клике уничтожать все фишки своего цвета!<br />
:- ''в классическом коллапсе вообще не используются бомбы''<br />
* статический номер - 0<br />
:- это номер фишки, которая будет лежать на самом верхнем ряду, и которые надо опустить вниз<br />
'''Все, что касается пометки, не требуется для классического коллапса, так как в нем не нужно отмечать фишки.'''<br />
<br />
При установке номеров фишек для бомб и статических учтите, как нумеруется графика фишек.<br />
<br />
[[Файл:Graphics_num.JPG]]<br />
<br />
Самый верхний добавленный ресурс будет иметь номер 0, следующий за ним - 1 и далее по возрастанию.<br />
<br />
Перегрузим также и условия победы в нашей игре:<br />
<br />
[[Файл:Celi.JPG]]<br />
<br />
Так как условие победы в нашей игре - опустить все статические фишки на дно, то это мы и отметим, как цель игры.<br />
Обрабочтик победы добавляется так же, как и фишки - с помощью создания нового свойства:<br />
<br />
[[Файл:Win.JPG]]<br />
<br />
== Внешний вид ==<br />
<br />
Настроим внешний вид нашей игры.<br />
<br />
[[Файл:Vneshniy.JPG]]<br />
<br />
Некоторые параметры мы уже рассмотрели, немного об остальных:<br />
* сетка? - работает по каким-то собственным алгоритмам, поэтому иногда выглядит странно, можно ее просто не показывать<br />
* таймер - подключает таймер (можно установить ограничения по времени для решения коллапса)<br />
* счетчик статических - подключаем счетчик, который ведет учет статических элементов, которые еще не опущены ко дну коллапса<br />
* бомбы - в классическом коллапсе не используются<br />
<br />
Со временами всяких анимаций и появлений можете поэксперементировать сами или использовать вот эти:<br />
<br />
[[Файл:Vremena.JPG]]<br />
<br />
При генерации коллапс устанавливает блоки одинаковых фишек рядом, подчиняясь этим правилам:<br />
<br />
[[Файл:Generation.JPG]]<br />
<br />
Запустим получившуюся игру:<br />
<br />
[[Файл:Game.JPG]]<br />
<br />
Более глубокие механики и условия попробуйте проработать сами с помощью машин, меняйте состояния для коллапса с помощью кнопок и создавайте красивые игры!</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9692Collapse2018-08-06T13:36:24Z<p>Odyadina: /* Вычитаемые параметры */</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 />
*'''Номер в фишках'''(''numTokenNums'') - Число номеров в фишках которые (для текущего уровня). Включая статические.<br />
*'''макс. номеров в фишках'''(''numTokenNumsMax'') - Максимальное число номеров в фишках. Включая статические.<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 />
*'''Добавление'''(''needBirth'') - Нужно ли добавлять фишки на поле. Или игра на разбор; Можно перегрузить настройками уровня;<br />
*'''Схлопывание'''(''needCollapse'') - Нужно ли схлопывание (Ликвидация пустых столбцов);Можно перегрузить настройками уровня;<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
*'''Перемешивать при 0 ходов''' - если нет больше ходов на поле, да - поле перемешивать, нет - проигрыш.<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 />
*'''стиль'''(''style'') - стиль фишек (перегрузка арта фишек; артом из файла уровня); Стиль указанный в настройках уровня перебьёт стиль объекта; Получается вот такой приоритет (Арт из объекта -> Стиль указанный в объекте -> Стиль указанный в уровне);<br />
*'''анимация рождения'''(''dropBorn'') - тип рождения фишек объектом (скалирование/падение сверху), может быть перегруженно файлом уровня;<br />
*'''бомбы''' - Прогресс-бар статических. Объект типа progress.<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 />
*'''добавление фишки в выделение''' - Звук при выделении фишки (режим dots); звук воспроизводится с 2-й фишки.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
*'''применение крестовой бомбы'''(''sndcross'') - звук при применении крестовой бомбы;<br />
*'''применение горизонтальной бомбы'''(''sndhor'') - звук при применении горизонтальной бомбы;<br />
*'''применение вертикальной бомбы'''(''sndver'') - звук при применении вертикальной бомбы.<br />
<br />
=Специальные типы фишек=<br />
*'''nt_lock''' - графический ресурс фона при работающем "замке";<br />
*'''nt_lock_''' - графический ресурс поверх графики фишки при работающем "замке" (последовательность клипов через ","; первый клип д.б. задан, но он не используется; далее клипы по возрастанию жизни);<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - запланирована новая линия в аркаде===<br />
- изменить состояние объекта при старте отсчёта времени для генерации следующей линии в режиме Аркада (в объект пишется перечень фишек(nextLine), которые будут добавлены и время до их добавления (currentDt))<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект бомбы===<br />
- Объект, который при взрыве фишек посредством бонуса бомба(цветная или обычная) будет склонирован и будет передано состояние "beg".<br />
Данному объекту будет записано параметры:<br />
*'''effectOriginX,effectOriginY''' - координаты бонуса, который вызвал схлопывание(в координатах объекта); Эффект самой бомбы (которая взорвалась) получает координаты (0;0);<br />
*'''additionalNum''' - номер фишки; (для удобства, бонусы смещены до 100 номера(первый бонус иммет номер 100(первая цветная бомба)));<br />
П.С. данный эффект генерируется только при взрыве бомбы из поля (бонусы запущенные через matchbattle - не создают эффект);<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
*'''beg''' - пауза перед open<br />
*'''open''' - появляется по alpha-каналу<br />
*'''start''' - запустить новую игру (объект применяет все данные из лейаута + из файла уровней);<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 />
Фишки которые использует объект, нумеруются от 0 до N. Данная нумерация зависит от количества цветов. Последовательность выглядит как:<br />
*'''0''' - обычная цветная фишка (рандомного цвета - при запуске игры изменится на цветную фишку в диапазоне [1,numTokenNums])<br />
*'''[1;n]''' - цветные фишки (n==numTokenNumsMax, максимальное количество цветов);<br />
*'''[n+1;n+n]''' - цветные бомбы;<br />
*'''n+n+1''' - обычная бомба;<br />
*'''n+n+2''' - горизонтальная бомба;<br />
*'''n+n+3''' - вертикальная бомба;<br />
*'''n+n+4''' - крестовая бомба;<br />
*'''n+n+5''' - ячейка-Хамелеон;<br />
<br />
=Вычитаемые параметры= <br />
*'''tokenStyle''' - перечень основных клипов для фишек ("," -разделитель;клипы фишек "norm");<br />
*'''bombClips''' - перечень клипов бонусов (по порядку "нумерации фишек"; первый клип - первая цветная бомба); <br />
*'''nextLine''' - перечень номеров фишек следующего ряда для режима Аркада ("," - разделитель; все номера бонусов смещены и начинаются с 100 (для удобства чтения); т.е. первая цветная бомба имеет номер 100, дальше по порядку);<br />
*'''currentDt''' - время между генерациями следующего ряда(режим Аркада);<br />
*'''chameleonColors''' - номера цветных фишек, используемых для ячейки-Хамелеон;<br />
*'''level_cols''' - количество строчек поля текущего уровня;<br />
*'''level_rows''' - количество колонок поля текущего уровня;<br />
*'''lastMouseDnX,lastMouseDnY''' - координаты X,Y последнего нажатия мыши в координатах родительского объекта;<br />
*'''goal_any''' - текущее значение цели - выбить N фишек;<br />
*'''goal_lines''' - текущее значение цели - выжить N генераций линий(Аркада);<br />
*'''goal_locks''' - текущее значение цели - убрать N замков;<br />
*'''goal_num_%N%''' - текущее значение цели - выбить m фишек N-го цвета (%N% - номер цвета фишки (нумерация с 0));<br />
*'''randomSize''' - размер "мешка" со случайными числами для досыпаний фишек. По умолчанию равен 100* на кол-во цветов фишек.<br />
*'''randomShuffles''' - число перемешиваний "мешка" для досыпаний. По умолчанию равен кол-ву фишек в мешке.<br />
<br />
=Файл уровней=<br />
Объект умеет загружать настройки из файла уровней, для этих целей у объекта должны быть заданы:<br />
*'''файл уровня'''(levelFile) - путь к xml файлу уровней;<br />
*'''номер уровня'''(levelNum) - id уровня из файла уровней;<br />
<br />
На текущий момент объект вычитывает уровень из файла только при старте, т.е. чтобы сменить уровень нужно или сменить экран или проинитить сцену с коллапсом.<br />
<br />
==Структура файла==<br />
<br />
<levels><br />
<!-- style --><br />
<style id="3"><br />
<tokens norm="355"/><br />
<tokens norm="356"/><br />
</style><br />
<!-- levels --><br />
<level id="1" rows="2" cols="2" numTokenNums="2" ><br />
<field><br />
0,0,<br />
0,0<br />
</field><br />
</level><br />
<level id="2" rows="2" cols="2" numTokenNums="2" ><br />
<field><br />
0,0,<br />
0,0<br />
</field><br />
</level><br />
</levels><br />
<br />
Где <style> - стиль в котором перечисляем настройки фишек (resID);<br />
<level> - один игровой уровень<br />
<field> - стартовая настройка поля<br />
<br />
<br />
==Поле==<br />
Поле указывается в файле уровня: <br />
<level><field>NTKXY,NTKXY,NTKXY,NTKXY</field></level><br />
<br />
Поле объекта - это строка которая имеет разделитель фишек ","(пробелы,табуляции и символы переноса игнорируются).<br />
Код каждой фишки может состоять от 1-го до 5-ти символов ("NTKXY"). <br />
Т.е. объект воспринимает поле как последовательность "NTKXY,NTKXY,NTKXY,NTKXY". <br />
<br />
Значение символов:<br />
*'''N''' - индекс фишки объекта ( стартует с "0");<br />
**'''0''' - рандомная цветная фишка (цвет получится в диапазоне [1;numTokenNums]);<br />
**'''[1;m]''' - цветная фишка;<br />
**'''*''' - "дырка" (пустая ячейка) которая никогда не заполнится;<br />
**'''#''' - "разовая дырка" (пустая ячейка) которая может заполнится (для Аркады);<br />
**'''B''' - маркер который говорит, что данная фишка является бомбой, номер бомбы указывается в следующем поле('''T'''):<br />
***'''0''' - цветная бомба 1-го цвета;<br />
***'''[1;m-1]''' - цветная бомба с 2-го по (m-1) цвета;<br />
***'''m''' - обычная бомба (взрывает всё в радиусе);<br />
**'''Z''' - маркер который говорит, что данная фишка является бонусом, после цветных бомб, номер бомбы указывается в следующем поле ('''T'''):<br />
***'''0''' - обычная бомба (взрывает всё в радиусе);<br />
***'''1''' - горизонтальная бомба;<br />
***'''2''' - вертикальная бомба;<br />
***'''3''' - крестовая бомба;<br />
***'''4''' - ячейка-Хамелеон;<br />
*'''T''' - используется как дополнительное поле, для поля предыдущего поля ('''N''');<br />
*'''K''' - покраска фона (фон имеет жизнь, и при каждом матчинге, уменьшает её, при этом меняет меняется клип):<br />
**'''0''' - нет покраски;<br />
*'''X''' - специальный функционал:<br />
**'''0''' - обычная ячейка;<br />
**'''Z''' - замок с жизнью(ячейка залочена, не даём на неё нажимать если есть жизнь), при каждом матчинге жизнь уменьшается, количество жизней задаётся параметром '''Y'''(если параметр не указан, считаем == 1):<br />
***'''0''' - нет жизни (но смысла в этом мало);<br />
***'''[1;n]''' - количество жизней;<br />
*'''Y''' - используется как дополнительное поле, для поля '''X''';<br />
<br />
==Цели==<br />
Важно указать в самом объекте флаг "перегрузка целей"(override_goal) и зануляем все параметры в теге "перегруженные цели" - чтобы не добавлялись цели которые нам не нужны (уронить статические, очистить поле).<br />
*'''goalAny''' - выбить N фишек (у объекте параметр '''goal_any''');<br />
*'''goalLines''' - выжить N генераций линий, для Аркады (у объекта параметр '''goal_lines''');<br />
*'''goalLocks''' - убрать N замков (у объекта параметр '''goal_locks''');<br />
*'''goalTokens''' - выбить N фишек конкретного цвета (последовательность через запятую для каждого нужного цвета); Объект пишет N параметров в себя '''goal_num_%N%''', где %N% - номер фишки (нумерация с 0);Важно задавать количество цветов '''numTokenNums''' не меньшим чем количество целей - иначе уровень нельзя будет пройти;<br />
<br />
==Основные параметры==<br />
*'''id''' - id уровня (объект возьмёт первый уровень который совпадёт по id);<br />
*'''cols''' - высота поля;<br />
*'''rows''' - ширина поля;<br />
*'''numTokenNums''' - количество цветов которые будет генерировать объект(если у вас режим дотсы - будьте бдительны, статическая фишка тоже считается цветом, и по-умолчанию она будет первой фишкой);<br />
<br />
==Дополнительные параметры==<br />
*'''needCollapse''' - схлопывание фишек при пустой вертикальной линии;<br />
*'''needBirth''' - досыпание фишек (для аркады можно не указывать);<br />
*'''style''' - id стиля, применит указанный стиль (применит настройки фишек из стиля и запишет в себя строку '''tokenStyle''' (resID фишек через запятую));<br />
<br />
==Бонусы==<br />
===Бонус Хамелеон===<br />
Ячейка Хамелеон - это цветная фишка, которая периодически меняет свой цвет. Настраивается параметрами:<br />
*'''chameleonTime''' - время изменения фишки-Хамелеон (у объекта параметр '''currentDt''');<br />
*'''chameleonColors''' - перечень цветов, которые будет менять фишка-Хамелеон (у объекта параметр '''chameleonColors''');<br />
<br />
===Стартовая генерация бонусов===<br />
Для того чтобы стартово на поле были бонусы (рандомное место положение), мы указываем следующие настройки:<br />
startBomb'''N'''="'''4'''";<br />
где '''N''' - номер бонуса ( нумерация с "0"(первая цветная бомба));<br />
'''4''' - требуемое количество;<br />
<br />
===Генерация бонусов при досыпании===<br />
Для уровней с досыпанием (режим аркада, тоже считается с досыпанием), мы можем указать перечень бонусов и вероятность их генерации:<br />
*'''bombProbArray''' - перечень бонусов через ","(нумерация с "0"(первая цветная бомба));<br />
*'''bombProb''' - общая вероятность генерации бонусов (бонус будет выбран из списка '''bombProbArray''' рандомно);<br />
<br />
<br />
==Аркада==<br />
Режим в котором ряд фишек добавляется снизу через время со сдвигом поля вверх. При этом проигрышь случается в случае когда мы не можем добавить ряд (размер поля увеличивается). В данном режиме очень не желательно использовать отмену действия (состояние undo).<br />
*'''dt0''' - если больше 0 - включается режим аркады;<br />
*'''n''' - количество линий через которое время уменьшиться на множитель;<br />
*'''mult''' - множитель на которое уменьшиться время;<br />
<br />
При работе режима, объект записывает строку ('''nextLine''') в которой указан добавляемый ряд (цифры эквиваленты индексу фишки) и пинает обработчик - "запланирована новая линия в аркаде".<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]<br />
<br />
<br />
=Создание простейшего коллапса (классика)=<br />
<br />
Коллапс - самостоятельный обьект, и для создания простейшего коллапса не нужно никаких дополнительных обьектов. Создайте новый проект, и на сцену поместите пустой обьект, измените тип на коллапс.<br />
<br />
[[Файл:Tree.JPG]]<br />
<br />
Графику для игры коллапс можно скачать здесь: [[Media:Fishki.rar]] <br />
<br />
Сначала стоит рассчитать размеры поля. При создании обычного коллапса поле делают квадратным, а сверху добавляют еще один ряд для статических обьектов. Соответственно, размерность коллапса составит х*(х+1). Размер поля в пикселях должен соответствовать размеру фишки, умноженной на количество строк/столбцов.<br />
Создадим поле размером 12х13. Размеры нашей фишки в пикселях составляют 58х58, соответственно, размер нашего поля в пикслях составит 696*754.<br />
<br />
[[Файл:Size.JPG]]<br />
[[Файл:Size2.JPG]]<br />
<br />
Устанавливаем параметр "авторазмер" - авто.<br />
<br />
'''ОБРАТИТЕ ВНИМАНИЕ: Не надо загружать текстуры фишек в поле "фишки" во внешнем виде! Это делается отдельно в добавляемом свойстве "Графика фишки" отдельно для каждой фишки''' <br />
<br />
[[Файл:Grafika_fishki.JPG]]<br />
<br />
Добавьте графику для ваших фишек (один цвет - одна фишка), а также графику для статической фишки (которая будет находиться в верхнем ряду).<br />
<br />
== Перегрузка правил ==<br />
<br />
Теперь перегрузим правила для коллапса классического. Так как обьект collapse многоцелевой и с его помощью можно сделать несколько различных миниигр, мы установим правила, нужные для классического коллапса.<br />
<br />
[[Файл:Rules_classic.JPG]]<br />
<br />
Разберем поподробнее некоторые установленные параметры:<br />
<br />
* перегрузка - да<br />
:- для перегрузки правил необходимо уставить этот флаг;<br />
* номеров в фишках - 5<br />
:- это количество цветов и статических фишек, что у нас есть<br />
* номер бомбы/крестобомбы - -1<br />
:- будьте внимательны - изначально это значение стоит на 0, изза этого первый цветной блок у вас будет считаться бомбой, и при клике уничтожать все фишки своего цвета!<br />
:- ''в классическом коллапсе вообще не используются бомбы''<br />
* статический номер - 0<br />
:- это номер фишки, которая будет лежать на самом верхнем ряду, и которые надо опустить вниз<br />
'''Все, что касается пометки, не требуется для классического коллапса, так как в нем не нужно отмечать фишки.'''<br />
<br />
При установке номеров фишек для бомб и статических учтите, как нумеруется графика фишек.<br />
<br />
[[Файл:Graphics_num.JPG]]<br />
<br />
Самый верхний добавленный ресурс будет иметь номер 0, следующий за ним - 1 и далее по возрастанию.<br />
<br />
Перегрузим также и условия победы в нашей игре:<br />
<br />
[[Файл:Celi.JPG]]<br />
<br />
Так как условие победы в нашей игре - опустить все статические фишки на дно, то это мы и отметим, как цель игры.<br />
Обрабочтик победы добавляется так же, как и фишки - с помощью создания нового свойства:<br />
<br />
[[Файл:Win.JPG]]<br />
<br />
== Внешний вид ==<br />
<br />
Настроим внешний вид нашей игры.<br />
<br />
[[Файл:Vneshniy.JPG]]<br />
<br />
Некоторые параметры мы уже рассмотрели, немного об остальных:<br />
* сетка? - работает по каким-то собственным алгоритмам, поэтому иногда выглядит странно, можно ее просто не показывать<br />
* таймер - подключает таймер (можно установить ограничения по времени для решения коллапса)<br />
* счетчик статических - подключаем счетчик, который ведет учет статических элементов, которые еще не опущены ко дну коллапса<br />
* бомбы - в классическом коллапсе не используются<br />
<br />
Со временами всяких анимаций и появлений можете поэксперементировать сами или использовать вот эти:<br />
<br />
[[Файл:Vremena.JPG]]<br />
<br />
При генерации коллапс устанавливает блоки одинаковых фишек рядом, подчиняясь этим правилам:<br />
<br />
[[Файл:Generation.JPG]]<br />
<br />
Запустим получившуюся игру:<br />
<br />
[[Файл:Game.JPG]]<br />
<br />
Более глубокие механики и условия попробуйте проработать сами с помощью машин, меняйте состояния для коллапса с помощью кнопок и создавайте красивые игры!</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Collapse&diff=9691Collapse2018-08-06T13:32:49Z<p>Odyadina: /* Перегруженные правила */</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 />
*'''Номер в фишках'''(''numTokenNums'') - Число номеров в фишках которые (для текущего уровня). Включая статические.<br />
*'''макс. номеров в фишках'''(''numTokenNumsMax'') - Максимальное число номеров в фишках. Включая статические.<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 />
*'''Добавление'''(''needBirth'') - Нужно ли добавлять фишки на поле. Или игра на разбор; Можно перегрузить настройками уровня;<br />
*'''Схлопывание'''(''needCollapse'') - Нужно ли схлопывание (Ликвидация пустых столбцов);Можно перегрузить настройками уровня;<br />
*'''Менять тип узла''' - Увеличить ли тип нормальной ячейки, если над ней произошла трансформация фишек.<br />
*'''Поддерживать число ходов''' - При осыпании фишек проверить поле на то, чтоб обязательно был возможный ход.<br />
*'''Тащить фишку''' - Тащить первую фишку пометки за пальцем.<br />
*'''Завершать пометку''' - Не ждать отпускания пальца для завершения пометки - актуально в тех случаях, когда в ней всегда одинаковое число фишек.<br />
*'''Перемешивать при 0 ходов''' - если нет больше ходов на поле, да - поле перемешивать, нет - проигрыш.<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 />
*'''стиль'''(''style'') - стиль фишек (перегрузка арта фишек; артом из файла уровня); Стиль указанный в настройках уровня перебьёт стиль объекта; Получается вот такой приоритет (Арт из объекта -> Стиль указанный в объекте -> Стиль указанный в уровне);<br />
*'''анимация рождения'''(''dropBorn'') - тип рождения фишек объектом (скалирование/падение сверху), может быть перегруженно файлом уровня;<br />
*'''бомбы''' - Прогресс-бар статических. Объект типа progress.<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 />
*'''добавление фишки в выделение''' - Звук при выделении фишки (режим dots); звук воспроизводится с 2-й фишки.<br />
*'''перемещение фишки''' - Звук перемещения фищки.<br />
*'''возврат фишки''' - Звук возврата фищки при неудачном перемещении.<br />
*'''падение фишки''' - Звук для падения фишки.<br />
*'''применение крестовой бомбы'''(''sndcross'') - звук при применении крестовой бомбы;<br />
*'''применение горизонтальной бомбы'''(''sndhor'') - звук при применении горизонтальной бомбы;<br />
*'''применение вертикальной бомбы'''(''sndver'') - звук при применении вертикальной бомбы.<br />
<br />
=Специальные типы фишек=<br />
*'''nt_lock''' - графический ресурс фона при работающем "замке";<br />
*'''nt_lock_''' - графический ресурс поверх графики фишки при работающем "замке" (последовательность клипов через ","; первый клип д.б. задан, но он не используется; далее клипы по возрастанию жизни);<br />
<br />
=Добавляемые свойства=<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - выигрыш===<br />
- изменить состояние / параметр объекта в случае выигрыша.<br />
<br />
===[[Файл:+.png]] Изменить состояние / параметр объекта - проигрыш===<br />
- изменить состояние / параметр объекта в случае проигрыша<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - клик на одиночную===<br />
- изменить состояние объекта в случае клика на одиночную ячейку: открывает машину в которой необходимо объекту "Коллапс" установить состояние "del_last"<br />
<br />
===[[Файл:+.png]] Изменить состояние объекта - запланирована новая линия в аркаде===<br />
- изменить состояние объекта при старте отсчёта времени для генерации следующей линии в режиме Аркада (в объект пишется перечень фишек(nextLine), которые будут добавлены и время до их добавления (currentDt))<br />
<br />
===[[Файл:+.png]] Звук фишки===<br />
- Удаление, появление.<br />
<br />
===[[Файл:+.png]] Уровень сложности===<br />
- Номеров в фишках, Мин.размер кластера и Макс.размер кластера.<br />
<br />
===[[Файл:+.png]] Графика фишки===<br />
- Обычная: графический ресурс перетаскивается из редактора ресурсов.<br />
<br />
===[[Файл:+.png]] Эффект===<br />
- Объект, который будет вызываться при взрыве фишек. Должен иметь состояние beg.<br />
<br />
===[[Файл:+.png]] Эффект бомбы===<br />
- Объект, который при взрыве фишек посредством бонуса бомба(цветная или обычная) будет склонирован и будет передано состояние "beg".<br />
Данному объекту будет записано параметры:<br />
*'''effectOriginX,effectOriginY''' - координаты бонуса, который вызвал схлопывание(в координатах объекта); Эффект самой бомбы (которая взорвалась) получает координаты (0;0);<br />
*'''additionalNum''' - номер фишки; (для удобства, бонусы смещены до 100 номера(первый бонус иммет номер 100(первая цветная бомба)));<br />
П.С. данный эффект генерируется только при взрыве бомбы из поля (бонусы запущенные через matchbattle - не создают эффект);<br />
<br />
===[[Файл:+.png]] Эффект крестобомбы===<br />
- Эффект, который будет использоваться при взрыве крестобомбы. Должен иметь состояние beg.<br />
<br />
=Состояния=<br />
*'''beg''' - пауза перед open<br />
*'''open''' - появляется по alpha-каналу<br />
*'''start''' - запустить новую игру (объект применяет все данные из лейаута + из файла уровней);<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 />
Фишки которые использует объект, нумеруются от 0 до N. Данная нумерация зависит от количества цветов. Последовательность выглядит как:<br />
*'''0''' - обычная цветная фишка (рандомного цвета - при запуске игры изменится на цветную фишку в диапазоне [1,numTokenNums])<br />
*'''[1;n]''' - цветные фишки (n==numTokenNumsMax, максимальное количество цветов);<br />
*'''[n+1;n+n]''' - цветные бомбы;<br />
*'''n+n+1''' - обычная бомба;<br />
*'''n+n+2''' - горизонтальная бомба;<br />
*'''n+n+3''' - вертикальная бомба;<br />
*'''n+n+4''' - крестовая бомба;<br />
*'''n+n+5''' - ячейка-Хамелеон;<br />
<br />
=Вычитаемые параметры= <br />
*'''tokenStyle''' - перечень основных клипов для фишек ("," -разделитель;клипы фишек "norm");<br />
*'''bombClips''' - перечень клипов бонусов (по порядку "нумерации фишек"; первый клип - первая цветная бомба); <br />
*'''nextLine''' - перечень номеров фишек следующего ряда для режима Аркада ("," - разделитель; все номера бонусов смещены и начинаются с 100 (для удобства чтения); т.е. первая цветная бомба имеет номер 100, дальше по порядку);<br />
*'''currentDt''' - время между генерациями следующего ряда(режим Аркада);<br />
*'''chameleonColors''' - номера цветных фишек, используемых для ячейки-Хамелеон;<br />
*'''level_cols''' - количество строчек поля текущего уровня;<br />
*'''level_rows''' - количество колонок поля текущего уровня;<br />
*'''lastMouseDnX,lastMouseDnY''' - координаты X,Y последнего нажатия мыши в координатах родительского объекта;<br />
*'''goal_any''' - текущее значение цели - выбить N фишек;<br />
*'''goal_lines''' - текущее значение цели - выжить N генераций линий(Аркада);<br />
*'''goal_locks''' - текущее значение цели - убрать N замков;<br />
*'''goal_num_%N%''' - текущее значение цели - выбить m фишек N-го цвета (%N% - номер цвета фишки (нумерация с 0));<br />
<br />
<br />
=Файл уровней=<br />
Объект умеет загружать настройки из файла уровней, для этих целей у объекта должны быть заданы:<br />
*'''файл уровня'''(levelFile) - путь к xml файлу уровней;<br />
*'''номер уровня'''(levelNum) - id уровня из файла уровней;<br />
<br />
На текущий момент объект вычитывает уровень из файла только при старте, т.е. чтобы сменить уровень нужно или сменить экран или проинитить сцену с коллапсом.<br />
<br />
==Структура файла==<br />
<br />
<levels><br />
<!-- style --><br />
<style id="3"><br />
<tokens norm="355"/><br />
<tokens norm="356"/><br />
</style><br />
<!-- levels --><br />
<level id="1" rows="2" cols="2" numTokenNums="2" ><br />
<field><br />
0,0,<br />
0,0<br />
</field><br />
</level><br />
<level id="2" rows="2" cols="2" numTokenNums="2" ><br />
<field><br />
0,0,<br />
0,0<br />
</field><br />
</level><br />
</levels><br />
<br />
Где <style> - стиль в котором перечисляем настройки фишек (resID);<br />
<level> - один игровой уровень<br />
<field> - стартовая настройка поля<br />
<br />
<br />
==Поле==<br />
Поле указывается в файле уровня: <br />
<level><field>NTKXY,NTKXY,NTKXY,NTKXY</field></level><br />
<br />
Поле объекта - это строка которая имеет разделитель фишек ","(пробелы,табуляции и символы переноса игнорируются).<br />
Код каждой фишки может состоять от 1-го до 5-ти символов ("NTKXY"). <br />
Т.е. объект воспринимает поле как последовательность "NTKXY,NTKXY,NTKXY,NTKXY". <br />
<br />
Значение символов:<br />
*'''N''' - индекс фишки объекта ( стартует с "0");<br />
**'''0''' - рандомная цветная фишка (цвет получится в диапазоне [1;numTokenNums]);<br />
**'''[1;m]''' - цветная фишка;<br />
**'''*''' - "дырка" (пустая ячейка) которая никогда не заполнится;<br />
**'''#''' - "разовая дырка" (пустая ячейка) которая может заполнится (для Аркады);<br />
**'''B''' - маркер который говорит, что данная фишка является бомбой, номер бомбы указывается в следующем поле('''T'''):<br />
***'''0''' - цветная бомба 1-го цвета;<br />
***'''[1;m-1]''' - цветная бомба с 2-го по (m-1) цвета;<br />
***'''m''' - обычная бомба (взрывает всё в радиусе);<br />
**'''Z''' - маркер который говорит, что данная фишка является бонусом, после цветных бомб, номер бомбы указывается в следующем поле ('''T'''):<br />
***'''0''' - обычная бомба (взрывает всё в радиусе);<br />
***'''1''' - горизонтальная бомба;<br />
***'''2''' - вертикальная бомба;<br />
***'''3''' - крестовая бомба;<br />
***'''4''' - ячейка-Хамелеон;<br />
*'''T''' - используется как дополнительное поле, для поля предыдущего поля ('''N''');<br />
*'''K''' - покраска фона (фон имеет жизнь, и при каждом матчинге, уменьшает её, при этом меняет меняется клип):<br />
**'''0''' - нет покраски;<br />
*'''X''' - специальный функционал:<br />
**'''0''' - обычная ячейка;<br />
**'''Z''' - замок с жизнью(ячейка залочена, не даём на неё нажимать если есть жизнь), при каждом матчинге жизнь уменьшается, количество жизней задаётся параметром '''Y'''(если параметр не указан, считаем == 1):<br />
***'''0''' - нет жизни (но смысла в этом мало);<br />
***'''[1;n]''' - количество жизней;<br />
*'''Y''' - используется как дополнительное поле, для поля '''X''';<br />
<br />
==Цели==<br />
Важно указать в самом объекте флаг "перегрузка целей"(override_goal) и зануляем все параметры в теге "перегруженные цели" - чтобы не добавлялись цели которые нам не нужны (уронить статические, очистить поле).<br />
*'''goalAny''' - выбить N фишек (у объекте параметр '''goal_any''');<br />
*'''goalLines''' - выжить N генераций линий, для Аркады (у объекта параметр '''goal_lines''');<br />
*'''goalLocks''' - убрать N замков (у объекта параметр '''goal_locks''');<br />
*'''goalTokens''' - выбить N фишек конкретного цвета (последовательность через запятую для каждого нужного цвета); Объект пишет N параметров в себя '''goal_num_%N%''', где %N% - номер фишки (нумерация с 0);Важно задавать количество цветов '''numTokenNums''' не меньшим чем количество целей - иначе уровень нельзя будет пройти;<br />
<br />
==Основные параметры==<br />
*'''id''' - id уровня (объект возьмёт первый уровень который совпадёт по id);<br />
*'''cols''' - высота поля;<br />
*'''rows''' - ширина поля;<br />
*'''numTokenNums''' - количество цветов которые будет генерировать объект(если у вас режим дотсы - будьте бдительны, статическая фишка тоже считается цветом, и по-умолчанию она будет первой фишкой);<br />
<br />
==Дополнительные параметры==<br />
*'''needCollapse''' - схлопывание фишек при пустой вертикальной линии;<br />
*'''needBirth''' - досыпание фишек (для аркады можно не указывать);<br />
*'''style''' - id стиля, применит указанный стиль (применит настройки фишек из стиля и запишет в себя строку '''tokenStyle''' (resID фишек через запятую));<br />
<br />
==Бонусы==<br />
===Бонус Хамелеон===<br />
Ячейка Хамелеон - это цветная фишка, которая периодически меняет свой цвет. Настраивается параметрами:<br />
*'''chameleonTime''' - время изменения фишки-Хамелеон (у объекта параметр '''currentDt''');<br />
*'''chameleonColors''' - перечень цветов, которые будет менять фишка-Хамелеон (у объекта параметр '''chameleonColors''');<br />
<br />
===Стартовая генерация бонусов===<br />
Для того чтобы стартово на поле были бонусы (рандомное место положение), мы указываем следующие настройки:<br />
startBomb'''N'''="'''4'''";<br />
где '''N''' - номер бонуса ( нумерация с "0"(первая цветная бомба));<br />
'''4''' - требуемое количество;<br />
<br />
===Генерация бонусов при досыпании===<br />
Для уровней с досыпанием (режим аркада, тоже считается с досыпанием), мы можем указать перечень бонусов и вероятность их генерации:<br />
*'''bombProbArray''' - перечень бонусов через ","(нумерация с "0"(первая цветная бомба));<br />
*'''bombProb''' - общая вероятность генерации бонусов (бонус будет выбран из списка '''bombProbArray''' рандомно);<br />
<br />
<br />
==Аркада==<br />
Режим в котором ряд фишек добавляется снизу через время со сдвигом поля вверх. При этом проигрышь случается в случае когда мы не можем добавить ряд (размер поля увеличивается). В данном режиме очень не желательно использовать отмену действия (состояние undo).<br />
*'''dt0''' - если больше 0 - включается режим аркады;<br />
*'''n''' - количество линий через которое время уменьшиться на множитель;<br />
*'''mult''' - множитель на которое уменьшиться время;<br />
<br />
При работе режима, объект записывает строку ('''nextLine''') в которой указан добавляемый ряд (цифры эквиваленты индексу фишки) и пинает обработчик - "запланирована новая линия в аркаде".<br />
<br />
=Пример=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\test_collaps.zip<br />
<br />
<br />
[[Category:Game mechanic]]<br />
<br />
<br />
=Создание простейшего коллапса (классика)=<br />
<br />
Коллапс - самостоятельный обьект, и для создания простейшего коллапса не нужно никаких дополнительных обьектов. Создайте новый проект, и на сцену поместите пустой обьект, измените тип на коллапс.<br />
<br />
[[Файл:Tree.JPG]]<br />
<br />
Графику для игры коллапс можно скачать здесь: [[Media:Fishki.rar]] <br />
<br />
Сначала стоит рассчитать размеры поля. При создании обычного коллапса поле делают квадратным, а сверху добавляют еще один ряд для статических обьектов. Соответственно, размерность коллапса составит х*(х+1). Размер поля в пикселях должен соответствовать размеру фишки, умноженной на количество строк/столбцов.<br />
Создадим поле размером 12х13. Размеры нашей фишки в пикселях составляют 58х58, соответственно, размер нашего поля в пикслях составит 696*754.<br />
<br />
[[Файл:Size.JPG]]<br />
[[Файл:Size2.JPG]]<br />
<br />
Устанавливаем параметр "авторазмер" - авто.<br />
<br />
'''ОБРАТИТЕ ВНИМАНИЕ: Не надо загружать текстуры фишек в поле "фишки" во внешнем виде! Это делается отдельно в добавляемом свойстве "Графика фишки" отдельно для каждой фишки''' <br />
<br />
[[Файл:Grafika_fishki.JPG]]<br />
<br />
Добавьте графику для ваших фишек (один цвет - одна фишка), а также графику для статической фишки (которая будет находиться в верхнем ряду).<br />
<br />
== Перегрузка правил ==<br />
<br />
Теперь перегрузим правила для коллапса классического. Так как обьект collapse многоцелевой и с его помощью можно сделать несколько различных миниигр, мы установим правила, нужные для классического коллапса.<br />
<br />
[[Файл:Rules_classic.JPG]]<br />
<br />
Разберем поподробнее некоторые установленные параметры:<br />
<br />
* перегрузка - да<br />
:- для перегрузки правил необходимо уставить этот флаг;<br />
* номеров в фишках - 5<br />
:- это количество цветов и статических фишек, что у нас есть<br />
* номер бомбы/крестобомбы - -1<br />
:- будьте внимательны - изначально это значение стоит на 0, изза этого первый цветной блок у вас будет считаться бомбой, и при клике уничтожать все фишки своего цвета!<br />
:- ''в классическом коллапсе вообще не используются бомбы''<br />
* статический номер - 0<br />
:- это номер фишки, которая будет лежать на самом верхнем ряду, и которые надо опустить вниз<br />
'''Все, что касается пометки, не требуется для классического коллапса, так как в нем не нужно отмечать фишки.'''<br />
<br />
При установке номеров фишек для бомб и статических учтите, как нумеруется графика фишек.<br />
<br />
[[Файл:Graphics_num.JPG]]<br />
<br />
Самый верхний добавленный ресурс будет иметь номер 0, следующий за ним - 1 и далее по возрастанию.<br />
<br />
Перегрузим также и условия победы в нашей игре:<br />
<br />
[[Файл:Celi.JPG]]<br />
<br />
Так как условие победы в нашей игре - опустить все статические фишки на дно, то это мы и отметим, как цель игры.<br />
Обрабочтик победы добавляется так же, как и фишки - с помощью создания нового свойства:<br />
<br />
[[Файл:Win.JPG]]<br />
<br />
== Внешний вид ==<br />
<br />
Настроим внешний вид нашей игры.<br />
<br />
[[Файл:Vneshniy.JPG]]<br />
<br />
Некоторые параметры мы уже рассмотрели, немного об остальных:<br />
* сетка? - работает по каким-то собственным алгоритмам, поэтому иногда выглядит странно, можно ее просто не показывать<br />
* таймер - подключает таймер (можно установить ограничения по времени для решения коллапса)<br />
* счетчик статических - подключаем счетчик, который ведет учет статических элементов, которые еще не опущены ко дну коллапса<br />
* бомбы - в классическом коллапсе не используются<br />
<br />
Со временами всяких анимаций и появлений можете поэксперементировать сами или использовать вот эти:<br />
<br />
[[Файл:Vremena.JPG]]<br />
<br />
При генерации коллапс устанавливает блоки одинаковых фишек рядом, подчиняясь этим правилам:<br />
<br />
[[Файл:Generation.JPG]]<br />
<br />
Запустим получившуюся игру:<br />
<br />
[[Файл:Game.JPG]]<br />
<br />
Более глубокие механики и условия попробуйте проработать сами с помощью машин, меняйте состояния для коллапса с помощью кнопок и создавайте красивые игры!</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=ShareDialog&diff=9546ShareDialog2018-05-15T08:21:37Z<p>Odyadina: </p>
<hr />
<div>Объект используется для отправки своего ID (ссылки на приложение) другим людям, через внешние программы (почту, мессенджеры, соц.сети) <br><br />
Отправка работает только на IOS и Android.<br />
<br />
==Состояния==<br />
*'''update_params''' - считать параметры из img_id, extra_text, extra_subject<br />
<br />
*'''send_to_device''' - отправить запрос открытия окна шаринга на телефон<br />
<br />
==Параметры==<br />
*'''img_id''' - Отправляемое изображения. Задаем id графического ресурса с ресурсной базы.<br />
<br />
*'''extra_text''' - Основной текст. Задаем id текста с текстовой базы.<br />
<br />
*'''extra_subject''' - Заголовок. Задаем id текста с текстовой базы.<br />
<br />
==Примечания==<br />
Список приложений, доступных для отправки, по фильтрам выбираем мы сами.<br />
В случае передачи только текста - фильтр text/plain, только изображение - image/*, но в случае, когда есть и изображение, и текст - image/*, поскольку нет возможности выбора нескольких флагов.<br />
<br />
'''!!!ВАЖНО!!!'''<br><br />
Картинки для шаринга должны все быть в первом паке.<br />
<br />
Отправка поста не обновляет автоматически параметры, поэтому требуется до '''send_to_device''' выполнение состояния '''update_params'''<br />
<br />
Не все доступные для отправки приложения способны принимать заголовки или основной текст, поэтому рекомендуется использовать в качестве основного "информатора" именно изображение.<br />
<br />
Пример взаимодействия с приложениями:<br><br />
*'''ВКонтакте''' - принимает основной текст и изображение<br><br />
*'''Facebook''' - принимает только изображение<br><br />
*'''Instagram''' - принимает только изображение<br><br />
*'''GMail''' - принимает заголовок, основной текст и изображение<br><br />
*'''Viber''' - принимает только изображения</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Taskorganizer&diff=8080Taskorganizer2016-03-02T07:34:43Z<p>Odyadina: /* Свойства */</p>
<hr />
<div>{{TOC right}}<br />
[[Object|Объект]] Taskorganizer - Менеджер задач и квестов<br />
<br />
=Свойства=<br />
[[Файл:Task.jpg|250px|thumb|right]]<br />
[[Файл:Task_1.jpg|250px|thumb|right]]<br />
'''Общие параметры'''<br />
*'''economics''' - Объект типа экономикс.<br />
*'''предметы''' - Объект типа eitems.<br />
*'''таблица''' - Таблица куда будут помещены иконки заданий. При тапе на таблицу объекту Taskorganizer вызывается состояние show. Иконки подтягиваются из текстовой базы (icon1).<br />
*'''добавлять иконки''' - 1 - добавлять в таблицу иконки, 0 - тексты из текстового id (поле word).<br />
*'''шаблон предмета''' - Объект типа etaskitem будет использоваться при показе превью задания.<br />
*'''фильтрация''' - Категория, которые должны будут отобразиться в таблице логов при вызове состояния logbook. Пустая строка - все.<br />
*'''таблица логов''' - Таблица куда будут помещены записи логбука.<br />
*'''новая запись''' - Объект, которому будет вызвано состояние show при добавлении новой записи в логбук.<br />
*'''новое задание''' - Графический ресурс, который будет отмечать новые задания. Смещение должно достигаться пивотом.<br />
*'''прочитанное задание''' - Графический ресурс, который будет отмечать прочитанные задания. Смещение должно достигаться пивотом (возможно указать анимацию, скорость смены кадров указываем в ресурсной базе).<br />
*'''выполненное задание''' - Графический ресурс, который будет отмечать выполненные задания. Смещение должно достигаться пивотом (возможно указать анимацию, скорость смены кадров указываем в ресурсной базе)<br />
*'''уведомление''' - Текстовый айди заголовка связанных с задачами уведомлений.<br />
*'''вероятность уведомления''' - Подменная вероятность нахождения предмета нужного для задания по уведомлению с которого мы пришли. 0 - использовать значение по умолчанию.<br />
*'''выполнять непрочитанные''' - 1 - выполнять непрочитанные таски, 0 - нет.<br />
*'''хронологический порядок''' - 1 - записывать задачи в хронологическом порядке, 0 - нет.<br />
*'''картинки в логбук''' - Расположение картинки до или после текста.<br />
*'''сдвиг уровней''' - число на которое сдвинутся требования к уровню игрока в taskorganizer_setup для каждой задачи;<br />
*'''refresh при показе окна''' - 0 - нет, 1 - да. Ставим = 0 ( "нет" ), если хотим чтобы при тапе по таблице отложить сортировку и обновление статуса таска ( в определённый момент ( к примеру, когда открылось окно таска), передаём состояние '''refresh''' и таблица обновится).<br />
*'''использовать накопление ошибки''' - 0 - нет, 1 - да. Ставим = 1 ( "да" ), если хотим чтобы нахождение предметов в хиддене, по таску не превышало n-раз ( к примеру p= 0.5 (1/0.5=2 , т.е. предмет должны найти не более чем за две игры в хидн), если количество сыгранных игр >= максимальному по вероятности, то предмет попадает в таблицу ( мы его нашли)). Если стоит - 0 ( "нет" ), то вне зависимости от количества заходов, будет браться вероятность.<br />
<br />
<br />
<pre><br />
Для огранизации логбука необходимо текст поместить в sentenсe 1. Картинка, что будет отображаться с этим текстом, должна быть icon 2. Также есть возможность использовать эту картинку в качестве фона. Тогда текст, который будет отображаться поверх этой картинки, нужно разместить в sentenсe 2.<br />
</pre><br />
<br />
'''Группа угадайка'''<br />
<br />
Угадайка - задание, в котором игроку предлагается вспомнить или угадать, кто из персонажей просил тот или иной коллекционный предмет. Владелец предмета указывается в настройке подзадачи.<br />
<br />
*'''показывать через''' - Через какое количество обычных задач показывать угадайку.<br />
*'''с уровня''' - Угадайка будет генерироваться только начиная с данного уровня.<br />
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.<br />
*'''иконка''' - Объект, в который сложим иконку предмета.<br />
*'''иконка для таблицы''' - Иконка соответствующая угадайке в таблице задач.<br />
*'''ресурс 1''' - Деньги даваемые за выполнение задания.<br />
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.<br />
*'''опыт''' - Опыт даваемый за выполнение задания.<br />
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.<br />
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.<br />
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.<br />
'''Группа рулетка'''<br />
<br />
На самом деле название "рулетка" весьма условное. В этом разделе можно поместить любое периодически повторяющееся задание.<br />
<br />
*'''показывать через''' - Через какое количество обычных задач показывать рулетку.<br />
*'''с уровня''' - Рулетка будет генерироваться только начиная с данного уровня.<br />
*'''машина''' - Объект, которому при активации будет вызвано состояние show.<br />
*'''иконка для таблицы''' - Иконка соответствующая рулетке в таблице задач.<br />
'''Группа генерируемые'''<br />
<br />
В этой группе находятся периодически генерируемые задания на прохождение локаций.<br />
<br />
*'''активных задач''' - Эти задачи будут генерироваться, когда активных задач столько или меньше.<br />
*'''с уровня''' - Эти задачи будут генерироваться только начиная с данного уровня.<br />
*'''максимально''' - Будет сгенерированно случайное количество задач от 1 до n.<br />
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.<br />
*'''название''' - Текстовый объект, в который будет сложено название локации.<br />
*'''превью''' - Объект, в который сложим превью локации для генерируемой задачи.<br />
*'''иконка для таблицы''' - Иконка соответствующая генерируемому таску в таблице задач.<br />
*'''ресурс 1''' - Деньги даваемые за выполнение задания.<br />
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.<br />
*'''опыт''' - Опыт даваемый за выполнение задания.<br />
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.<br />
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.<br />
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.<br />
<br />
<pre><br />
Если перед генерацией случайного таска на исследование локации указать параметру gen_loc значение от 0 до n, то ближайшая генерируемая задача будет для конкретной локации под указанным номером. После генерации параметр gen_loc становится -1.<br />
</pre><br />
<br />
<pre><br />
Если перед генерацией случайного таска от персоанжа указать параметру gen_face значение от 0 до n, то ближайшая генерируемая задача будет от персонажа под указанным номером. После генерации параметр gen_face становится -1.<br />
</pre><br />
<br />
'''Группа угадаечные задачи'''<br />
<br />
В этой группе указываем диапазоны для генерации тасков-викторин и способ генерации.<br />
<br />
*'''стандартная генерация''':<br />
::'''нет''' - особая генерация задач, при которой с начало генерируем задачи из _очереди 1_, потом задачи из _очереди 2_ ( Если в первой очереди мы не можем сгенерировать задачу, пытаемся сгенерировать из второй очереди). Если мы не сгенерировали задачу из обоих очередей, то мы обнуляем все таски из обоих очередей ( и сразу генерим из _очереди 1_ задачу);<br />
::'''да''' - стандартная генерация одной угадайки ( начинаем сверху вниз генерить;<br />
*'''очередь 1''' - Основная очередь, пытаемся из неё сгенерировать задачу, при получении Taskorganizer сост. _generate_guess_, если в предыдущем поле стоит '''нет'''. Каждая задача из этой очереди имеет условия для появления ( прохождение сюжетного таска к примеру);<br />
*'''очередь 2''' - Очередь затычка, задачи из этой очереди без условий. Предназначена когда в первой очереди нету доступных тасков для генерации;<br />
<br />
<pre><br />
У таскорганайзера есть поле disabled, если при каждом запуске приложения после конца туториала писать туда 1 - это приведет к удалению старого сейва и несозданию нового. Несколько килобайт выгоды в опциях + использовать только для туториального таскорганайзера, когда он отработает.<br />
</pre><br />
<br />
=Taskorganizer setup=<br />
[[Файл:Task_2.jpg|600px|thumb|right]]<br />
<br />
*'''id''' - Идентификатор задания. Используется в других заданиях. По общей концепции - строковый айди. Перетаскивается из текстовой базы.<br />
'''Для каждого задания(записи в logbook) должен быть свой уникальный id.'''<br />
*'''хинт''' - Список строк-подсказок для задачи. Перетаскиваются из текстовой базы. Таким образом, добавив несколько записей из базы, увидим выпадающий список.<br />
*'''название (объект)''' - Текстовый объект, в который мы сложим название задания. Описание подтягивается из текстовой базы из первого столбика (word) текстового id задания.<br />
*'''машина''' - Объект, которому при активации задания будет вызвано состояние show, а при повторном открытии задания show_old.<br />
*'''портрет''' - Объект, которому при активации задания будет устанорвлен графический ресурс рожи.<br />
*'''таблица''' - Таблица куда будут помещены темплейты предметов данного задания.<br />
*'''описание (объект)''' - Текстовый объект, в который мы сложим описание задания. Описание подтягивается из текстовой базы из второго столбика (sentence1) текстового id задания.<br />
*'''награда (ресурс 1)''' - Счетчик отображающий награду в ресурсе 1 за выполнение задания.<br />
*'''награда (ресурс 2)''' - Счетчик отображающий награду в ресурсе 2 за выполнение задания.<br />
*'''награда (опыт)''' - Счетчик отображающий награду в опыте за выполнение задания.<br />
*'''таблица хинта''' - Таблица, в которую будем складывать хинты.<br />
<br />
'''Необходимое для логбука'''<br />
<br />
*'''для журнала''' - 0 - задача предназначена для списка задач, 1 - задача предназначена для журнала.<br />
*'''категория''' - Категория к которой относится задача/запись. Пока используется только задачами для логбука.<br />
<br />
'''Критерии появления'''<br />
<br />
*'''уровень''' - Минимальный уровень, при котором может появиться задание.<br />
*'''аномалия''' - В какой-либо локации присутствует аномалия данного типа. -1 - не учитывать условие.<br />
*'''локация''' - Локация для которой будем проверять мастерство. -1 - не учитывать условие.<br />
*'''мастерство''' - Уровень мастерства, который должен быть достигнут в локиции. -1 - не учитывать условие.<br />
*'''завершены до''' - Задания, которые должны быть завершены до появления этого.<br />
*'''получены до''' - Задания, которые должны быть получены до появления этого.<br />
*'''не завершены до''' - Задания, которые должны быть НЕ завершены до появления этого.<br />
*'''объект до''' - Объект, который должен находиться в состоянии_до для появления задания.<br />
*'''состояние до''' - Состояние объекта_до, в котором вызывается генерация задания.<br />
*'''коллекционные''' - Коллекционные предметы, которые должны быть найдены для появления задания.<br />
*'''вероятность нужного''' - Когда мы будем проходить локации, в которых есть предметы необходимые для задания - мы будем подменять вероятность из локации вот этой вероятностью. 0 - использовать дефолтную.<br />
<br />
'''Критерии завершения'''<br />
<br />
*'''с аномалией''' - Задача выполняется при нахождение локации с аномалией данного типа. Не путать с аномалией необходимой для возникновения задания. -1 - не учитывать аномалию. <br />
*'''задачи''' - Задания, выполнение которых требуется для выполнения данной.<br />
*'''предметы''' - Задание завершается, когда получены следующие предметы (коллекционные и инвентарные единым списком).<br />
*'''объект''' - Объект, который должен находиться в определенном состоянии,для завершения задания.<br />
*'''состояние''' - Состояние объекта, в котором вызывается проверка задания.<br />
<br />
'''Награда'''<br />
<br />
*'''ресурс 1''' - Деньги даваемые за выполнение задания.<br />
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.<br />
*'''опыт''' - Опыт даваемый за выполнение задания.<br />
*'''перевести объект''' - При выполнении задания этот объект будет переведен в новое состояние.<br />
*'''в состояние''' - Состояние для объекта из предыдущего поля.<br />
<br />
==Изменить состояние объекта - новое задание==<br />
<br />
Позволяет изменять состояние объекту каждый раз при появлении нового задания, находится в taskorganizer setup.<br />
<br />
=Состояния=<br />
<br />
*'''show''' - При вызове этого состояния из таблицы с иконками заданий открывается соответствующая машина задания, прописанная в группе '''задание'''.<br />
*'''check''' - При вызове проверяется выполнение текущих заданий(заданий добавленных в таблицу). Для того чтобы таскорганайзер добавил таски в таблицу после загрузки приложения ему нужно передать refresh.<br />
*'''generate''' - При вызове подбирается подходящее задание в зависимости от прогресса игрока.<br />
*'''generate_plot''' - При вызове генерится задача с персонажем ( поле генерируемые с персонажами), если перед этим передать в поле gen_face номер персонажа, то сгенерируем с указанным персонажем, после параметр обнулится ( значение -1 ). Перед вызовом данного состояния, '''обязательнo''' в поле _param_ вбить "1".<br />
*'''log_check''' - При вызове состояния проверяется доступны ли новые записи в логбук.<br />
*'''log_show''' - Заполняет таблицу логбука записями с текущим фильтром.<br />
*'''refresh''' - Удаляет иконку выполненного задания из таблицы. Лучше всего вызывать после Check.<br />
*'''cancel''' - Удаляет задание без награды, которое указано как ID в параметре param таскорганайзера, т.е. объекту Taskorganizer в param указываем ID таска (например 1933 - берется из options.xml или текстовой базы), а потом вызываем состояние cancel.<br />
*'''add_hint''' - Добавляет в таблицу хинтов следующий текстовый ID из поля хинты текущего таска. Если все хинты показаны, то в опции записывается параметр haveHints=0.<br />
*'''task_prev''' - Используется, если открыта машина-шаблон текущего задания. В этом состоянии показывается предыдущее по списку таблицы задание.<br />
*'''task_next''' - Показывает следующее по списку таблицы задание.<br />
<pre><br />
Состояния task_prev и task_next работают циклически, после первой задачи показывают последнюю и наоборот.<br />
</pre><br />
*'''show_id''' - Показать окно задачи, взяв ее id из параметра.<br />
*'''show_last_plot''' - Открыть последнюю сгенерированную сюжетную задачу.<br />
*'''guess''' - Ответить на текущую угадайку, взяв ответ из параметра (param). Taskorganizer также хранит правильный ответ на текущую угадайку в параметре ''guess_answer'', его можно использовать, если нужно оставить игроку меньше вариантов для угадывания.<br />
*'''add_hint_last''' - Добавить подсказку последней добавленной задаче.<br />
*'''add_hint_top''' - Добавить подсказку верхней задаче в таблице.<br />
*'''guess_who_reward''' - начислить награду за последнюю угадайку.<br />
*'''roulette_complete''' -состояние, вызываемое при выполнении текущей задачи "рулетка".<br />
*'''cheat_complete''' - если его вызвать, то при следующем check выполнится задача, для которой последней показывали превью.<br />
*'''skip''' - При вызове этого состояния выполнится последний открытый таск. Цена скипа указывается внутри самого таска.<br />
*'''check_multiple''' - Проверить выполнение задач не выходя из проверки после первой найденной.<br />
<br />
Состояния для работы с тасками-угадайками по типу викторины ( в taskorganizer_setup - тип = "угадайка"):<br />
*'''answer''' - ответить на открытую угадайку ( в поле '''param''' должно находиться число, номер нажатой кнопки от 0 до 3 ). Вешаем на кнопки варианты-ответа ( пишем param = 0 - 3 , после передаёт _answer_); <br />
*'''generate_guess''' - сгенерировать угадайку-викторину ( выберет доступные задачи из диапазона указанном в очередях ( 1 и 2) поле _угадаечные задачи_ taskorganizer). При открытии угадайки, в поле _cur_guess_answer_ объекта Taskorganizer записывается номер кнопки где лежит правильный ответ ( от 0 до 3 );<br />
<br />
ПРИМЕЧАНИЕ: при проверке задач для логбука для последней выполненной будет перезаписано поле filter автоматически.<br />
<br />
При кажом refresh таскорганайзер заполняет у себя поля:<br />
*'''tasks_in_table''' - задач в таблице<br />
*'''tasks_total''' - задач в таблице + скрытых задач<br />
<br />
=Запись в опции=<br />
<br />
В процессе работы таскорганайзер записывает параметры в опции. Для конкретной задачи этот параметр представляет следующую строку:<br />
<br />
"tasks(id таскорганайзера в проекте).t(id текстового объекта - идентификатора задания).s".<br />
<br />
Возможные значения:<br />
* '''0''' - таск не активен (не добавлен путем вызова generate таскорганайзеру);<br />
* '''1''' - таск сгенерирован ;<br />
* '''2''' - таск прочитан (вызвано состояние show);<br />
* '''3''' - таск выполнен;<br />
* '''4''' - отложенное состояние таска (условия появления выполнены, но время его появления еще не прийшло);<br />
* '''5''' - таск выполнен, но награда ещё не забиралась ( таск будет оставаться в таблице, если таски не выполняются автоматически);<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.<br />
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. <br />
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
<br />
<br />
=Вычитаемые параметры:=<br />
Каждая таскорганайзер пишет в пользователя следующие параметры:<br />
*'''public.TaskOrganizerCompletedTasks''' - количество выполненных одноразовых задач;<br />
*'''public.TaskOrganizerCompletedTasksAll''' - количество выполненных задач с учётом повторяемых;<br />
<br />
<br />
=Пример проекта=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\Taskorganizer<br />
<br />
<br />
[[Category:Economics]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Splitmanager_or_A%5CB_Testing&diff=7214Splitmanager or A\B Testing2015-11-02T08:38:14Z<p>Odyadina: /* Статистика */</p>
<hr />
<div>[[Object|Объект]] '''splitmanager''' позволяет устанавливать различные стартовые значения параметров объектов с определенной вероятностью. Это удобно применять для анализа данных от пользователей в системе статистики.<br />
<br />
==Параметры==<br />
<br />
*'''Положение''' - для работы объекта не важен (игнорируется);<br />
*'''Размер''' - для работы объекта не важен (игнорируется);<br />
<br />
*'''Состояние''' - для работы объекта не важен (игнорируется);<br />
*'''поле старой версии''' - ссылка на поле в опциях. Наличие в этом поле чего-то кроме "-1" - признак старой версии приложения. Для новых приложений это поле не актуально.<br />
<br />
==splitmanager setup==<br />
<br />
[[Файл:Spl01.jpg|400px]]<br />
<br />
Окно настройки сплитов разделено на 6 колонок. <br />
<br />
В первую колонку кнопкой add1 добавляется группа сплитов. В группу могут входить сплиты, в которых изменяются похожие параметры (например, начальная энергия или начальное количество конкретного ресурса). Во второй колонке отображается id выделенной слева группы. Id перетаскивается из текстовой базы. '''При установке приложения из каждой группы выбирается по одному сплиту.'''<br />
<br />
В третью колонку по кнопке add2 добавляются непосредственно сами сплиты, из которых один выберется при установке приложения. В следующей колонке отображается id выбранного слева сплита и его вес среди других сплитов этой группы. Чем больше вес, тем больше вероятность выбора этого сплита. Id перетаскивается из текстовой базы.<br />
<br />
В пятой колонке кнопкой add3 добавляются сами начальные параметры, которые мы хотим сплитовать. А в последней колонке записываются объект, чей параметр мы устанавливаем, имя параметра и его значение.<br />
<br />
==Важно==<br />
<br />
Чтобы корректно работали сплиты объект splitmanager должен проинициализироваться раньше того объекта, которому он устанавливает параметры. Порядок инициализации следующий: сначала глобальные экраны в порядке их расположения в дереве проекта, затем остальные экраны в порядке их расположения в дереве проекта. Поэтому есть смысл положить splitmanager в глобальный экран с опциями, который бы инициализировался одним из первых.<br />
<br />
После того как сплиты от каждой группы выбраны в опции запишется строка вида: <br />
<br />
<splitmanager13702 split2317="2" split2318="0" split2601="1"/><br />
<br />
Где 13702 - id объекта splitmanager в проекте, split2317="0" - первая группа сплитов с id=2317 и выбранным 2-ым сплитом (нумерация с 0), split2318="0" - вторая группа сплитов с id=2318 и выбранным 0-ым сплитом, split2601="1" - третья группа сплитов с id=2601 и выбранным 1-ым сплитом.<br />
<br />
==Статистика==<br />
<br />
ВАЖНО!!! В текстовой базе у всех сплитов поля для всех языков должны быть заполнены, желательно писать номер сплита, т.к. содержимое поля для текущего языка будет браться и отправляться как значение параметра split_id.<br />
<br />
Во время первой установки сплита отправляется событие split_choose: split_id = 1, t_log_cal = 0, t_log_play = 0 .<br />
<br />
== Пример ==<br />
<br />
[http://fs5.absolutist.com/files/wikisample/splitmanager.rar Download]<br />
<br />
<br />
[[Category:Options]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Flurry&diff=7089Flurry2015-06-24T08:25:26Z<p>Odyadina: /* Состояния объекта flurry */</p>
<hr />
<div>{{TOC right}}<br />
[[Object|Объект]] '''flurry''' используется для сбора статистики об использовании приложения. <br />
<br />
По умолчанию записывает такие параметры как время сессии, количество сессий, устройство, версия ОС, количество пользователей, и представляет эти данные в виде графиков и таблиц. Также можно записать какие кнопки нажимались, время между нажатиями определённых кнопок. Для сбора общих данных достаточно добавить в соответствующем виде flurry-id приложения в app.icf или в viewer.xml соответствующей платформы перед сборкой. Для сбора данных о нажатиях кнопок и др. необходимо кроме добавления flurry-id приложения в app.icf или в viewer.xml соответствующей платформы, также добавить в проект объект типа flurry и передавать ему интересующие события.<br />
<br />
Общая статистика на сервисе Flurry выглядит примерно так:<br />
<br />
[[Файл:Flurry sum stat.jpg]]<br />
<br />
==Параметры и состояния объекта flurry==<br />
<br />
===Параметры объекта flurry===<br />
<br />
Чтобы в игре установить сбор статистики нажатий определённых кнопок необходимо в редакторе сцен добавить объект Flurry (желательно на глобальный экран) и передать ему определённые параметры.<br />
У объекта flurry есть 3 параметра которые можно задавать. Это:<br />
* '''event''' - задаёт имя события<br />
* '''param_name''' - задаёт имя параметра<br />
* '''param_value''' - задаёт значение параметра<br />
Для корректной работы сбора статистики с нажатия кнопки все три поля должны быть обязательно заполнены.<br />
Рассмотрим принцип формирования названий событий на примере кнопки выбора пака в пазлах.<br />
<br />
Параметр '''''event''''' должен обозначить общее название группы событий, на пример ''Pack_select'';<br />
<br />
Параметр '''''param_name''''' должен указывать на конкретный параметр который будет записываться, в нашем случае его можно назвать ''pack_name'';<br />
<br />
Параметр '''''param_value''''' задаёт конкретное значение параметра, на пример ''pack_1''.<br />
<br />
===Состояния объекта flurry===<br />
<br />
* '''event''' - отправляет накопленные данные<br />
<br />
В самом объекте flurry можно задать начальные параметры, но при изменении его параметров те которые были - изменятся, а если до изменения параметров перевести объект flurry в состояние event, то на сервер статистики отправятся значения по-умолчанию, которые были записаны.<br />
<br />
* '''send_log''' - отправляет файл walkthrough.log на сервер<br />
<br />
В файл walkthrough.log флури пишет прохождение по игре: каждая строка лога содержит значения ключевых параметров (опыт, монеты, кристаллы, последний выполненный таск и т.д.) на момент записи, запись новой строки вызывается при наступлении различных событий (повышение уровня, начисление ресурса, выполнение задния и т.д.)<br />
<br />
Внимание!!! В проекте, собранном без дебага, лог не пишется. Для логирования прохождения без дебага нужно в app.icf в группе Flurry указать log_walkthrough = 1 (это касается файла walkthrough.log). С дебагом будет логироваться вне зависимости от этого.<br />
<br />
==Пример применения объекта flurry==<br />
<br />
Пример того как кнопка отправляет на сервер информацию о том, что она была нажата:<br />
<br />
[[Файл:Flurry button.jpg]]<br />
<br />
В данном случае кнопка записывает событие, название параметра, значение параметра, и сразу отправляет на сервер статистики.<br />
<br />
<br />
==Настройки приложения для отправки статистики==<br />
<br />
'''Для отправки статистики также необходимо добавить flurry-id в app.icf или в viewer.xml соответствующей платформы.'''<br />
Т.к. нагляднее выглядит статистика отдельно для платформы ios и отдельно для android, а также поскольку сервис предоставляет разные flurry-sdk для каждой из платформ, то flurry-id лучше всего вставлять в viewer.xml соответствующей платформы.<br />
<br />
В app.icf необходимо добавить строки:<br />
<br />
'''''[Flurry]'''''<br />
<br />
'''''game_id="здесь указывается flurry-id приложения"'''''<br />
<br />
или добавить в viewer.xml соответствующей платформы такую строку после globaltop, если таковой имеется, если его нет, то после настроек банеров (<banners platform_id="".../>):<br />
<br />
'''''<flurry game_id="здесь указывается flurry-id приложения"/>'''''<br />
<br />
==Реклама==<br />
<br />
Управление показом рекламы идёт через объект типа [[Advertisement]].<br />
<br />
В объекте [[Advertisement]] в качестве провайдера должен быть указан объект типа flurry и должны быть указаны '''тип''', '''space''', '''size'''.<br />
<br />
Также в [[app.icf]] или [[viewer.xml]] должен быть указан flurry id приложения, согласно ему идет работа банерной системы.<br />
<br />
Кроме этого в итоговый ''AndroidManifest.xml'' должны быть добавлены следующие строки:<br />
<br />
<pre><br />
<br />
<activity android:name="com.flurry.android.FlurryFullscreenTakeoverActivity"<br />
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode" <br />
android:hardwareAccelerated="true" ><br />
</activity><br />
<br />
</pre><br />
<br />
Также должно быть следующее разрешение:<br />
<br />
<pre><br />
<br />
<uses-permission android:name="android.permission.INTERNET"/><br />
<br />
</pre><br />
<br />
<br />
<br />
==Примечания==<br />
<br />
Исходя из значений параметров будет строиться на сервисе Flurry диаграмма по параметру указанному в ''param_name''. К примеру, если для одной кнопки зададим в ''param_value'' значение ''pack_1'', второй кнопке зададим значение ''pack_2'', то в итоге, на странице сервиса в статистике приложения в раздеде Events получим список событий, которые были записаны, если выберем событие и выберем отобразить статистику по параметрам, для наглядности в круговой диаграмме, то увидим круговую диаграмму с долями которые занимает определённый параметр. Доли высчитываются исходя из количества пришедших значений параметров, то есть если 3 раза придёт значение ''pack_1'' и один раз придёт значение ''pack_2'', то доля ''pack_1'' будет 75%, а ''pack_2'' - 25% . <br />
<br />
Также можно выбрать из выпадающего списка по каким параметрам(которые указывались в '''''param_name''''' в рамках текущего имени события) необходимо отобразить статистику по значениям параметра.<br />
<br />
[[Файл:Flurry ev stat.jpg]]<br />
<br />
<br />
===Рекомендации Flurry к событиям===<br />
* Составьте цели и план действий вокруг приложения<br />
* Если Вы хотите изменять функционал - отслеживайте его<br />
* Убедитесь что Вы собираете события вокруг навигации и монетизации<br />
* Имена событий должны легко различаться и поддаваться категоризации<br />
* Используйте временные события. Flurry автоматически разобьёт их по группам и Вы получите наглядную информацию.<br />
* Не тратьте много времени на планирование. Вы можете добавить события позже.<br />
<br />
[http://support.flurry.com/index.php?title=Analytics/GettingStarted/Events Рекомендации Flurry к параметрам]<br />
<br />
=== Отправка объектом Economics Flurry событий и параметров ===<br />
<br />
Объект Economicsавтоматически оправляет следующие Flurry события и параметры:<br />
<br />
1) При достижении уровня - '''xplevel_ <i> _reached''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*xplevel - Уровень опыта<br />
*coins_spent_log - Сколько потрачено монет<br />
*coins_left_log - Сколько осталось монет<br />
*diams_spent - Сколько потрачено кристаллов<br />
*diams_left - Сколько осталось кристаллов<br />
*hints_used - Сколько хинтов использовано<br />
<br />
2) При покупке в банке - '''purchase_ok_<item>''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*price_usd - Цена в долларах<br />
*history - История покупок через запятую<br />
*total_usd - Сколько суммарно потрачено денег<br />
*last_location - Последняя локация<br />
*last_task - Последняя мода<br />
*was_discount - Была ли скидка<br />
*from_hidden - 1-из хиддена, 0 -из меню<br />
*last_anomaly - Последняя аномалия<br />
<br />
3) При первой покупке энергии - '''1st_run_buy_energy''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_price - Цена в кристаллах<br />
*last_task_open - Последняя открытая таска<br />
*last_loc - Последняя сыгранная локация<br />
*xp_level - Уровень пользователя<br />
*energy_left - Сколько осталось энергии<br />
<br />
4) При первом использовании энергии - '''1st_run_use_energy''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_price - Цена в кристаллах<br />
*last_task_open - Последняя открытая таска<br />
*last_loc - Последняя сыгранная локация<br />
*xp_level - Уровень пользователя<br />
*energy_left - Сколько осталось энергии<br />
<br />
5) При покупке энергии - '''buy_energy''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_pric - Цена в кристаллах<br />
*last_task_open - Последняя открытая таска<br />
*last_loc - Последняя сыгранная локация<br />
*xp_level - Уровень пользователя<br />
<br />
6) При покупке энергии - '''buy_energy''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_pric - Цена в кристаллах<br />
*last_task_open - Последняя открытая таска<br />
*last_loc - Последняя сыгранная локация<br />
*xp_level - Уровень пользователя<br />
<br />
7) При покупке хинтов - '''buy_hints''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_price - цена в кристаллах<br />
*last_task_open - Последняя открытая таска<br />
*last_loc - Последняя сыгранная локация<br />
*xp_level - Уровень пользователя<br />
*from_game - 1- да, 0 -нет<br />
*was_anomaly - 1 - да, 0 -нет<br />
<br />
8) При покупке амулетов - '''buy_amulets''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_price - Цена в кристаллах<br />
*last_task_open - Последняя открытая таска<br />
*last_loc - Последняя сыгранная локация<br />
*xp_level - Уровень пользователя<br />
*from_game - 1- да, 0 -нет<br />
*from_main_menu - 1 - да, 0 -нет<br />
<br />
9) При использовании амулетов - '''use_amulets''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_price - Цена в кристаллах<br />
*last_task_open - Последняя открытая таска<br />
*last_loc - Последняя сыгранная локация<br />
*xp_level - Уровень пользователя<br />
*from_game - 1- да, 0 -нет<br />
*from_main_menu - 1 - да, 0 -нет<br />
<br />
10) При покупке чарджеров - '''buy_chargers''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_price - Цена в кристаллах<br />
*coins_price - Цена в монетках<br />
*xp_level - Уровень пользователя<br />
<br />
11) При покупке доступов к локациям - '''buy_keys''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_price - Цена в кристаллах<br />
*coins_price - Цена в монетках<br />
*xp_level - Уровень пользователя<br />
<br />
12) При покупке ингридиентов для крафта - ''' buy_Ingridients''' (buy_parts):<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_price - Цена в кристаллах<br />
*coins_price - Цена в монетках<br />
*xp_level - Уровень пользователя<br />
<br />
13) При покупке ингридиентов для крафта - ''' buy_Ingridients''':<br />
*t_log_play - Время логарифмическое игровое<br />
*t_log_cal - Время логарифмическое календарное<br />
*id - Id предмета<br />
*diams_price - Цена в кристаллах<br />
*coins_price - Цена в монетках<br />
*xp_level - Уровень пользователя<br />
<br />
<br />
[[Category:Options]]<br />
[[Category:Реклама]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Counter&diff=7040Counter2015-04-24T12:12:29Z<p>Odyadina: /* Основные параметры */</p>
<hr />
<div>[[Файл:Counte.jpg|right]]<br />
'''Counter''' - [[Object|объект]], который хранит значение целого положительного числа, значение которого могут изменять другие объекты. Используется для визуализации числа сделанных ходов или кликов в игре, количества оставшихся подсказок и т.п. Он может быть скрыт и использоваться для хранения целого числа, необходимого для работы других объектов, например, [[Machine|машинами состояний]].<br />
== Общие параметры ==<br />
Смотреть описание [[Object|Object]].<br />
== Основные параметры ==<br />
*'''res''' ('' res '') - Графический ресурс для отображения цифр ([[Интерфейс_ResourceEditor|анимированный клип]] из 10 фреймов: первый фрейм - 0, последний 9). Перетаскивается мышкой из редактора ресурсов.<br />
*'''min''' ('' min '') - Минимальное значение счетчика.<br />
*'''max''' ('' max'') - Максимальное значение счетчика.<br />
*'''val''' ('' val '') - Начальное (текущее) значение счетчика.<br />
*'''val2''' ('' val2 '') - Дополнительное значение счетчика. Только для время == 2.<br />
*'''new_val''' ('' new_val '') - Новое значение. Будет записано в val при вызове состояния save.<br />
*'''шаг (inc, dec)''' ('' dval '') - Величина, на которую изменяется счетчик при inc и dec ( min=1) ( если меняем значение во вьювере, после задания значения - инитим счётчик).<br />
*'''dx между цифрами''' ('' digShift '') - Расстояние между цифрами.<br />
*'''выравнивание''' ('' left ''):<br />
:'''1''' - число будет выравниваться по левому краю (цифры числа сдвигаются слева направо); <br />
:'''2''' - будет выравниваться по центру;<br />
:'''0''' - выравнивание по правому краю.<br />
*'''время''' ('' time ''):<br />
:'''1''' - число будет считаться временем в секундах и отображаться в виде mm:ss. Двоеточие должно быть 11 кадром графического ресурса;<br />
:'''2''' - будет отображаться разделитель и второе значение из поля val2, разделитель также из 11 кадра графики;<br />
:'''0''' - будет отображенно число без форматирование во временную единицу.<br />
'''Группа - времена''':<br />
:'''невидимости''' ('' tmBeg '') - Время невидимости перед открытием;<br />
:'''открытия''' ('' tmOpn '') - Время проявления от полной прозрачности к прозрачности, заданной в модификаторах;<br />
:'''закрытия''' ('' tmCls '') - Время исчезания до полной прозрачности;<br />
:'''изменения''' ('' tmChg '') - Время, за которое счетчик изменяется (inc, dec);<br />
:'''шага изменения''' ('' tmChgIt '') - Скорость, с которой счетчик изменяется (inc, dec).<br />
:'''скорость изменения''' ('' velChg'') - Время промежутков, через которые происходит обновление счетчика при изменении (inc, dec).<br />
*'''сохранять в профиль''' ('' prof ''):<br />
:'''1''' - значение будет сохранено в текущий профиль;<br />
:'''0''' - сохранено глобально.<br />
*'''игра''' ('' game '') - Имя игры (раздела в опциях), который надо вычитать для получения начального значения счетчика (например, для отображения результатов).<br />
*'''уровень''' ('' level '') - Имя уровня (параметра в разделе игра - см.выше), который надо вычитать для получения начального значения счетчика (например, для отображения результатов). Раздел равен: game.level.<br />
<br />
*'''Группа - шрифт''':<br />
:'''имя''' ('' fn ''):<br />
::'''число, начиная с 0''' - порядковый номер шрифта (чтобы отобразился шрифт, нужно каунтеру задать ресурс (res), ресурс во вьювере отображён не будет);<br />
::'''-1''' - рисовать каунтер клипами.<br />
:'''размер''' ('' fs '') - Размер шрифта в пикселях;<br />
:'''цвет 1''' ('' fc '') - Цвет текста.<br />
<br />
<pre><br />
Счетчик может отображать отрицательные чиста.<br />
Если для отображения используется графика, то 11-ым кадром в анимации должен быть символ "минус".<br />
Если счетчик отображается шрифтом, то можно указать цвет отрицательных чисел.<br />
</pre><br />
<br />
== Добавляемые параметры ==<br />
<br />
<br />
[[Файл:Counte_1.png|right]]<br />
Меню выбора ''Добавляемые параметры'' к объектам активируется по нажатию правой кнопки мыши.<br />
<br />
<br />
[[Файл:+.png]] '''dec: при уменьшении изменить объект''' ('' decChg '') - При уменьшении значения счетчика, изменить объект:<br />
*'''объект''' ('' obj '') - При уменьшении значения счетчика, изменить этот объект;<br />
*'''состояние''' ('' obj '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' st '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела dec''' ('' decIf '') - Условие при выполнении которого происходят изменения из раздела dec. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' val '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''dec: при уменьшении изменить объект''';<br />
:'''0''' - если условие выполняется, работает '''dec: при уменьшении изменить объект'''.<br />
<br />
<br />
[[Файл:+.png]] '''при опускании под min изменить объект''' ('' minChg '') - При уменьшении значения счетчика ниже min, изменить объект:<br />
*'''объект''' ('' obj '') - При уменьшении значения счетчика ниже min, изменить этот объект;<br />
*'''состояние''' ('' st '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' val '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела min''' ('' minIf '') - Условие при выполнении которого происходят изменения из раздела min. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' buy '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''при опускании под min изменить объект''';<br />
:'''0''' - если условие выполняется, работает '''при опускании под min изменить объект'''.<br />
<br />
<br />
[[Файл:+.png]] '''inc: при увеличении изменить объект''' ('' incChg '') - При увеличении значения счетчика, изменить объект:<br />
*'''объект''' ('' obj '') - При уменьшении значения счетчика, изменить этот объект;<br />
*'''состояние''' ('' st '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' val '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела inc''' ('' incIf '') - Условие при выполнении которого происходят изменения из раздела inc. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' buy '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''inc: при увеличении изменить объект''';<br />
:'''0''' - если условие выполняется,работает '''inc: при увеличении изменить объект''';<br />
<br />
<br />
[[Файл:+.png]] '''при превышении max изменить объект''' ('' maxChg '') - При увеличении значения счетчика более max, изменить объект:<br />
*'''объект''' ('' obj '') - При увеличении значения счетчика более max, изменить этот объект;<br />
*'''состояние''' ('' st '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' val '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела max''' ('' maxIf '') - Условие при выполнении которого происходят изменения из раздела max. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' buy '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''при превышении max изменить объект''';<br />
:'''0''' - если условие выполняется,работает '''при превышении max изменить объект''';<br />
<br />
== Состояния ==<br />
<br />
Объект '''Counter''' обладает рядом состояний:<br />
*'''dec''' - Уменьшить значение счетчика на 1;<br />
*'''inc''' - Увеличить значение счетчика на 1;<br />
*'''min''' - Установить счетчик в минимальное значение;<br />
*'''max''' - Установить счетчик в максимальное значение;<br />
*'''init''' - Переинициализировать счетчик;<br />
*'''reset''' - Переустановить счетчик;<br />
*'''read''' - Прочитать значение счетчика из опций;<br />
*'''read_anim''' - Прочитать значение счетчика из поля в опциях; При этом: воспринимает параметры tmChg, tmChgIt, velChg. Это значит, что счетчик при передаче ему этого состояния, "прокручивает" графику до значения, считанного из опций. Это заменяет используемую связку последовательного изменения dval, передачи init и inc.<br />
*'''save''' - Сохранить значение счетчика в опции.<br />
<br />
== Пример ==<br />
<br />
<br />
В качестве графического ресурса в счетчик перетаскивается анимационный клип из 10 кадров<br />
с цифрами от 0 до 9 (кадров может быть больше, но первые 10 - это цифры). Диапазон изменения задается в полях '''min''', '''max'''. Начальное значение в поле '''val'''. Счетчик можно увеличивать или уменьшать, меняя ему состояния '''inc''' (увеличить на 1) и '''dec''' (уменьшить на 1).<br />
<br />
Рассмотрим пример использования. Пусть есть счетчик и четыре кнопки. При помощи клика правой кнопки мыши, добавим каждой кнопке раздел "изменить состояние объекта", в котором при нажатии на кнопку будет вызываться состояние счетчика '''dec''', '''inc''', '''min''', '''max''' соответственно.<br />
<center><br />
[[Файл:test_cnt_1.png]]<br />
</center><br />
В результате, при клике на кнопку '''inc''' будет происходить увеличение цифр 0 до 30 . После достижения максимальной границы, равной 30, счетчик перестанет увеличиваться. Аналогично, при клике на кнопку '''dec''', можно уменьшить значения счетчика. Клик на кнопку '''min''' и '''max''' переводят значение счетчика в минимальное и максимальное значение соответственно.<br />
<br />
По умолчанию, разряды числа счетчика сдвигаются справа налево от его положения в редакторе (неподвижен правый край числа). Если в свойствах счетчика поле "'''выравнивание'''" установить в 1, то неподвижным будет левый край. При значении этого параметра 2, неподвижным будет центр числа. Параметр "'''dx между цифрами'''" задает дополнительное расстояние между цифрами в числе (если он меньше нуля, цифры будут ближе).<br />
<br />
<br />
'''Прямое изменение значения.'''<br />
<br />
Значение счетчика можно изменить напрямую, например, их машины состояний:<br />
<pre><br />
st = "wait" <br />
{<br />
click { go="change" } // при клике - идем в состояние "change"<br />
}<br />
<br />
st = "change" <br />
{<br />
set { obj=counter par="val" val="5" } // меняем значение счетчика<br />
set { obj=counter st="reset" } // переустанавливаем его<br />
wait{ go="wait" }<br />
}<br />
</pre> <br />
При клике на машину, она переходит в состояние "change". <br />
В этом состоянии устанавливается параметр счетчика '''val''' в значение 5, после чего он перезапускается, переводясь в состояние "'''reset'''" (параметр '''val''' является строковым и счетчику его нужно перечитать, что и делается в состоянии "reset"). Аналогично счетчик можно было бы перевести в состояние "init", но тогда он бы полностью переинитился (обновились бы все его параметры из начальных настроек). В состоянии "reset" обновляется только поле "val".<br />
<br />
<br />
'''Достижение границ.'''<br />
<br />
Пусть после серии уменьшений счетчика (состояния "dec") он достиг минимального значения '''min''' и попытался снизиться ниже. Этого не произойдет (ограничения не дают выйти за них).<br />
При достижении границ счетчика можно изменить состояния или параметры других объектов.<br />
Для этого необходимо в свойствах при помощи правой кнопки мыши добавить раздел:<br />
<br />
[[Файл:+.png]] '''при опускании под min изменить объект''':<br />
:'''объект''' - При уменьшении значения счетчика ниже min, изменить этот объект;<br />
:'''состояние''' - Состояние в которое переводится объект;<br />
:'''параметр''' - Параметр, который мы изменяем;<br />
:'''значение''' - Новое значение параметра.<br />
<br />
При изменении параметра переинициализировать объект не надо (это произойдет автоматически).<br />
<br />
Подобных разделов может быть несколько. Если счетчик стал равным минимальному значению,<br />
а его продолжают пытаться уменьшить, каждый раз будет вызываться изменение состояний (параметров) из этих разделов.<br />
<br />
Пусть к примеру, разрешено 3 раза нажать на некоторую кнопку (например, хинт в игре). После 3-х изменений должно появляться окно с надписью "подсказки кончились" с кнопкой "close". При закрытии окна и повторной попытке нажать на кнопку, окно должно появляться снова.<br />
Это можно сделать при помощи счетчика, двух кнопок, и машины состояний в виде окна (верхняя таблица справа - это машина состояния окна, ниже - свойства кнопки и счетчика):<br />
<center><br />
[[Файл:counter3a.png]]<br />
</center><br />
<br />
<br />
'''Значение из options.'''<br />
<br />
Начальное значение счетчика можно задавать не только в редакторе (поле '''val'''), но и получать его сохраненное значение в [[Options|опциях игры]]. Пусть некоторая миниигра сохранила в опциях целое значение в переменной, например, с именем "scores". Тогда это значение будет присвоено счетчику, если в настройках счетчика в поле "уровень" написать "scores".<br />
<br />
Если помимо поля "уровень" задано поле "игра", то значение для счетчика будет искаться<br />
не в глобальных параметрах опций, а в разделе, определяемом полем "игра".<br />
Если строка в поле "игра" разделено точками, то они определяют подразделы.<br />
Так, если "уровень"="scores", а "игра"="puzzle.pack1", а xml файл options.xml <br />
будет выглядеть примерно так:<br />
<pre><br />
<obj nm="options" ><br />
<puzzle><br />
<pack1 scores="3" /><br />
</puzzle><br />
</obj><br />
</pre><br />
то начальное значение счетчика будет равно 3. Если такого раздела или поля не окажется,<br />
то счетчик будет невидимым.<br />
<br />
Напомним, что объект [[Options]] в игре существует в единственном экземпляре и должен находиться на экране, помеченном как глобальный.<br />
<br />
[[Category:Main objects]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Counter&diff=7039Counter2015-04-24T12:10:46Z<p>Odyadina: /* Основные параметры */</p>
<hr />
<div>[[Файл:Counte.jpg|right]]<br />
'''Counter''' - [[Object|объект]], который хранит значение целого положительного числа, значение которого могут изменять другие объекты. Используется для визуализации числа сделанных ходов или кликов в игре, количества оставшихся подсказок и т.п. Он может быть скрыт и использоваться для хранения целого числа, необходимого для работы других объектов, например, [[Machine|машинами состояний]].<br />
== Общие параметры ==<br />
Смотреть описание [[Object|Object]].<br />
== Основные параметры ==<br />
*'''res''' ('' res '') - Графический ресурс для отображения цифр ([[Интерфейс_ResourceEditor|анимированный клип]] из 10 фреймов: первый фрейм - 0, последний 9). Перетаскивается мышкой из редактора ресурсов.<br />
*'''min''' ('' min '') - Минимальное значение счетчика.<br />
*'''max''' ('' max'') - Максимальное значение счетчика.<br />
*'''val''' ('' val '') - Начальное (текущее) значение счетчика.<br />
*'''val2''' ('' val2 '') - Дополнительное значение счетчика. Только для время == 2.<br />
*'''new_val''' ('' new_val '') - Новое значение. Будет записано в val при вызове состояния save.<br />
*'''шаг (inc, dec)''' ('' dval '') - Величина, на которую изменяется счетчик при inc и dec ( min=1) ( если меняем значение во вьювере, после задания значения - инитим счётчик).<br />
*'''dx между цифрами''' ('' digShift '') - Расстояние между цифрами.<br />
*'''выравнивание''' ('' left ''):<br />
:'''1''' - число будет выравниваться по левому краю (цифры числа сдвигаются слева направо); <br />
:'''2''' - будет выравниваться по центру;<br />
:'''0''' - выравнивание по правому краю.<br />
*'''время''' ('' time ''):<br />
:'''1''' - число будет считаться временем в секундах и отображаться в виде mm:ss. Двоеточие должно быть 11 кадром графического ресурса;<br />
:'''2''' - будет отображаться разделитель и второе значение из поля val2, разделитель также из 11 кадра графики;<br />
:'''0''' - будет отображенно число без форматирование во временную единицу.<br />
'''Группа - времена''':<br />
:'''невидимости''' ('' tmBeg '') - Время невидимости перед открытием;<br />
:'''открытия''' ('' tmOpn '') - Время проявления от полной прозрачности к прозрачности, заданной в модификаторах;<br />
:'''закрытия''' ('' tmCls '') - Время исчезания до полной прозрачности;<br />
:'''изменения''' ('' tmChg '') - Время, за которое счетчик изменяется (inc, dec);<br />
:'''шага изменения''' ('' tmChgIt '') - Скорость, с которой счетчик изменяется (inc, dec).<br />
:'''скорость изменения''' ('' velChg'') - Время промежутков, через которые происходит обновление счетчика при изменении (inc, dec).<br />
*'''сохранять в профиль''' ('' prof ''):<br />
:'''1''' - значение будет сохранено в текущий профиль;<br />
:'''0''' - сохранено глобально.<br />
*'''игра''' ('' game '') - Имя игры (раздела в опциях), который надо вычитать для получения начального значения счетчика (например, для отображения результатов).<br />
*'''уровень''' ('' level '') - Имя уровня (параметра в разделе игра - см.выше), который надо вычитать для получения начального значения счетчика (например, для отображения результатов). Раздел равен: game.level.<br />
<br />
*'''Группа - шрифт''':<br />
:'''имя''' ('' fn ''):<br />
::'''число, начиная с 0''' - порядковый номер шрифта (чтобы отобразился шрифт, нужно каунтеру задать ресурс (res), ресурс во вьювере отображён не будет);<br />
::'''-1''' - рисовать каунтер клипами.<br />
:'''размер''' ('' fs '') - Размер шрифта в пикселях;<br />
:'''цвет 1''' ('' fc '') - Цвет текста.<br />
<br />
Счетчик может отображать отрицательные чиста. Если для отображения используется графика, то 11-ым кадром в анимации должен быть символ "минус", а если счетчик отображается шрифтом, то можно указать цвет отрицательных чисел.<br />
<br />
== Добавляемые параметры ==<br />
<br />
<br />
[[Файл:Counte_1.png|right]]<br />
Меню выбора ''Добавляемые параметры'' к объектам активируется по нажатию правой кнопки мыши.<br />
<br />
<br />
[[Файл:+.png]] '''dec: при уменьшении изменить объект''' ('' decChg '') - При уменьшении значения счетчика, изменить объект:<br />
*'''объект''' ('' obj '') - При уменьшении значения счетчика, изменить этот объект;<br />
*'''состояние''' ('' obj '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' st '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела dec''' ('' decIf '') - Условие при выполнении которого происходят изменения из раздела dec. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' val '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''dec: при уменьшении изменить объект''';<br />
:'''0''' - если условие выполняется, работает '''dec: при уменьшении изменить объект'''.<br />
<br />
<br />
[[Файл:+.png]] '''при опускании под min изменить объект''' ('' minChg '') - При уменьшении значения счетчика ниже min, изменить объект:<br />
*'''объект''' ('' obj '') - При уменьшении значения счетчика ниже min, изменить этот объект;<br />
*'''состояние''' ('' st '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' val '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела min''' ('' minIf '') - Условие при выполнении которого происходят изменения из раздела min. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' buy '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''при опускании под min изменить объект''';<br />
:'''0''' - если условие выполняется, работает '''при опускании под min изменить объект'''.<br />
<br />
<br />
[[Файл:+.png]] '''inc: при увеличении изменить объект''' ('' incChg '') - При увеличении значения счетчика, изменить объект:<br />
*'''объект''' ('' obj '') - При уменьшении значения счетчика, изменить этот объект;<br />
*'''состояние''' ('' st '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' val '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела inc''' ('' incIf '') - Условие при выполнении которого происходят изменения из раздела inc. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' buy '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''inc: при увеличении изменить объект''';<br />
:'''0''' - если условие выполняется,работает '''inc: при увеличении изменить объект''';<br />
<br />
<br />
[[Файл:+.png]] '''при превышении max изменить объект''' ('' maxChg '') - При увеличении значения счетчика более max, изменить объект:<br />
*'''объект''' ('' obj '') - При увеличении значения счетчика более max, изменить этот объект;<br />
*'''состояние''' ('' st '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' val '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела max''' ('' maxIf '') - Условие при выполнении которого происходят изменения из раздела max. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' buy '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''при превышении max изменить объект''';<br />
:'''0''' - если условие выполняется,работает '''при превышении max изменить объект''';<br />
<br />
== Состояния ==<br />
<br />
Объект '''Counter''' обладает рядом состояний:<br />
*'''dec''' - Уменьшить значение счетчика на 1;<br />
*'''inc''' - Увеличить значение счетчика на 1;<br />
*'''min''' - Установить счетчик в минимальное значение;<br />
*'''max''' - Установить счетчик в максимальное значение;<br />
*'''init''' - Переинициализировать счетчик;<br />
*'''reset''' - Переустановить счетчик;<br />
*'''read''' - Прочитать значение счетчика из опций;<br />
*'''read_anim''' - Прочитать значение счетчика из поля в опциях; При этом: воспринимает параметры tmChg, tmChgIt, velChg. Это значит, что счетчик при передаче ему этого состояния, "прокручивает" графику до значения, считанного из опций. Это заменяет используемую связку последовательного изменения dval, передачи init и inc.<br />
*'''save''' - Сохранить значение счетчика в опции.<br />
<br />
== Пример ==<br />
<br />
<br />
В качестве графического ресурса в счетчик перетаскивается анимационный клип из 10 кадров<br />
с цифрами от 0 до 9 (кадров может быть больше, но первые 10 - это цифры). Диапазон изменения задается в полях '''min''', '''max'''. Начальное значение в поле '''val'''. Счетчик можно увеличивать или уменьшать, меняя ему состояния '''inc''' (увеличить на 1) и '''dec''' (уменьшить на 1).<br />
<br />
Рассмотрим пример использования. Пусть есть счетчик и четыре кнопки. При помощи клика правой кнопки мыши, добавим каждой кнопке раздел "изменить состояние объекта", в котором при нажатии на кнопку будет вызываться состояние счетчика '''dec''', '''inc''', '''min''', '''max''' соответственно.<br />
<center><br />
[[Файл:test_cnt_1.png]]<br />
</center><br />
В результате, при клике на кнопку '''inc''' будет происходить увеличение цифр 0 до 30 . После достижения максимальной границы, равной 30, счетчик перестанет увеличиваться. Аналогично, при клике на кнопку '''dec''', можно уменьшить значения счетчика. Клик на кнопку '''min''' и '''max''' переводят значение счетчика в минимальное и максимальное значение соответственно.<br />
<br />
По умолчанию, разряды числа счетчика сдвигаются справа налево от его положения в редакторе (неподвижен правый край числа). Если в свойствах счетчика поле "'''выравнивание'''" установить в 1, то неподвижным будет левый край. При значении этого параметра 2, неподвижным будет центр числа. Параметр "'''dx между цифрами'''" задает дополнительное расстояние между цифрами в числе (если он меньше нуля, цифры будут ближе).<br />
<br />
<br />
'''Прямое изменение значения.'''<br />
<br />
Значение счетчика можно изменить напрямую, например, их машины состояний:<br />
<pre><br />
st = "wait" <br />
{<br />
click { go="change" } // при клике - идем в состояние "change"<br />
}<br />
<br />
st = "change" <br />
{<br />
set { obj=counter par="val" val="5" } // меняем значение счетчика<br />
set { obj=counter st="reset" } // переустанавливаем его<br />
wait{ go="wait" }<br />
}<br />
</pre> <br />
При клике на машину, она переходит в состояние "change". <br />
В этом состоянии устанавливается параметр счетчика '''val''' в значение 5, после чего он перезапускается, переводясь в состояние "'''reset'''" (параметр '''val''' является строковым и счетчику его нужно перечитать, что и делается в состоянии "reset"). Аналогично счетчик можно было бы перевести в состояние "init", но тогда он бы полностью переинитился (обновились бы все его параметры из начальных настроек). В состоянии "reset" обновляется только поле "val".<br />
<br />
<br />
'''Достижение границ.'''<br />
<br />
Пусть после серии уменьшений счетчика (состояния "dec") он достиг минимального значения '''min''' и попытался снизиться ниже. Этого не произойдет (ограничения не дают выйти за них).<br />
При достижении границ счетчика можно изменить состояния или параметры других объектов.<br />
Для этого необходимо в свойствах при помощи правой кнопки мыши добавить раздел:<br />
<br />
[[Файл:+.png]] '''при опускании под min изменить объект''':<br />
:'''объект''' - При уменьшении значения счетчика ниже min, изменить этот объект;<br />
:'''состояние''' - Состояние в которое переводится объект;<br />
:'''параметр''' - Параметр, который мы изменяем;<br />
:'''значение''' - Новое значение параметра.<br />
<br />
При изменении параметра переинициализировать объект не надо (это произойдет автоматически).<br />
<br />
Подобных разделов может быть несколько. Если счетчик стал равным минимальному значению,<br />
а его продолжают пытаться уменьшить, каждый раз будет вызываться изменение состояний (параметров) из этих разделов.<br />
<br />
Пусть к примеру, разрешено 3 раза нажать на некоторую кнопку (например, хинт в игре). После 3-х изменений должно появляться окно с надписью "подсказки кончились" с кнопкой "close". При закрытии окна и повторной попытке нажать на кнопку, окно должно появляться снова.<br />
Это можно сделать при помощи счетчика, двух кнопок, и машины состояний в виде окна (верхняя таблица справа - это машина состояния окна, ниже - свойства кнопки и счетчика):<br />
<center><br />
[[Файл:counter3a.png]]<br />
</center><br />
<br />
<br />
'''Значение из options.'''<br />
<br />
Начальное значение счетчика можно задавать не только в редакторе (поле '''val'''), но и получать его сохраненное значение в [[Options|опциях игры]]. Пусть некоторая миниигра сохранила в опциях целое значение в переменной, например, с именем "scores". Тогда это значение будет присвоено счетчику, если в настройках счетчика в поле "уровень" написать "scores".<br />
<br />
Если помимо поля "уровень" задано поле "игра", то значение для счетчика будет искаться<br />
не в глобальных параметрах опций, а в разделе, определяемом полем "игра".<br />
Если строка в поле "игра" разделено точками, то они определяют подразделы.<br />
Так, если "уровень"="scores", а "игра"="puzzle.pack1", а xml файл options.xml <br />
будет выглядеть примерно так:<br />
<pre><br />
<obj nm="options" ><br />
<puzzle><br />
<pack1 scores="3" /><br />
</puzzle><br />
</obj><br />
</pre><br />
то начальное значение счетчика будет равно 3. Если такого раздела или поля не окажется,<br />
то счетчик будет невидимым.<br />
<br />
Напомним, что объект [[Options]] в игре существует в единственном экземпляре и должен находиться на экране, помеченном как глобальный.<br />
<br />
[[Category:Main objects]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Counter&diff=7038Counter2015-04-24T12:10:32Z<p>Odyadina: /* Основные параметры */ Отрицательное значение отображается счетчиком</p>
<hr />
<div>[[Файл:Counte.jpg|right]]<br />
'''Counter''' - [[Object|объект]], который хранит значение целого положительного числа, значение которого могут изменять другие объекты. Используется для визуализации числа сделанных ходов или кликов в игре, количества оставшихся подсказок и т.п. Он может быть скрыт и использоваться для хранения целого числа, необходимого для работы других объектов, например, [[Machine|машинами состояний]].<br />
== Общие параметры ==<br />
Смотреть описание [[Object|Object]].<br />
== Основные параметры ==<br />
*'''res''' ('' res '') - Графический ресурс для отображения цифр ([[Интерфейс_ResourceEditor|анимированный клип]] из 10 фреймов: первый фрейм - 0, последний 9). Перетаскивается мышкой из редактора ресурсов.<br />
*'''min''' ('' min '') - Минимальное значение счетчика.<br />
*'''max''' ('' max'') - Максимальное значение счетчика.<br />
*'''val''' ('' val '') - Начальное (текущее) значение счетчика.<br />
*'''val2''' ('' val2 '') - Дополнительное значение счетчика. Только для время == 2.<br />
*'''new_val''' ('' new_val '') - Новое значение. Будет записано в val при вызове состояния save.<br />
*'''шаг (inc, dec)''' ('' dval '') - Величина, на которую изменяется счетчик при inc и dec ( min=1) ( если меняем значение во вьювере, после задания значения - инитим счётчик).<br />
*'''dx между цифрами''' ('' digShift '') - Расстояние между цифрами.<br />
*'''выравнивание''' ('' left ''):<br />
:'''1''' - число будет выравниваться по левому краю (цифры числа сдвигаются слева направо); <br />
:'''2''' - будет выравниваться по центру;<br />
:'''0''' - выравнивание по правому краю.<br />
*'''время''' ('' time ''):<br />
:'''1''' - число будет считаться временем в секундах и отображаться в виде mm:ss. Двоеточие должно быть 11 кадром графического ресурса;<br />
:'''2''' - будет отображаться разделитель и второе значение из поля val2, разделитель также из 11 кадра графики;<br />
:'''0''' - будет отображенно число без форматирование во временную единицу.<br />
'''Группа - времена''':<br />
:'''невидимости''' ('' tmBeg '') - Время невидимости перед открытием;<br />
:'''открытия''' ('' tmOpn '') - Время проявления от полной прозрачности к прозрачности, заданной в модификаторах;<br />
:'''закрытия''' ('' tmCls '') - Время исчезания до полной прозрачности;<br />
:'''изменения''' ('' tmChg '') - Время, за которое счетчик изменяется (inc, dec);<br />
:'''шага изменения''' ('' tmChgIt '') - Скорость, с которой счетчик изменяется (inc, dec).<br />
:'''скорость изменения''' ('' velChg'') - Время промежутков, через которые происходит обновление счетчика при изменении (inc, dec).<br />
*'''сохранять в профиль''' ('' prof ''):<br />
:'''1''' - значение будет сохранено в текущий профиль;<br />
:'''0''' - сохранено глобально.<br />
*'''игра''' ('' game '') - Имя игры (раздела в опциях), который надо вычитать для получения начального значения счетчика (например, для отображения результатов).<br />
*'''уровень''' ('' level '') - Имя уровня (параметра в разделе игра - см.выше), который надо вычитать для получения начального значения счетчика (например, для отображения результатов). Раздел равен: game.level.<br />
<br />
*'''Группа - шрифт''':<br />
:'''имя''' ('' fn ''):<br />
::'''число, начиная с 0''' - порядковый номер шрифта (чтобы отобразился шрифт, нужно каунтеру задать ресурс (res), ресурс во вьювере отображён не будет);<br />
::'''-1''' - рисовать каунтер клипами.<br />
:'''размер''' ('' fs '') - Размер шрифта в пикселях;<br />
:'''цвет 1''' ('' fc '') - Цвет текста.<br />
<br />
Счетчкик может отображать отрицательные чиста. Если для отображения используется графика, то 11-ым кадром в анимации должен быть символ "минус", а если счетчик отображается шрифтом, то можно указать цвет отрицательных чисел.<br />
<br />
== Добавляемые параметры ==<br />
<br />
<br />
[[Файл:Counte_1.png|right]]<br />
Меню выбора ''Добавляемые параметры'' к объектам активируется по нажатию правой кнопки мыши.<br />
<br />
<br />
[[Файл:+.png]] '''dec: при уменьшении изменить объект''' ('' decChg '') - При уменьшении значения счетчика, изменить объект:<br />
*'''объект''' ('' obj '') - При уменьшении значения счетчика, изменить этот объект;<br />
*'''состояние''' ('' obj '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' st '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела dec''' ('' decIf '') - Условие при выполнении которого происходят изменения из раздела dec. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' val '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''dec: при уменьшении изменить объект''';<br />
:'''0''' - если условие выполняется, работает '''dec: при уменьшении изменить объект'''.<br />
<br />
<br />
[[Файл:+.png]] '''при опускании под min изменить объект''' ('' minChg '') - При уменьшении значения счетчика ниже min, изменить объект:<br />
*'''объект''' ('' obj '') - При уменьшении значения счетчика ниже min, изменить этот объект;<br />
*'''состояние''' ('' st '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' val '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела min''' ('' minIf '') - Условие при выполнении которого происходят изменения из раздела min. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' buy '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''при опускании под min изменить объект''';<br />
:'''0''' - если условие выполняется, работает '''при опускании под min изменить объект'''.<br />
<br />
<br />
[[Файл:+.png]] '''inc: при увеличении изменить объект''' ('' incChg '') - При увеличении значения счетчика, изменить объект:<br />
*'''объект''' ('' obj '') - При уменьшении значения счетчика, изменить этот объект;<br />
*'''состояние''' ('' st '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' val '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела inc''' ('' incIf '') - Условие при выполнении которого происходят изменения из раздела inc. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' buy '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''inc: при увеличении изменить объект''';<br />
:'''0''' - если условие выполняется,работает '''inc: при увеличении изменить объект''';<br />
<br />
<br />
[[Файл:+.png]] '''при превышении max изменить объект''' ('' maxChg '') - При увеличении значения счетчика более max, изменить объект:<br />
*'''объект''' ('' obj '') - При увеличении значения счетчика более max, изменить этот объект;<br />
*'''состояние''' ('' st '') - Состояние в которое переводится объект;<br />
*'''параметр''' ('' par '') - Параметр, который мы изменяем; <br />
*'''значение''' ('' val '') - Новое значение параметра.<br />
<br />
<br />
[[Файл:+.png]] '''условие при котором происходят изменения из раздела max''' ('' maxIf '') - Условие при выполнении которого происходят изменения из раздела max. Их может быть несколько (логический AND):<br />
*'''объект''' ('' obj '') - Объект, свойства которого мы проверяем;<br />
*'''состояние''' ('' st '') - Находится ли в этом состоянии объект;<br />
*'''параметр''' ('' par '') - Имеет ли объект параметр в значении следующего поля; <br />
*'''значение''' ('' val '') - Имеет ли объект параметр из следующего поля в этом значении;<br />
*'''куплено''' ('' buy '') - Имя фичи для проверки её купленности;<br />
*'''нет''' ('' not '') : Это условие должно не выполняться:<br />
:'''1''' - если условие не выполняется, работает '''при превышении max изменить объект''';<br />
:'''0''' - если условие выполняется,работает '''при превышении max изменить объект''';<br />
<br />
== Состояния ==<br />
<br />
Объект '''Counter''' обладает рядом состояний:<br />
*'''dec''' - Уменьшить значение счетчика на 1;<br />
*'''inc''' - Увеличить значение счетчика на 1;<br />
*'''min''' - Установить счетчик в минимальное значение;<br />
*'''max''' - Установить счетчик в максимальное значение;<br />
*'''init''' - Переинициализировать счетчик;<br />
*'''reset''' - Переустановить счетчик;<br />
*'''read''' - Прочитать значение счетчика из опций;<br />
*'''read_anim''' - Прочитать значение счетчика из поля в опциях; При этом: воспринимает параметры tmChg, tmChgIt, velChg. Это значит, что счетчик при передаче ему этого состояния, "прокручивает" графику до значения, считанного из опций. Это заменяет используемую связку последовательного изменения dval, передачи init и inc.<br />
*'''save''' - Сохранить значение счетчика в опции.<br />
<br />
== Пример ==<br />
<br />
<br />
В качестве графического ресурса в счетчик перетаскивается анимационный клип из 10 кадров<br />
с цифрами от 0 до 9 (кадров может быть больше, но первые 10 - это цифры). Диапазон изменения задается в полях '''min''', '''max'''. Начальное значение в поле '''val'''. Счетчик можно увеличивать или уменьшать, меняя ему состояния '''inc''' (увеличить на 1) и '''dec''' (уменьшить на 1).<br />
<br />
Рассмотрим пример использования. Пусть есть счетчик и четыре кнопки. При помощи клика правой кнопки мыши, добавим каждой кнопке раздел "изменить состояние объекта", в котором при нажатии на кнопку будет вызываться состояние счетчика '''dec''', '''inc''', '''min''', '''max''' соответственно.<br />
<center><br />
[[Файл:test_cnt_1.png]]<br />
</center><br />
В результате, при клике на кнопку '''inc''' будет происходить увеличение цифр 0 до 30 . После достижения максимальной границы, равной 30, счетчик перестанет увеличиваться. Аналогично, при клике на кнопку '''dec''', можно уменьшить значения счетчика. Клик на кнопку '''min''' и '''max''' переводят значение счетчика в минимальное и максимальное значение соответственно.<br />
<br />
По умолчанию, разряды числа счетчика сдвигаются справа налево от его положения в редакторе (неподвижен правый край числа). Если в свойствах счетчика поле "'''выравнивание'''" установить в 1, то неподвижным будет левый край. При значении этого параметра 2, неподвижным будет центр числа. Параметр "'''dx между цифрами'''" задает дополнительное расстояние между цифрами в числе (если он меньше нуля, цифры будут ближе).<br />
<br />
<br />
'''Прямое изменение значения.'''<br />
<br />
Значение счетчика можно изменить напрямую, например, их машины состояний:<br />
<pre><br />
st = "wait" <br />
{<br />
click { go="change" } // при клике - идем в состояние "change"<br />
}<br />
<br />
st = "change" <br />
{<br />
set { obj=counter par="val" val="5" } // меняем значение счетчика<br />
set { obj=counter st="reset" } // переустанавливаем его<br />
wait{ go="wait" }<br />
}<br />
</pre> <br />
При клике на машину, она переходит в состояние "change". <br />
В этом состоянии устанавливается параметр счетчика '''val''' в значение 5, после чего он перезапускается, переводясь в состояние "'''reset'''" (параметр '''val''' является строковым и счетчику его нужно перечитать, что и делается в состоянии "reset"). Аналогично счетчик можно было бы перевести в состояние "init", но тогда он бы полностью переинитился (обновились бы все его параметры из начальных настроек). В состоянии "reset" обновляется только поле "val".<br />
<br />
<br />
'''Достижение границ.'''<br />
<br />
Пусть после серии уменьшений счетчика (состояния "dec") он достиг минимального значения '''min''' и попытался снизиться ниже. Этого не произойдет (ограничения не дают выйти за них).<br />
При достижении границ счетчика можно изменить состояния или параметры других объектов.<br />
Для этого необходимо в свойствах при помощи правой кнопки мыши добавить раздел:<br />
<br />
[[Файл:+.png]] '''при опускании под min изменить объект''':<br />
:'''объект''' - При уменьшении значения счетчика ниже min, изменить этот объект;<br />
:'''состояние''' - Состояние в которое переводится объект;<br />
:'''параметр''' - Параметр, который мы изменяем;<br />
:'''значение''' - Новое значение параметра.<br />
<br />
При изменении параметра переинициализировать объект не надо (это произойдет автоматически).<br />
<br />
Подобных разделов может быть несколько. Если счетчик стал равным минимальному значению,<br />
а его продолжают пытаться уменьшить, каждый раз будет вызываться изменение состояний (параметров) из этих разделов.<br />
<br />
Пусть к примеру, разрешено 3 раза нажать на некоторую кнопку (например, хинт в игре). После 3-х изменений должно появляться окно с надписью "подсказки кончились" с кнопкой "close". При закрытии окна и повторной попытке нажать на кнопку, окно должно появляться снова.<br />
Это можно сделать при помощи счетчика, двух кнопок, и машины состояний в виде окна (верхняя таблица справа - это машина состояния окна, ниже - свойства кнопки и счетчика):<br />
<center><br />
[[Файл:counter3a.png]]<br />
</center><br />
<br />
<br />
'''Значение из options.'''<br />
<br />
Начальное значение счетчика можно задавать не только в редакторе (поле '''val'''), но и получать его сохраненное значение в [[Options|опциях игры]]. Пусть некоторая миниигра сохранила в опциях целое значение в переменной, например, с именем "scores". Тогда это значение будет присвоено счетчику, если в настройках счетчика в поле "уровень" написать "scores".<br />
<br />
Если помимо поля "уровень" задано поле "игра", то значение для счетчика будет искаться<br />
не в глобальных параметрах опций, а в разделе, определяемом полем "игра".<br />
Если строка в поле "игра" разделено точками, то они определяют подразделы.<br />
Так, если "уровень"="scores", а "игра"="puzzle.pack1", а xml файл options.xml <br />
будет выглядеть примерно так:<br />
<pre><br />
<obj nm="options" ><br />
<puzzle><br />
<pack1 scores="3" /><br />
</puzzle><br />
</obj><br />
</pre><br />
то начальное значение счетчика будет равно 3. Если такого раздела или поля не окажется,<br />
то счетчик будет невидимым.<br />
<br />
Напомним, что объект [[Options]] в игре существует в единственном экземпляре и должен находиться на экране, помеченном как глобальный.<br />
<br />
[[Category:Main objects]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Machine&diff=6898Machine2015-03-10T07:55:53Z<p>Odyadina: /* Условия */</p>
<hr />
<div>{{TOC right}}<br />
[[Machine]] - [[Object|объект]] '''машина состояний''' (state machine) позволяет описывать сложное поведение игровых объектов. Для машин с типовым набором состояний и поведений вводятся отдельные типы объектов. Например, кнопка, по своей сути, является машиной состояний.<br />
<br />
== Введение ==<br />
<br />
Логика поведения машины разбивается на отдельные узлы (состояния). Машина всегда находится строго в одном состоянии. Переход из одного состояния в другое происходит либо в результате внешнего воздействия на машину, либо в результате окончания некоторых процессов протекающих внутри неё<br />
<br />
Любая машина состояний может быть изображена в виде графа с кружочками и стрелками. У машины всегда активно строго одно состояние (ниже это изображено на левом рисунке темным кружком):<br />
<center><br />
[[Файл:def_states.png]]<br />
</center><br />
Машина состояний не обладает памятью. Это означает, что для анализа того, что произойдет в данном состоянии, неважно как мы в него попали, и какова была предыстория переходов. Важно, только, что мы находимся в этом состоянии. Такое отсутствие памяти упрощает анализ логики машины, так как каждый раз мы концентрируемся на одном конкретном состоянии, а всю логику работы разбиваем на отдельные кирпичики-состояния.<br />
<br />
Выше на правом рисунке изображено некоторое состояние. При входе в него, происходит инициализация состояния. Если на объект оказываются внешние воздействия, то он может покинуть состояние. Наконец, внутри состояния могут работать различные процессы.<br />
<br />
Все команды состояния, разбиваются на три группы:<br />
* '''[[#Инициализация|Инициализация]]''':<br />
** '''[[#draw|draw]]''' - установка графического ресурса;<br />
** '''[[#init|init]]''' - инициализация параметров машины (координаты и т.п.);<br />
** '''[[#set|set]]''' - установка состояния другого объекта;<br />
** '''[[#play|play]]''' - проиграть звук;<br />
** '''[[#var|var]]''' - переменная, которой присваивается значение параметра объекта;<br />
** '''[[#buy|buy]]''' - запуск процедуры in-app покупки;<br />
** '''[[#download|download]]''' - запуск процедуры закачки контента.<br />
* '''[[#Процессы|Процессы]]''':<br />
** '''[[#wait|wait]]''' - задержка по времени;<br />
** '''[[#move|move]]''' - равномерное движение;<br />
** '''[[#rot|rot]]''' - вращение вокруг точки пивота;<br />
** '''[[#alpha|alpha]]''' - изменение прозрачности;<br />
** '''[[#scale|scale]]''' - изменение размера;<br />
** '''[[#phys|phys]]''' - ускоренное движение;<br />
** '''[[#rgb|rgb]]''' - изменить rgb-каналы;<br />
** '''[[#spline|spline]]''' - движение по сплайну (по кривой).<br />
* '''[[#Воздействия|Воздействия]]''':<br />
** '''[[#click|click]]''' - что делать при клике на машине;<br />
** '''[[#drop|drop]]''' - на машине отпущена клавиша мыши;<br />
** '''[[#drag|drag]]''' - машину схватили и тащат;<br />
** '''[[#throw|throw]]''' - машину схватили и кинули;<br />
** '''[[#apply|apply]]''' - сработает при пересечении машины с линией или объектом;<br />
** '''[[#touch_in|touch_in]]''' - наведение мыши/пальца на машину, если палец "тащат" по экрану;<br />
** '''[[#touch_out|touch_out]]''' - выведение мыши из машины, если палец "тащат" по экрану;<br />
** '''[[#touch_up|touch_up]]''' - отжатие мыши от машины;<br />
** '''[[#tap|tap]]''' - умный тач;<br />
** '''[[#mouse_in|mouse_in]]''' - наведение мыши на машину даже если не нажата кнопка мыши;<br />
** '''[[#mouse_out|mouse_out]]''' - выведение мыши из машины даже если не нажата кнопка мыши.<br />
<br />
Кроме этого, есть команда '''[[#if|if]]''', вызываемая другими командами. В ней описываются некоторые логические условия, выполнение которых говорит команде (которая вызвала этот '''if'''), что можно завершать работу. Для разных команд использование этого параметра несколько '''отличается'''!<br />
<br />
Начальные понятия и методы работы с машинами состояний находятся в [[Learning|уроках]],<br />
начиная с [[Checkbox как машина состояний|третьего]].<br />
<br />
== Свойства ==<br />
<br />
Общие для всех объектов свойства описаны в документе [[Object|Object]].<br />
Дополнительные свойства:<br />
<br />
* '''в опции''' - да - машина будет сохранять свое состояние в опции и при следующей инициализации инициал-ся не в первом состоянии, а в состоянии, записанном в опциях.<br />
* '''Состояние''' - Состояние в котором будет находиться машина при инициализации. Если ничего не указано - первое состояние в списке состояний.<br />
* '''Хранить нажатость''' - нужно ли сбрасывать нажатость при изменении состояния.<br />
* '''res''' - графический ресурс машины. Может отсутствовать. Перетягивается из редактора ресурсов(поле должно быть в состоянии редактирования).<br />
* '''states''' - По двойному клику, или по нажатию на кнопку с тремя точками открывается список состояний.<br />
* '''отладка''' - Отображать в окне состояний текущий объект.<br />
* '''курсор''' - Графический ресурс курсора текущего и всех дочерних объектов.<br />
* '''прокликиваемая''' - 0 - машина не пропускает клик, 1 - машина пропускает клик, 2 - машина обрабатывает клик и пропускает его дальше.<br />
<br />
== Инициализация ==<br />
<br />
При попадании в состояние, сразу выполняются команды инициализации init, draw, set, buy, var. Если в этих командах нет параметра break, они все выполняются до запуска процессов. Параметр break (со значением 1) прерывает выполнение команд инициализации данного типа. Их можно перезапустить по окончанию команд процессов.<br />
<br />
'''''Замечание.''''' По возможности, нужно избегать передачи значений другим объектам, в начальном состоянии машины, так как такие команды будут выполнятся даже тогда, когда машина будет выключена на визуальной сцене.<br />
<br />
=== draw ===<br />
<br />
Команда определяет графический ресурс (картинку, которую надо рисовать в данном состоянии). Её параметры:<br />
<br />
* '''res''' - ресурс картинки (перетаскивается из редактора ресурсов);<br />
* '''f''' - начальный кадр;<br />
* '''ft''' - длительность кадра в миллисекундах;<br />
* '''loop''' - число повторов (зацикливаний анимации); если -1, то бесконечно; отсутствует или 0 - будет проигран один раз;<br />
* '''rev''' - играть анимацию в обратном порядке; 0 - прямой порядок проигрывания, 1 - обратный порядок проигрывания;<br />
* '''go''' - перейти в состояние;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]] для условия перехода; можно использовать логические операторы (см. [[#if|if]]);<br />
* '''break''' - прервать команды.<br />
<br />
Пустая команда draw (без параметров) "сбрасывает" текущую картинку и в этом состоянии ничего рисоваться не будет. Если в общих параметрах объекта (в базовой панеле свойств) задан ресурс рисования, и он во всех состояниях одинаков, то его можно в состоянии не задавать.<br />
<br />
Если параметра loop нет, кадры анимации проиграются один раз. Чтобы зациклить их, необходимо установить loop=-1 или нужное число раз. Аналогично параметру loop других команд, первый раз draw выполняется в любом случае. Дальнейшие её повторы определяются значением loop. Однако, в отличие от других команд, loop повторяет только '''данную''' команду draw (даже если она не первая).<br />
Для работы loop '''необходимо''' чтобы в редакторе ресурсов в настройках анимации '''было отключено''' зацикливание(looped).<br />
<br>Если есть анимация открывающейся и закрывающейся книги (коробки, двери и т.д.) не обязательно подгружать в проект две анимации, можно использовать одну, но запускать ее в обратном порядке, для этого есть параметр '''rev'''.<br />
<br />
=== init ===<br />
<br />
====Параметры объекта====<br />
<br />
* '''x''','''y''' - координата точки пивота относительно сцены или родительского объекта;<br />
* '''ang''' - угол поворота в градусах; отчитывается вниз от оси x, или вверх, если отрицательный;<br />
* '''al''' - Прозрачность: от 0 (прозрачен) до 1 (не прозрачен);<br />
* '''sx''','''sy''' - масштаб машины по осям (если 1, то это исходный размер; 0.5 - в два раза меньше);<br />
* '''vis''' - видимость - видимость машины (1 - видима, 0 - невидима), если vis = 0, это равноценно отключению объекта в редакторе;<br />
* '''z координата''' - координата машины по z.<br />
* '''z приращение''' - приращение координаты машины по z относительно текущего<br />
* '''прокликиваемая''' - если 1, то картинка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то клик обрабатывается, но передается дальше;<br />
<br />
====Параметры движения====<br />
<br />
* '''v''' - скорость для команды move<br />
* '''vr''' - угловая скорость для команды rot<br />
* '''vx''','''vy''' - начальная скорость для команды phys<br />
* '''ax''','''ay''' - ускорение для команды phys<br />
<br />
====Системные действия====<br />
<br />
* '''показать рейтинг''' - значение 1 означает, что при выполнении этого инита будет показано окно iOS рейтинга.<br />
Если на девайсе была нажата кнопка "отрейтинговать", то в опции запишется параметр rating значение 1, если нажата кнопка "позже" - rating 2, "никогда" - rating 3.<br />
* '''закрыть приложение''' - значение 1 означает, что при выполнении этого инита приложение будет закрыто.<br />
* '''перезагрузить лэйаут''' - значение 1 означает, что при выполнении этого инита будет перезагружен лэйаут.<br />
* '''вернуться назад''' - начение 1 означает, что при выполнении этого инита произойдет возврат на предыдущий экран.<br />
* '''реклама AdMob''' - 1 - показать, 0 - спрятать, -1 - не изменять состояние.<br />
* '''курсор''' - меняет текущий курсор мыши на указанный графический ресурс. Перетягивается из редактора ресурсов, поле должно быть в состоянии редактирования.<br />
* '''id внешней ссылки в текстовой базе''' - Ссыслка будет взята из текстовой базы в соответствии с текущим маркетом.<br />
* '''[[#Clone|clone]]''' - Значение 1 означает, что в текущем местоположении машины будет создана ее копия<br />
<br />
====Переходы и параметры выполнения====<br />
<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]] для условия выполнения; можно использовать логические операторы (см. [[#if|if]]);<br />
* '''break''' - прервать команды.<br />
<br />
Так же, как и при инициализации картинки ('''draw'''), вызов команды ('''init''') переопределяет только те параметры, которые в ней указаны. Остальные параметры (заданные в других состояниях или в общих свойствах объекта) остаются без изменений<br />
<br />
=== set ===<br />
<br />
Перевод другого объекта в некоторое состояние или изменение его параметров.<br />
<br />
* '''obj''' - изменяемый объект (выбирается из списка объектов). В значении объекта можно указать this, это значит что машина сама себе пропишет какой то параметр или состояние.<br />
* '''scr_param''' - глобальный либо текущий экран, параметры которого меняем.<br />
* '''scr_state''' - экран, состояние которого меняем.<br />
* '''parent''' - Объект, который будет установлен в качестве родителя объекту из obj. Объект obj будет оторван от текущего своего родителя и добавлен в детей объекта parent.<br><br />
* '''st''' - состояние в которое переводится объект.<br><br />
* '''par''' - параметр объекта для установки, используется вместе с val, val_obj, val_txt, val_scr,val_vid,val_res,val_node.<br />
* '''mSt''' - Состояние машины в котором будем изменять параметр команды.<br />
* '''mCmd''' - Имя команды, параметр которой меняем.<br />
* '''mCmdN''' - Порядковый номер в перечне одноименных команд состояния.<br />
* '''mPar''' - Установить этот параметр команды в значение val.<br />
* '''val_obj''' - id объекта, будет записано в в par<br />
* '''val_txt''' - id текста, будет записано в в par(параметр для текстов "txtID")<br />
* '''val_vid''' - id video, будет записано в par(параметр для видео "video" - RGB, "videoA" - Alpha)<br />
* '''val_scr''' - id экрана, будет записано в в par<br />
* '''val_res''' - Новое значение графического ресурса (перетаскивается из редактора ресурсов). (пока не работает)<br />
* '''val_node''' - Новое нода графа (выбирается из списка, при заданном объекте)<br />
* '''val''' - значение параметра объекта для установки<br />
* '''var''' - имя переменной данной машины, значение которой присваивается в параметр par объекта obj<br />
* '''round''' - округлить значение, записываемое в val<br><br />
* '''position''' - объект указанный в поле '''obj''' будет отпозиционирован относительно указанного объекта в этом поле ( можно одновременно и задавать состояние '''st''' в которое перевести объект ( поле obj ) ); <br />
* '''pos_dx''' - смещение по оси X от точки пивоты объекта из поля выше ( если это поле не указывать, смещение будет = 0 );<br />
* '''pos_dy''' - смещение по оси Y от точки пивоты объекта из поля выше ( если это поле не указывать, смещение будет = 0 )<br />
* '''scr''' - экран на который мы хотим перейти<br />
* '''user''' - 1 - сохранять значения для текущего пользователя. Для всех типов объектов кроме options этот флаг игнорируется<br><br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]] при выполнении которого происходит отработка команды set. <br />
* '''break''' - прервать выполнение команд set на этой команде (запустить их снова можно из команд процессов).<br />
<br />
Так как все объекты (не только машины) имеют состояния, то при помощи команды set можно их менять. Стоит обратить внимание на то, что когда в параметрах (любых команд) встречается st, речь идет о состоянии другого объекта, а если go, то данной машины состояний.<br />
<br />
=== play ===<br />
<br />
Проиграть звук.<br />
<br />
*'''snd''' - короткий звук (перетаскивается из редактора ресурсов);<br />
*'''voice''' - голос (запускается как звук, но без цикла и с громкостью голоса) (перетаскивается из редактора ресурсов);<br />
*'''mus''' - длинный звук (перетаскивается из редактора ресурсов);<br />
*'''preload''' - указанный звук будет загружен в память, но не будет проигрываться прямо сейчас. Для ускорения его старта потом;<br />
*'''loop''' - зациклить звук (звуки);<br />
*'''mus_loop''' - позволяет выбрать зацикливать музыку или нет.По умолчанию установлено "да".<br />
*'''repeat''' - Число повторов выбранного звука при отключенном loop;<br />
*'''mus_stop''' - остановить текущую музыку (''mus_stop=1'');<br />
*'''stop''' - остановить указанный в поле snd звук или голос. Для затухания используется fadeout.<br />
*'''mus_fading''' - Время затухания предыдущей мелодии в ms. Использовать совместно с mus.<br />
*'''volume''' - установить громкость для всех звуком данной машины - тех что уже играют и тех, что будут запущены впоследствии;<br />
*'''не выгружать''' - позволяет продолжать проигрывание звука при смене экранов.<br />
*'''go''' - выбор состояния, в которое нужно перейти после проигрывания музыки/звука/голоса.<br />
*'''if''' - номер (начиная с нуля) условия перехода [[#if|if]].<br />
<br />
Особенности применения:<br />
<br />
*Короткий звук (''snd'') нельзя запустить в первом (инитном) состоянии машины. Для того, чтобы запустить звук сразу при загрузке экрана, нужно в первом состоянии машины записать мгновенный переход во второе состояние мамашины (например, команда ''wait'', поле ''go'', в поле выбрать второе состояние), а во втором состоянии уже запустить звук. Если звук нужно зациклить и проигрывать какое-то количество раз (''loop=1,2,3,..,n'') или бесконечно (''loop=-1''), то нужно проследить чтобы состояние, в котором запускается звук, не вызывалось повторно во время проигрывания звука, иначе возникнет наложение звуков. Если во время проигрывания звука машина меняет свое состояние, звук продолжает играть. Если в одной машине почти одновременно воспроизводится несколько звуков, то они прерывают друг друга. Если каждый звук воспроизводится в отдельной машине, то они звучат параллельно.<br />
*Длинный звук (''mus'')- музыка. На экране не может воспроизводится несколько длинных звуков одновременно. Любой запуск длинного звука независимо от того, в какой машине он осуществляется, будет прекращать проигрывание предыдущего звука. Музыка, которая проигрывается на глобальном экране, проигрывается на всех экранах проекта.<br />
*'''stop''' - если не указан звук и голос, то команда остановит все звуки, запущенные этой машиной.<br />
<br />
=== var ===<br />
<br />
Переменная, которой присваивается значение параметра объекта<br />
<br />
*'''name''' - имя переменной;<br />
*'''tp''' - тип переменной;<br />
*'''obj''' - объект, используемый далее;<br />
*'''par''' - имя параметра, значение которого присваивается переменной;<br />
*'''val''' - значение переменной, если отсутствуют obj и par;<br />
*'''user''' - если стоит "1", то будет считываться с текущего профиля в опциях<br />
*'''func''' - в выпадающем списке можно выбрать функцию:<br />
**'''random''' - использует arg1 и arg2, возвращает случайное целое число в диапазоне arg1 .. arg2.<br />
**'''conc''' - объединяет 4 строки arg1,arg2,arg3,arg4. Возвращает строку, в которой соединены все строки<br />
**'''exp''' - экспонента от аргумента arg1.<br />
**'''ln''' - натуральный логарифм аргумента arg1.<br />
*'''arg1''' - аргумент функции<br />
*'''arg2''' - аргумент функции<br />
*'''arg3''' - аргумент функции<br />
*'''arg4''' - аргумент функции<br />
<br />
Обозначенная переменная существует (может использоваться) только в текущем состоянии. Переменная может определятся в одном состоянии только один раз. Если созданной переменной нужно изменить значение в рамках состояния, это можно сделать через другую переменную или через параметр опций ([[Options]]). Если ее значение нужно использовать в другом состоянии, то оно присваивается параметру опций, а затем заново считывается в новом состоянии. Переменные можно указывать в поле ''val'' с другими математическими действиями и цифрами, при этом каждое действие заключать в скобки. Если в поле ''val'' указать имя переменной ''А'' без скобок - воспримется строка ''А'', если указать в скобках - воспримется значение переменной.<br />
<br />
=== buy === <br />
<br />
'''(in-app совершить in-app покупку)'''<br />
<br />
При переходе в состояние, данная команда открывает системное окно с предложением совершить in-app покупку. В зависимости от действий игрока, покупка может произойти (успех) или не произойти (провал).<br />
<br />
* '''id покупки''' - внутренний id покупки для приложения, указывается в объекте [[Store]];<br />
* '''объект(успех)''' - объект, которому сообщается об удачной покупке;<br />
* '''состояние(успех)''' - состояние в которое переводится выбранный объект в случае успешной покупки;<br />
* '''объект(провал)''' - объект, которому сообщается о неудачной покупке;<br />
* '''состояние(провал)''' - состояние в которое переводится объект в случае неудачной покупки.<br />
<br />
=== download ===<br />
<br />
'''(скачать загружаемый контент)'''<br />
<br />
При переходе в состояние будет совершена попытку закачать контент.<br />
* '''url''' - ссылка на zip архив с контентом в интернете.<br />
* '''объект успех''' - объект, которому в случае успешной закачки будет задаваться указанное состояние.<br />
* '''состояние (успех)''' - состояние, которое будет устанавливаться выше указанному объекту, в случае успешной закачки.<br />
* '''объект (провал)''' -объект, которому, в случае неудачи закачки, будет устанавливаться указанное состояние.<br />
* '''состояние (провал)''' - состояние, которое, в случае неудачи закачки,будет устанавливаться выше указанному объекту.<br />
* '''счетчик прогресса''' - объект, типа счетчик, который отображает прогресс закачки контента. Крайне желательно, что бы он измерялся в диапазоне от 0 до 100.<br />
<br />
Существует несколько причин при которых вызывается состояние "провал". Для того что бы сообщить пользователю, по какой именно причине возник провал закачки, следует идентифицировать причины провала. Это возможно сделать с помощью параметра <br />
<pre><br />
downloadErrCode<br />
</pre><br />
Ниже приведены значение параметра которые помогут вывести нужное текстовое сообщение :<br />
<pre><br />
GCUSTOM_ERROR_CODE_ERROR_UNKNOWN = 1, //!< ошибка не классифицирована<br />
GCUSTOM_ERROR_CODE_WIFI_DISABLED = 2, //!< отключен WIFI<br />
GCUSTOM_ERROR_CODE_SDCARD_UNAVAILABLE = 3, //!< SD-карта недоступна<br />
GCUSTOM_ERROR_CODE_SDCARD_FULL = 4, //!< SD-карта переполнена перед закачкой<br />
GCUSTOM_ERROR_CODE_UNZIP_FAIL = 5 //!< ошибка при распаковки пака (скорее всего на SD-карте не<br />
хватает места для распаковки <br />
</pre><br />
<br />
== Процессы ==<br />
<br />
Все команды процессов, кроме параметров описанных ниже, могут содержать параметры, совпадающие с именами других команд. В этих параметрах указывается номер (начиная с нуля) команды, которую надо запустить на выполнение, после окончания действия данной команды процесса.<br />
<br />
Если в команде процесса есть условие '''[[#if|if]]''', то после окончания работы команды она ждет пока это условие не выполнится. Только после этого переходит к следующей команде этого же типа<br />
или в другое состояние (если есть параметр go).<br />
Исключением является команда wait, которая '''не''' ждёт срабатывания '''[[#if|if]]'''. Если он по окончанию wait сработал, то происходит переходит в другое состояние, если есть параметр go.<br />
Если параметра go нет, то в любом случае запускается следующий wait (т.е. if относится только к переходу go).<br />
<br />
=== wait ===<br />
<br />
Команда паузы (временной задержки). Если параметра '''t''' нет, то срабатывает сразу.<br />
Может также использоваться для логических ветвлений, случайных переходов в другие состояния и т.д.<br />
<br />
* '''t''' - длительность выполнения команды в ms;<br />
* '''dt''' - интервал от t-dt до t+dt, внутри которого команда может быть случайно прервана (при t>t+dt прерывается в любом случае);<br />
* '''p''' - вероятность срабатывания перехода в состояние, указываемое параметром go;<br />
* '''go''' - состояние, в которое нужно перейти поле окончания времени и срабатывания условия [[#if|if]], если оно указано;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;<br />
* '''loop''' - зациклить команды;<br />
* '''break''' - прервать выполнение команд wait на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
Простейший набор параметров команды wait выглядит следующим образом:<br />
<pre><br />
<wait t="1000" go="next"/> // ждем 1000ms и покидаем состояние<br />
</pre><br />
Для программирования объектов со случайным поведением можно использовать последовательность команд wait с параметром вероятности перехода p (от 0 до 1):<br />
<pre><br />
<wait t="100" p="0.5" go="st1"/> // через t с вероятностью 1/2 перейдет в st1<br />
<wait go="st2"/> // иначе, перейдем в st2<br />
</pre><br />
Этот же синтаксис позволяет делать состояния с различным временем жизни:<br />
<pre><br />
<wait t="100" p="0.5" go="next"/> // с вероятностью 1/2 живем 100ms<br />
<wait t="100" go="next"/> // или 200ms<br />
</pre><br />
Впрочем, последнюю задачу можно решить при помощи указывания интервала dt, внутри которого произойдет окончание команды. Так, состояние, живущее от 800 до 1200ms, реализуется следующим образом:<br />
<pre><br />
<wait t="1000" dt="200" go="next"/><br />
</pre><br />
<br />
=== move ===<br />
<br />
Перемещение по сцене:<br />
* '''tx''', '''ty''' - целевые координаты в пикселях, к которым должен переместиться объект. Можно указывать переменные заданные с помощью [http://ge.absolutist.com/index.php/Machine#var_2 переменной var];<br />
* '''dx''', '''dy''' - величина смещения от текущей (если есть - tx,ty игнорируются); можно задавать смесь tx, dy или dx,ty;<br />
* '''v''' - скорость перемещения в пикселях в секунду; для фреймовой анимации, например, ходьбы скорость рассчитывается исходя из длительности одного кадра и числа кадров на фазу движения. Поэтому, в этом случае, удобнее задавать скорость;<br />
* '''t''' - время перемещения (v игнорируется);<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду move, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд движения с первой команды;<br />
* '''break''' - прервать команды - Прервать выполнение команд move на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
В большинстве команд процессов, связанных с движением, величина изменения может быть задана в абсолютных или относительных величинах. Так, могут быть указаны целевые координаты tx, ty в которые надо переместиться, или смещение dx, dy относительно текущего положения объекта.<br />
<br />
Аналогично, скорость перемещения регулируется, либо явным заданием времени выполнения команды t, либо скоростью v. Исходя из требуемого расстояния, по этой скорости вычисляется необходимое время. Скорость задается в пикселях за секунду (а не миллисекунду!)<br />
<br />
=== rot ===<br />
<br />
Вращение объекта вокруг точки пивота с координатами px,py. Эти координаты задаются относительно верхнего левого угла объекта в общей секции описания параметров объекта или командой init в данном состоянии.<br />
* '''ta''' - целевой угол поворота объекта;<br />
* '''da''' - на сколько надо повернуться (ta игнорируется);<br />
* '''v''' - угловая скорость поворота в градусах в секунду;<br />
* '''t''' - время поворота (v игнорируется);<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду rot, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд движения с первой команды;<br />
* '''break''' - прервать команды - Прервать выполнение команд rot на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
Угол отсчитывается от оси x. Если он положителен, то поворот происходит по часовой стрелке. Если отрицательный - против часовой.<br />
<br />
=== alpha ===<br />
<br />
Изменение прозрачности объекта. Меняется от 0 (полностью прозрачен) до 1 (непрозрачен)<br />
* '''ta''' - целевая прозрачность<br />
* '''da''' - на сколько надо изменить прозрачность от текущей (ta игнорируется)<br />
* '''v''' - скорость изменения прозрачности (в долях единицы в ms)<br />
* '''t''' - время изменения (v игнорируется)<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду alpha, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд alpha с первой команды.<br />
* '''break''' - прервать команды - Прервать выполнение команд alpha на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
Если у объекта прозрачность ''al=0.00'', то он невидим для всякого взаимодействия. Если у объекта прозрачность ''al=0.01'', то он видим для клика, но невидим для дропа(команда drop на объект не видит объект с прозрачностью ''0.01''). Если у объекта ''al=0.02'', то он видим и для клика, и для дропа.<br />
<br />
=== scale ===<br />
<br />
Изменение размеров объекта<br />
* '''tx''', '''ty''' - целевой масштаб по каждой оси<br />
* '''dx''', '''dy''' - на сколько изменить масштаб по каждой оси<br />
* '''v''' - скорость изменения масштаба (в долях единицы в сек.)<br />
* '''t''' - длительность выполнения команды (v игнорируется)<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду scale, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд scale с первой команды.<br />
* '''break''' - прервать команды - Прервать выполнение команд scale на этой команде (запустить их сново можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
=== phys ===<br />
<br />
Команда phys позволяет имитировать простую физику. В ней задается начальная скорость и действующая на объект сила (ускорение).<br />
<br />
* '''vx''', '''vy''' - начальная скорость<br />
* '''ax''', '''ay''' - величина ускорения по каждой оси<br />
* '''a''' - полное ускорение<br />
* '''tvx''', '''tvy''' - целевая скорость<br />
* '''tx''', '''ty''' - целевая координата<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду phys, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд phys с первой команды.<br />
* '''break''' - прервать команды - Прервать выполнение команд phys на этой команде (запустить их снова можно из команд процессов). <br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
Рассмотрим подпрыгивающий мячик, который при касании с землей деформируется (вертикально сплюскивается). Это можно сделать в 3 состояния (падаем, касаемся и взлетаем). Первоначально мячик находится в координате y=-100, и имеет высоту картинки w=60. Падает он до координаты ty=0. При касании с землёй, мяч сжимается на 20 процентов (sy=0.8). При этом его центр должен опуститься на dy=0.8*w/2 = 24.<br />
<pre><br />
<br />
<st id="down"> // падаем<br />
<phys vy="0" ay="20" ty="0" go="touch"/><br />
</st><br />
<br />
<st id="touch"> // касаемся земли<br />
<move dy="24" t="300"/> // опускаем центр при сжатии<br />
<scale ty="0.8" t="300"/> // сжимаемся<br />
<move dy="-24" t="300"/> // поднимаем центр при разжатии<br />
<scale ty="1" t="300" go="up"/> // разжимаемся<br />
</st><br />
<br />
<st id="up"> // взлетаем<br />
<phys vy="0" ty="-200" go="down"/><br />
</st><br />
<br />
</pre><br />
Напомним, что если объект имеет начальную скорость взлета, равную v=sqrt(2*ay*h), то он подпрыгнет на высоту h. Однако, в данном случае, вместо задания начальной скорости при взлете, мы задаем целевую координату (ty), до которой мяч должен подпрыгнуть.<br />
<br />
=== rgb ===<br />
<br />
* '''trgb''' - целевой эффект rgb; подразумевает под собой цвет в виде HEX-кода; по-умолчанию: FFFFFF;<br />
* '''t''' - длительность выполнения команды в ms;<br />
* '''go''' - состояние, в которое нужно перейти поле окончания времени и срабатывания условия [[#if|if]], если оно указано;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;<br />
* '''loop''' - зациклить команды;<br />
* '''break''' - прервать выполнение команд wait на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
=== spline ===<br />
<br />
Сплайн позволяет перемещать машину по заранее заданной траектории.<br />
<br />
====Параметры====<br />
<br />
*'''key''' - точки сплайна по которым движется <br />
*'''t''' - время движения по траектории<br />
*'''go''' - по окончанию переход в состояние<br />
*'''if''' - условие перехода<br />
*'''loop''' - количество повторений<br />
*'''break''' - прервать команды на этой<br />
*'''wait''' - номер запускаемого действия<br />
*'''init''' - номер запускаемого действия<br />
*'''alpha''' - номер запускаемого действия<br />
*'''rot''' - номер запускаемого действия<br />
*'''move''' - номер запускаемого действия<br />
*'''set''' - номер запускаемого действия<br />
*'''phys''' - номер запускаемого действия<br />
*'''scale''' - номер запускаемого действия<br />
*'''drow''' - номер запускаемого действия<br />
<br />
====Построение сплайна====<br />
<br />
# в состоянии машины добавляем правой кнопкой мыши действие "spline"<br />
# добавляем минимально необходимые параметры: '''key''' и '''t''', указываем время движения в '''t'''<br />
# выделяем для редактирования поле '''key'''<br />
# записываем координаты точек через запятую, сначала x потом y, например: -211,-248,-151,-248,-91,-247,59,-246,60,101,60,159,1,190<br />
Если записали все координаты вручную, то можно сохранить и проверять.<br />
Или можно в окне списка состояний нажать на кнопку "build spline" (справа вверху).<br />
[[Файл:Btn spline.jpg|500px]]<br />
<br />
Окно с списком состояний закроется, появится дополнительная панель с настройками сплайна и появится возможность указывать мышкой по экрану точки для сплайна.<br />
<br />
[[Файл:Spline panel.jpg|500px]]<br />
<br />
Точки сплайна указываются кликом левой кнопки мыши по экрану.<br />
<br />
Возможности редактирования:<br />
<br />
'''режимы:'''<br />
*'''add''' - по нажатию левой кнопкой мыши по экрану - будет добавлена новая точка, которая соединится с предыдущей<br />
*'''select''' - по нажатию левой кнопкой мыши по точке сплайна появится возможность отредактировать её положение перетащив её или поменяв её координаты в полях x и у<br />
*'''delete''' - по нажатию левой кнопкой мыши по точке сплайна точка удалится<br />
<br />
Чтобы удалить все точки сплайна необходимо нажать на кнопку "'''delete all knots'''"<br />
<br />
Сохранить сплайн можно нажав на кнопку "'''Save spline'''"<br />
<br />
====Дополнительные сведения====<br />
<br />
* Время движения между двумя соседними точками всегда одинаково, то есть чем дальше друг от друга соседние точки, тем быстрее будет двигаться объект, чем ближе - тем медленней.<br />
* Координаты сплайна просчитываются относительно точки пивота родительского объекта, если соответствующая машина является подобъектом. На координаты могут влиять модификаторы родительского объекта.<br />
<br />
== Воздействия ==<br />
<br />
=== click ===<br />
<br />
Команда вызывается, если на объект кликнули мышкой. Срабатывает на её нажатие.<br />
* '''go''' - состояние в которое при выполнении команды надо перейти (если if нет, то в любом случае);<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход go.<br />
<br />
По клику машина записывает координаты клика в параметры: clickX, clickY.<br />
<br />
=== touch_in ===<br />
<br />
Наведение мыши/пальца на машину, если палец "тащат" по экрану.<br />
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.<br />
<br />
=== touch_out ===<br />
Выведение мыши/пальца из машины, если палец "тащат" по экрану.<br />
* '''go''' - состояние в которое при клике нужно перейти;<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при котором срабатывает переход ''go''.<br />
<br />
=== touch_up ===<br />
<br />
Отжатие мыши от машины<br />
<br />
* '''go''' - состояние в которое при отжатии мыши нужно перейти;<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при котором срабатывает переход ''go''.<br />
<br />
=== mouse_in ===<br />
<br />
Срабатывает при наведение мыши/пальца на машину даже если не нажата кнопка мыши, работает на desktop-ных системах (OSX, Windows)<br />
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.<br />
<br />
=== mouse_out ===<br />
Срабатывает при выведение мыши/пальца из машины даже если не нажата кнопка мыши, работает на desktop-ных системах (OSX, Windows)<br />
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.<br />
<br />
=== drag ===<br />
<br />
Данная команда позволяет "таскать" объект по сцене нажав и удерживая клавишу мишки или (палец в случае сенсорного устройства) на нем.Так же есть возможность ограничить разрешенную область таскания, за пределы которой объект вытащить невозможно. [[Файл:drag.jpg|right]]<br />
* '''x1''' - разрешено таскать, когда координата объекта правее;<br />
* '''x2''' - разрешено таскать, когда координата объекта левее;<br />
* '''y1''' - разрешено таскать, когда координата объекта ниже;<br />
* '''y2''' - разрешено таскать, когда координата объекта выше;<br />
* '''if''' - номер команды условия (начиная с нуля) разрешения таскания;<br />
* '''obj''' - объект у которого надо изменить состояние;<br />
* '''st''' - новое состояние объекта obj;<br />
* '''за пивот''' - "да" - таскать объект за пивот, "нет" - за ту точку, за которую схватили<br />
* '''приклеивать''' - приклеивать при клике к мышке.<br />
<br />
=== dragRot ===<br />
<br />
Данная команда позволяет вращать объект вокруг точки пивота. Нажав и удерживая клавишу мишки или палец (в случае сенсорного устройства) на нем, мы можем вращать его по часовой либо против часовой стрелки. При многократном вращении вокруг своей оси значение его угла не накапливается, а обнуляется выходя за границы [360 ; -360] градусов. [[Файл:dragRot.jpg|right]]<br />
* '''if''' - номер команды условия (начиная с нуля) разрешения таскания;<br />
* '''obj''' - объект у которого надо изменить состояние;<br />
* '''st''' - новое состояние объекта obj;<br />
* '''maxVel''' - Максимальная скорость вращения градус/сек;<br />
* '''objStart''' - объект при начале вращения;<br />
* '''stStart''' - его новое состояние;<br />
* '''objEnd''' - объект при завершении вращения;<br />
* '''stEnd''' - его новое состояние;<br />
<br />
=== drop ===<br />
<br />
Если нажатая кнопка мышки отпускается, вызывается эта команда. Обычно она используется в связке с командой drag<br />
* '''obj''' - объект, на который надо уронить таскаемый объект;<br />
* '''go''' - состояние в которое переходим при отпускании мышки;<br />
* '''if''' - номер (начиная с нуля) условия [[#if|if]] разрешения бросания.<br />
<br />
Рассмотрим совместное применение команд drag и drop на следующей задаче. Пусть есть ключ и ящик. Ключ можно взять мышкой и перетащить, бросив на ящик. Ящик при этом должен постепенно стать прозрачным, а ключ уменьшиться до нуля. Машина состояний для ключа выглядит следующим образом:<br />
<pre><br />
<br />
<st id="drag"><br />
<drag x1="-350" x2="350" y1="-250" y2="250"/><br />
<drop obj="box" go="open"/><br />
</st><br />
<br />
<st id="open"><br />
<set obj="box" st="open"/><br />
<scale tx="0.01" ty="0.01" t="500" go="hide"/><br />
</st><br />
<br />
<st id="hide"><br />
<init x="268" y="30"/><br />
<scale tx="1" ty="1" t="500" go="drag"/><br />
</st><br />
<br />
<br />
</pre><br />
Ящик:<br />
<pre><br />
<br />
<st id="close"> // начальное состояние ящика<br />
<init al="1"/> // если его кто-то сюда переведет - он появится.<br />
</st><br />
<br />
<st id="open"> <br />
<alpha ta="0" t="500"/> // исчезает по прозрачности за 500 ms<br />
</st><br />
<br />
</pre><br />
<br />
====Использование свойства "Условие перехода" ====<br />
<br />
Можно прописать условие, при котором выполняется переход при дропе.<br />
[[Файл:Drop_if.png|300px|thumb|right]]<br />
<br />
С помощью этого условия мы можем научить наш объект выполнять разные задачи в зависимости от того, как именно его дропнули.<br />
Пусть есть объект который можно таскать. Когда объект не таскается должен быть включен флаер, привязанный к этому объекту. При клике на объект, он должен поворачиваться на 90 градусов. При дропе на соответствующую маску объект стает на свое место(Если выполнены условия, к примеру: установлен предыдущий объект и наш объект имеет правильный угол). Если дроп в любое другое место, то должен включится флаер.<br />
<br />
Для того, чтобы научить машину различать клик по ней и ее таскание сделаем следующее. Пропишем ей 2 состояния: click и drag, а также выставим ей параметр "хранить нажатость" = 1. В click будем вычислять координаты объекта и записывать объекту параметр допустимого смещения при котором таскание будет восприниматься как клик. (В данном примере эти параметры: cx, cy, vx, vy. А допустимое смещение составляет 10 пикселей.)<br />
<br />
В состоянии drag будем проверять попадает ли координата объекта при дропе в границы допустимого смещения. Для того чтобы сравнить параметр объекта с переменной, вычтем из нашего объекта, то что мы записали в click. В зависимости от условий и места дропа переходим в соответствующее состояние.<br />
<br />
[[Файл:Click.png|330px]] [[Файл:Drag st.png|630px]]<br />
<br />
=== throw ===<br />
<br />
Если на объект наступили мышкой, не отпуская кнопки, мышку оттащили и затем отпустили, вызывается команда throw со следующими параметрами:<br />
* '''go''' - состояние, в которое, при клике, надо перейти;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]] разрешения бросания;<br />
* '''force''' - получаемая скорость равна разнице пикселей от начала бросания (мышь нажата) до его конца (мышь отжата), умноженная на этот параметр. По умолчанию он равен 1.<br />
<br />
Сработав, эта команда задает начальные значения скорости для команды phys, поэтому должна использоваться совместно с ней (см. ниже пример).<br />
<br />
=== tap ===<br />
<br />
* '''go''' - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) условия [[#if|if]] разрешения бросания.<br />
<br />
=== apply ===<br />
<br />
Вызывается, если данная машина пересеклась с другой. Обычно используется в совокупности с throw, move, phys, drag.<br />
* '''obj''' - сработает , если пересеклись с этим объектом;<br />
* '''x1''' - сработает, если центр объекта левее этого x-са;<br />
* '''x2''' - сработает, если центр объекта правее этого x-са;<br />
* '''y1''' - сработает, если центр объекта выше этого y-ка;<br />
* '''y2''' - сработает, если центр объекта ниже этого y-ка;<br />
* '''rm''' - радиус этой машины (если rm=0, то она считается прямоугольной)<br />
* '''ro''' - радиус объекта obj (если ro=0, то он считается прямоугольным)<br />
* '''st''' - состояние, в которое надо перевести объект obj<br />
* '''go''' - состояние, в которое надо перейти при срабатывании;<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]] разрешения применения команды apply.<br />
<br />
[[Файл:Апплай.png|500px]]<br />
<br />
Блок схема работы '''apply'''<br />
<br />
[[Файл:Блок схема apply.png|500px]]<br />
<br />
* Сначала у нас проверяется координаты '''x1''', '''x2''', '''y1''', '''y2'''.<br />
* Далее проверяет если '''obj'''<br />
* Если '''obj''' нет, то идёт проверку, и выдаёт результат<br />
(если при этом если '''x1''', '''x2''', '''y1''', '''y2''' нет, то они считаются по ширине и высоте всего экрана.)<br />
* Если есть '''obj''', то проверяет есть ли радиусы '''rm''', '''ro'''.<br />
* Если он есть, то значит у нас '''apply''' по кругам<br />
* Если нет, то проверяем наличие '''x1''', '''x2''', '''y1''', '''y2'''.<br />
* Если они есть, то проверка и результат.<br />
* Если их нет, то проверка идёт по шейпам объектов, и выдаётся результат/<br />
Если не будет стоять ни каких галочек, то проверка будет идти по шейпам объектов.<br />
<br />
<br />
Пусть, например, есть снаряд, который при помощи мышки надо кинуть в "тыкву". Если мы промахнулись, снаряд должен вернуться обратно, а с тыквой ничего не произойти. Если мы в тыкву попадаем, снаряд также возвращается, а тыква "взрывается":<br />
<pre><br />
<br />
<st id="trow"><br />
<init x="-350" y="150"/> // начальное положение<br />
<throw go="fly"/> // бросаем<br />
</st><br />
<br />
<st id="fly"><br />
<phys ay="100"/> // летим<br />
<apply y2="300" go="throw"/> // с землей<br />
<apply obj="тыква" rm="8" ro="10" st="bang"/> // с тыквой<br />
</st><br />
<br />
</pre><br />
<br />
== Условия ==<br />
<br />
=== if ===<br />
<br />
В состоянии может быть произвольное число команд if. Их номера (начиная с нуля) указываются<br />
в параметре if других команд. Эти номера можно соединять при помощи логических связок:<br />
* '''&''' - логическое '''и''' (вместо значка '''&''' можно использовать запятую ''',''');<br />
* '''|''' - логическое '''или''';<br />
* '''!''' - логическое '''не'''.<br />
Пример записи логического выражения в поле if некоторой команды: '''(1&2)|(3&(!4))''',<br />
что означает: выполняется if под номером 1 и под номером 2, или под номером 3 и не под номером 4.<br />
<br />
Логические связки используются также как математической логике или любом языке программирования. <br />
Так:<br />
* A '''&''' B - истинно, если истинны оба условия A и B;<br />
* A '''|''' B - истинно, если истинно хотя бы одно условие (или оба);<br />
* '''!''' А - истинно, если условие A ложно.<br />
Скобки в логическом выражении определяют приоритет (порядок) выполнения логических операций.<br />
Отметим несколько тождеств, справедливых при формировании логических высказываний:<br />
* !(A & B) = (!A) | (!B)<br />
* !(A | B) = (!A) & (!B)<br />
* !(!A) = A<br />
<br />
Если при формировании условия (ниже) есть несколько проверок, то они соединены логическим '''и'''.<br />
Т.е., если хотя бы одна из них не выполняется, то считается, что условие не выполнилось.<br />
<br />
Параметры команды:<br />
* '''obj''' - находится ли объект obj в состоянии st или имеет ли его параметр par значение val. В этом поле можно указать this, это значит что if будет проводить проверку текущего объекта. Добавлено это вместе с параметром clone. Клоны рождаются и умирают в рамках одного экрана. Для различия клонов между собой машина имеет уникальный параметр "clone_num" у оригинала = -1, у клонов от 0 до N, собственно с помощью this машина может сама себя проверить клон ли она и если да то какой у нее номер;<br />
* '''st''' - имя состояния в котором может находиться объект obj;<br />
* '''par''' - имя параметра объекта obj, значение которого сравнивается с полем val;<br />
* '''val''' - значение параметра par, которое проверяется у объекта obj;<br />
* '''val_txt''' - Значение текстового параметра объекта для проверки условия;<br />
* '''val_res''' - Значение ресурсного параметра объекта для проверки условия;<br />
* '''op''' - операция сравнения par op val. Если операции нет, то предполагается проверка на равенство par=val. Иначе используются операторы:<br />
** '''<''' - меньше (par < val);<br />
** '''>''' - больше (par > val);<br />
** '''!=''' - не равно (par != val);<br />
** '''<>''' - не равно (par <> val);<br />
** '''>=''' - больше или равно (par >= val);<br />
** '''<=''' - меньше или равно (par <= val);<br />
* '''curScr''' - если текущий экран совпадает с этим, то условие выполнилось;<br />
* '''prScr''' - если предыдущий экран совпадает с этим, то условие выполнилось;<br />
* '''wasScr''' - если был (когда либо) этот экран, то условие выполнилось.<br />
* '''buy''' - был ли куплен данный inn-app (проверяется флаг поля в объекте [[Options]]);<br />
* '''url''' - валиден (правилен и может быть запущен) ли данный интернет-адрес;<br />
* '''is_mus''' - играет ли сейчас музыка (значение 1);<br />
* '''guest''' - объект который установил состояние (используется вместо параметра obj). Если указанный объект не менял состояние этой машины, то условие не срабатывает.<br />
<br />
Если использовать obj, par, val, то будет происходить проверка на равенство значения параметра объекта и значения записанного в поле val.<br />
Если же использовать obj, par, op, val, то будет происходить проверка в соответствии с операцией сравнения значения параметра объекта и значения записанного в поле val.<br />
<br />
Для проверки текущего значения прозрачности у объекта можно воспользоваться параметром ''cur_al''<br />
<br />
У машины (другой или самой себя) можно проверить текущее состояние '''st''' и предыдущее состояние '''prev_st''', эти параметры живут на время сессии.<br />
<br />
== Математика ==<br />
<br />
=== Основные математические операции ===<br />
Математика в appsalute creator представлена 6-ю основными операциями: (плюс), (минус), (умножить), (поделить), (целочисленное деление), (остаток от деления) <br><br />
Организована благодаря совместному использованию '''[[#var|var]]''' и '''[[#set|set]]'''. <br />
[[Файл:Example_mod.png|300px|right|Пример использования операции остатка от деления]]<br />
''(плюс)'' '''+'''<br><br />
''(минус)'' '''-'''<br><br />
''(умножить)'' '''*'''<br><br />
''(поделить)'' '''/'''<br><br />
''(целочисленное деление)'' '''\'''<br><br />
''(остаток от деления)'' '''%'''<br><br />
<br><br />
Примеры использования последних двух операций:<br><br />
5\2=2<br><br />
5%2=1<br><br />
<br />
=== var ===<br />
Благодаря использованию '''[[#var|var]]''' существует возможность cчитать любой числовой параметр любого объекта. Например: x - координату какой-то машины, текущее значение любого объекта counter или timer и конечно же считывание значения любого параметра из опций! Каким образом это устроено? Рассмотрим подробнее '''[[#var|var]]''': <br><br />
[[Файл:VAR.png|right]]<br />
*'''name''' - здесь выбираем имя для нашей будущей переменной, которой будем оперировать далее<br />
*'''obj''' - выбирается объект, параметры которого мы хотим считать<br />
*'''par''' - параметр, который нужно вычитать из объекта, указанного выше<br />
*'''val''' - указывается числовое значение, которое будет установлено по умолчанию в случае отсутствия obj и par<br />
*'''user''' - если стоит "1", то будет считываться с текущего профиля в опциях<br />
На изображении справа можно наблюдать каким образом организован '''[[#var|var]]'''. В данном случае объявлена переменная x_cor, которая считывает x-координату объекта actor_1, при этом считывание переменной происходит из текущего профиля, так, как в поле user установлено значение равное "1".<br />
<br />
=== set ===<br />
[[Файл:SET.png|right]]<br />
Использование '''[[#var|var]]''' без '''[[#set|set]]''' не имеет смысла. Так, как переменная создается, но не используется дальше. Рассмотрим следующий пример, где вычитаем x - координату из одного объекта и сохраним ее в опции, предварительно увеличив ее на 50 единиц (в данном случае 50 пикселей).<br />
На рисунке справа можно наблюдать, каким образом это сделано. В состоянии '''init''' объявляется переменная '''x_cor''', которая считывает координату '''x''' из объекта '''actor_1''', таким образом в переменную '''x_cor''' запишется положение по '''x''' объекта '''actor_1'''. Поле '''user''' в данном случае в '''1''' не обязательно устанавливать, так как работа ведется с машинами, а не с опциями. Если бы на месте '''actor_1''' оказался объект '''options''', то это было бы просто необходимо, иначе программа считает значение не из профиля. Далее в '''[[#set|set]]''' выбран объект '''options''', в параметр '''x_position''' которого будет сохранятся значение переменной '''x_cor''' увеличенной на 50. В поле '''round''' идет округление вычисляемого значения, если оно установлено в 1. Поле '''user ''' установлено в 1, это значит, что параметр '''x_position''' будет сохранен в профиль. После это выполняется сохранение опций путем задания объекту '''options''' состояния '''save'''.<br><br />
! ! !ВАЖНО: чтобы выполнить какие-то действия с '''[[#var|var]]''' его обязательно нужно указывать в поле '''val''' в '''set''', при этом, если он используется, то все выражение должно стоять в скобках. Если в поле '''val''' не используется переменная, то скобки необязательны.<br />
<br><br />
<br><br />
Существует также возможность использовать '''[[#var|var]]''' совместно с '''[[#if|if]]''', а также '''[[#var|var]]''' с '''[[#move|move]]'''<br />
<br><br />
Так же добавилась возможность записывать значение переменной в состояние "st", что значительно уменьшает<br />
необходимость в записи 1000 if-ов. При этом, тип переменной в '''[[#var|var]]''' должен быть "строка".<br />
И добавилась возможность записи переменной boolean: ((a)==(b)). true = 1, false = 0. Довольно полезная вещь,<br />
если не хотите забивать "память" ненужной математикой.<br />
<br />
=== var и if ===<br />
[[Файл:IF.png|right]]<br />
При подробном рассмотрении '''[[#if|if]]''' можно заметить, что в нем есть поле '''val''', соответственно в этом поле можно указать переменную. Таким образом в поле '''val''' необязательно указывать константу, а можно указать какую-то переменную, которая может постоянно изменяться. Например, существует два объекта, один находится состоянии покоя, а другой находится в движении. При этом первый объект (тот, который в состоянии покоя) постоянно опрашивает положение второго объекта, и в случае, если у объекта, который движется, '''х''' координата равна '''х''' координате первого объекта, то первый объект входит в состояние, где он начинает свое движение. На рисунке показан объект, который находится в состоянии покоя, рассмотрим его состояния:<br><br />
В данном объекте существует два состояния: '''init''' и '''move'''. В '''init''' объект опрашивает другой объект и в случае, когда условие срабатывает, то переходит в состояние '''move''', где начинает свое движение.<br />
В '''init''' создаем переменную, в которую записываем положение по '''x''' объекта '''actor_2''', в '''if''' проверяется условие на соответствие координат объектов '''actor_1''' и '''actor_2''', в данном случае координата объекта '''actor_2''' представлена в виде переменной '''x_cor'''. Если условие выполняется, то происходит переход в состояние '''move''', если нет, то заново проходим состояние '''init''' и повторяем вышеописанную последовательность действий.<br />
<br><br />
<br><br />
<br><br />
<br><br />
<br />
=== var и move ===<br />
Также с помощью '''[[#var|var]]''' есть возможность указать целевые координаты в '''[[#move|move]]'''. То есть, не обязательно указывать целевые координаты в виде констант, их можно указать теперь с помощью переменных. При использовании '''[[#var|var]]''' и '''[[#move|move]]''' можно организовать обмен двух объектов местами с анимацией движения. Для этого необходимо определять какой объект нажат первым, а какой вторым, сохранять их координаты через объект '''options''' и только потом менять их местами. На рисунке можно увидеть, как это организовано.<br />
[[Файл:var_move.png|1000px|thumb|center|]]<br />
Рассмотрим подробнее состояние данной машины:<br />
<br><br />
* '''init'''<br><br />
В этом состоянии ожидаем клик на объект и обнуляем параметр, который отвечает за то, какой по счету объект сейчас нажат. Так, как при обмене объектов, если мы делаем это по клику, важно знать, по какому кликнули первым, а по какому вторым.<br />
* '''check'''<br><br />
Проверяется параметр '''number''', если он равен '''0''', то это значит, что еще ничего не кликали и мы переходим в состояние, где в опции записываются координаты этого объекта, который считается нажатым первым. Если не равен '''0''', то считается, что этот объект нажат вторым и переходит в состояние, где в опции записываются координаты этого объекта, который считается нажатым вторым по счету.<br />
* '''first_object'''<br><br />
В этом состоянии записываются координаты объекта в опции. Чтобы записать координаты в опции используются '''[[#var|var]]''' и '''[[#set|set]]''' упоминаемые выше. В опции координаты первого нажатого объекта сохраняются под параметрами '''x_first''' и '''y_first'''. В конце параметру '''number''' присваиваем значение '''1''', чтобы указать, что следующий нажатый объект будет вторым по счету. <br />
* '''second_object'''<br><br />
В этом состоянии объект будет в том случае, если он будет нажатым вторым по счету, то есть после состояния '''check''' объект попадет в это состояние, где он запишет свои текущие координаты под параметрами '''x_second''' и '''y_second'''. Запись координат происходит таким же самым образом, что и в состоянии '''first_object'''. После этого он автоматически переходит в следующее состояние.<br />
* '''move_first'''<br><br />
В этом состоянии объект будет в том случае, если он был нажат первым, поэтому он будет двигаться на место второго нажатого объекта, который сохранил свои координаты в параметры'''x_second''' и '''y_second'''. Движение происходит следующим образом: сперва в переменную вычитываем координаты второго объекта, а потом в '''move''' вместо целевых координат записываем переменные, которые обязательно должны быть взяты в скобки.<br />
* '''move_second'''<br><br />
В этом состоянии объект будет в том случае, если он был нажат вторым, поэтому он будет двигаться на место первого нажатого объекта, который сохранил свои координаты в параметры '''x_first''' и '''y_first'''. Движение происходит следующим образом: сперва в переменную вычитываем координаты первого объекта, а потом в '''move''' вместо целевых координат записываем переменные, которые обязательно должны быть взяты в скобки.<br />
<br />
В результате проделанных манипуляций с машинами по кликам на две машины, они обменяются местами с анимацией движения. Это может быть очень полезным во многих мини играх!!!<br />
<br />
=== Важно знать ===<br />
* Переменная действует в рамках одного состояния, если нужно, чтобы она была глобальной, нужно сохранить ее в опции и потом в нужный момент считывать ее из опций.<br />
* Если складываем два числа, то в поле '''val''' они должны быть записаны в скобках: (5+3).<br />
* Если возникает необходимость написать какое-то более сложное арифметическое вычисление, то следует помнить, что на одно действие приходятся одни скобки. Например: (((5+3)\2)*2).<br />
* Количество открывающих и закрывающих скобок должно быть одинаковым.<br />
* В скобках можно писать переменную, если она была объявлена выше: (5+a).<br />
* Переменная может состоять из цифр и букв и знака нижнего подчеркивания.<br />
* Иногда бывает необходимым использование '''round''' в '''set''', так например, если какой-то параметр получен с помощью арифметических вычислений и потом используется его в каком-то условии, и условие проверяет параметр, как целочисленное значение, то могут возникнуть ошибки. Так, как число будет записано в следующем виде 123.0000 и программа будет считать, что оно не целочисленное, а дробное. И чтобы избавится от лишних нулей в дробной части следует округлять число.<br />
* Действия, которые требуют времени, такие как move, rot, wait и другие перестают работать для уменьшения вычислительной нагрузки на устройство.<br />
* Действия, которые не требуют времени, такие как set, init и другие продолжают функционировать.<br />
<br />
<br />
<pre><br />
Если с помощью переменной менять объекту любой параметр, например, координату X, то она<br />
запомнится (запишется как значение по умолчанию).<br />
Тогда при повторном попадании на экран считается не тот X, который указан в свойствах,<br />
а тот, который установлен через переменную.<br />
Если нужно при ините экрана возвращать начальные значения параметров,<br />
то можно сделать это двумя способами:<br />
- не использовать переменную;<br />
- создать отдельное состояние, которое будет "вручную" устанавливать начальные значения<br />
параметрам при ините экрана.<br />
Если координата (или другой параметр) меняется другим способом, то будут автоматически<br />
при ините экрана подтягиваться значения из свойств объекта.<br />
</pre><br />
<br />
=== Примеры применений ===<br />
С помощью математики можно организовать следующее:<br />
* динамические опции (изменение звука и музыки с помощью ползунка);<br />
* анимацию каунтера в играх (по окончанию уровня можно наблюдать, как изменяются очки);<br />
* подсчет очков (гибкая система подсчета очков);<br />
* обмен объектов местами (использование var и move)<br />
* увеличение z-координаты любого объекта (когда необходимо, чтобы нажатый или таскаемый объект был выше других по z);<br />
* простейший калькулятор;<br />
* и много других.<br />
<br />
== Копирование машины состояния с сохранением ссылки на себя ==<br />
Довольно часто бывает, что машина состояний ссылается только на глобальные объекты и на саму себя. При этом, если мы просто скопируем объект, он будет ссылаться на свою предыдущую копию. Этого можно избежать, сделав 3 шага:<br />
1. Переместить объект в отдельную сцену<br />
2. Скопировать данную сцену(имеется в виду обычное копирование, без ссылки)<br />
3. Перенести объект и его копию обратно, в нужную сцену<br />
4. Созданные сцены можно удалить :)<br />
<br />
== Guest ==<br />
<br />
'''Guest (гость)''' - объект, который перевел машину в текущее состояние. Пример: кнопка ''btn1'' по клику переводит машину ''mch1'' в состояние ''st1'', в этом состоянии у машины ''mch1'' гостем является кнопка ''btn1''. Гостем может быть объект любого типа, если он может менять состояние другому объекту (например: хидден-объект по нахождению может менять состояние объекту, кнопка, машина, пэчворк и т.д.)<br />
<br />
В машине состояний можно считывать (проверять) и передавать параметры и состояния гостя. Любое поле ''obj'' в выпадающем списке содержит строку ''guest'', что позволяет работать с гостем, как с любым другим объектом.<br />
<br />
=== Пример использования ===<br />
<br />
[[Файл:Guest1.jpg|left]]<br />
Пускай экран содержит 3 кнопки (''btn1'', ''btn2'' и ''btn3'') и одну машину ''mch1''. Нужно сделать так, чтобы по клику на любую из кнопок машина перемещалась в ее координаты и переводила кнопку в состояние ''disable''. Так же по клику на кнопку ''btn2'', машина должна перейти в состояние ''bonus''.<br><br />
Всем трем кнопкам по клику пропишем передавать объекту ''mch1'' состояние ''check''.<br><br><br />
Создадим в машине три состояния: ''init'' - состояние в котором машина будет находиться по умолчанию, ''check'' - состояние, которое будет вызываться тремя кнопками, в этом состоянии у машины ''mch1'' одна из трех кнопок будет гостем, ''bonus'' - последнее состояние.<br><br />
Две команды ''var'' считывают у гостя координаты, т.к. мы не знаем, какая именно кнопка перевела машину ''mch1'' в состояние ''check'', то обращаемся к гостю, а не к кнопкам. За ними следует две команды ''set'', которые передают координаты гостя машине. Еще один ''set'' переводит гостя в состояние ''disable''. И через ''wait'' осуществляется переход в состояние ''bonus'', если гость ''btn2''.<br />
<br />
<pre><br />
При смене состояния гость сохраняется, т.е. в состоянии bonus гостем останется btn2.<br />
</pre><br />
<pre><br />
Если машина изначально сама себе меняет состояния, то у нее нет гостя.<br />
</pre><br />
<br />
[[Файл:Guest2.jpg]]<br />
<br />
== Массив (Array) ==<br />
<br />
В данном объекте реализован массив, имеющий максимальную длину в 20 элементов.<br />
<br />
=== Свойства объекта массив: ===<br />
<br />
len - длинна массива. Длинна массива может как считываться, так и записываться. Влияет на количество сохраняемых объектов в Options.<br />
<br />
index1 - индекс элемента. (данный массив можно расширить до многомерного и использовать несколько индексов)<br />
<br />
val - значение элемента массива, с индексом index1<br />
<br />
a1..a20 - внутренние элементы массива(обращаться можно через свойство par объекта). Предполагается, что пользователь редактора к ним обращаться напрямую не будет, однако иногда для удобства полезны.<br />
<br />
=== Состояния объекта массив: ===<br />
<br />
get - при вызове этого состояния во внутреннюю переменную val записывается значение элемента с индексом index1<br />
<br />
set - при вызове этого состояния во внутреннюю переменную a1..a20, соответствующую индексу index1 записывается значение val<br />
<br />
load - загрузить значения массива из xml.<br />
<br />
save - сохранить элементы массива от 1 до len<br />
<br />
=== Как использовать? ===<br />
<br />
1. Загружаем массив, переводя объект array в состояние load<br />
<br />
2. Записываем значения массива<br />
<br />
а). Задаём значение свойству index1 объекта array (устанавливаем индекс ячейки, в которую будет заноситься число)<br />
б). Задаём значение свойству val объекта array (устанавливаем значение, которое будет заноситься в ячейку<br />
с индексом index1)<br />
в). Переводим объект array в состояние set<br />
<br />
3. Считываем значения массива<br />
а). Задаём значение свойству index1 объекта array (устанавливаем индекс ячейки, из которой будет считываться число)<br />
б). Переводим объект array в состояние get<br />
в). Считываем значение из свойства val объекта array<br />
<br />
4. Сохраняем массив, переводя объект array в состояние save. Если хотите изменить количество сохраняемых элементов - предварительно измените параметр len.<br />
<br />
=== Копирование объекта ===<br />
<br />
При копировании, необходимо заменить в состояниях load и save array.имя_параметра на другое имя. Например, array2.имя_параметра. Копировать следует через использование доп. сцены (см. выше)<br />
<br />
=== Достоинства ===<br />
<br />
Позволяет избежать необходимости каждый раз создавать большое количество if-ов и set-ов, если необходимо работать с нумерованным списком. Можно один раз создать структуру и копировать её неограниченное количество раз<br />
<br />
=== Недостатки ===<br />
<br />
Данный объект содержит довольно большое количество кода, поэтому при большом их обилии/длине может занизить скорость работы сцены и скорость загрузки сцены.<br />
<br />
=== Исходный XML код===<br />
Прим. id="369" - идентификатор объекта Options, сохраняющего все переменные приложения. id="7845" - идентификатор объекта<br />
<br />
<pre><br />
<obj id="7845" type="machine" nm="array" sync="1" w="1" h="1"><br />
<st id="init"/><br />
<st id="get"><br />
<var nm="a1" obj="7845" par="a1"/><br />
<var nm="a2" obj="7845" par="a2"/><br />
<var nm="a3" obj="7845" par="a3"/><br />
<var nm="a4" obj="7845" par="a4"/><br />
<var nm="a5" obj="7845" par="a5"/><br />
<var nm="a6" obj="7845" par="a6"/><br />
<var nm="a7" obj="7845" par="a7"/><br />
<var nm="a8" obj="7845" par="a8"/><br />
<var nm="a9" obj="7845" par="a9"/><br />
<var nm="a10" obj="7845" par="a10"/><br />
<var nm="a11" obj="7845" par="a11"/><br />
<var nm="a12" obj="7845" par="a12"/><br />
<var nm="a13" obj="7845" par="a13"/><br />
<var nm="a14" obj="7845" par="a14"/><br />
<var nm="a15" obj="7845" par="a15"/><br />
<var nm="a16" obj="7845" par="a16"/><br />
<var nm="a17" obj="7845" par="a17"/><br />
<var nm="a18" obj="7845" par="a18"/><br />
<var nm="a19" obj="7845" par="a19"/><br />
<var nm="a20" obj="7845" par="a20"/><br />
<set obj="7845" par="val" val="(a1)" round="1" if="0"/><br />
<set obj="7845" par="val" val="(a2)" round="1" if="1"/><br />
<set obj="7845" par="val" val="(a3)" round="1" if="2"/><br />
<set obj="7845" par="val" val="(a4)" round="1" if="3"/><br />
<set obj="7845" par="val" val="(a5)" round="1" if="4"/><br />
<set obj="7845" par="val" val="(a6)" round="1" if="5"/><br />
<set obj="7845" par="val" val="(a7)" round="1" if="6"/><br />
<set obj="7845" par="val" val="(a8)" round="1" if="7"/><br />
<set obj="7845" par="val" val="(a9)" round="1" if="8"/><br />
<set obj="7845" par="val" val="(a10)" round="1" if="9"/><br />
<set obj="7845" par="val" val="(a11)" round="1" if="10"/><br />
<set obj="7845" par="val" val="(a12)" round="1" if="11"/><br />
<set obj="7845" par="val" val="(a13)" round="1" if="12"/><br />
<set obj="7845" par="val" val="(a14)" round="1" if="13"/><br />
<set obj="7845" par="val" val="(a15)" round="1" if="14"/><br />
<set obj="7845" par="val" val="(a16)" round="1" if="15"/><br />
<set obj="7845" par="val" val="(a17)" round="1" if="16"/><br />
<set obj="7845" par="val" val="(a18)" round="1" if="17"/><br />
<set obj="7845" par="val" val="(a19)" round="1" if="18"/><br />
<set obj="7845" par="val" val="(a20)" round="1" if="19"/><br />
<if obj="7845" par="index1" val="1"/><br />
<if obj="7845" par="index1" val="2"/><br />
<if obj="7845" par="index1" val="3"/><br />
<if obj="7845" par="index1" val="4"/><br />
<if obj="7845" par="index1" val="5"/><br />
<if obj="7845" par="index1" val="6"/><br />
<if obj="7845" par="index1" val="7"/><br />
<if obj="7845" par="index1" val="8"/><br />
<if obj="7845" par="index1" val="9"/><br />
<if obj="7845" par="index1" val="10"/><br />
<if obj="7845" par="index1" val="11"/><br />
<if obj="7845" par="index1" val="12"/><br />
<if obj="7845" par="index1" val="13"/><br />
<if obj="7845" par="index1" val="14"/><br />
<if obj="7845" par="index1" val="15"/><br />
<if obj="7845" par="index1" val="16"/><br />
<if obj="7845" par="index1" val="17"/><br />
<if obj="7845" par="index1" val="18"/><br />
<if obj="7845" par="index1" val="19"/><br />
<if obj="7845" par="index1" val="20"/><br />
</st><br />
<st id="set"><br />
<var nm="val" obj="7845" par="val"/><br />
<set obj="7845" par="a1" val="(val)" round="1" if="0"/><br />
<set obj="7845" par="a2" val="(val)" round="1" if="1"/><br />
<set obj="7845" par="a3" val="(val)" round="1" if="2"/><br />
<set obj="7845" par="a4" val="(val)" round="1" if="3"/><br />
<set obj="7845" par="a5" val="(val)" round="1" if="4"/><br />
<set obj="7845" par="a6" val="(val)" round="1" if="5"/><br />
<set obj="7845" par="a7" val="(val)" round="1" if="6"/><br />
<set obj="7845" par="a8" val="(val)" round="1" if="7"/><br />
<set obj="7845" par="a9" val="(val)" round="1" if="8"/><br />
<set obj="7845" par="a10" val="(val)" round="1" if="9"/><br />
<set obj="7845" par="a11" val="(val)" round="1" if="10"/><br />
<set obj="7845" par="a12" val="(val)" round="1" if="11"/><br />
<set obj="7845" par="a13" val="(val)" round="1" if="12"/><br />
<set obj="7845" par="a14" val="(val)" round="1" if="13"/><br />
<set obj="7845" par="a15" val="(val)" round="1" if="14"/><br />
<set obj="7845" par="a16" val="(val)" round="1" if="15"/><br />
<set obj="7845" par="a17" val="(val)" round="1" if="16"/><br />
<set obj="7845" par="a18" val="(val)" round="1" if="17"/><br />
<set obj="7845" par="a19" val="(val)" round="1" if="18"/><br />
<set obj="7845" par="a20" val="(val)" round="1" if="19"/><br />
<if obj="7845" par="index1" val="1"/><br />
<if obj="7845" par="index1" val="2"/><br />
<if obj="7845" par="index1" val="3"/><br />
<if obj="7845" par="index1" val="4"/><br />
<if obj="7845" par="index1" val="5"/><br />
<if obj="7845" par="index1" val="6"/><br />
<if obj="7845" par="index1" val="7"/><br />
<if obj="7845" par="index1" val="8"/><br />
<if obj="7845" par="index1" val="9"/><br />
<if obj="7845" par="index1" val="10"/><br />
<if obj="7845" par="index1" val="11"/><br />
<if obj="7845" par="index1" val="12"/><br />
<if obj="7845" par="index1" val="13"/><br />
<if obj="7845" par="index1" val="14"/><br />
<if obj="7845" par="index1" val="15"/><br />
<if obj="7845" par="index1" val="16"/><br />
<if obj="7845" par="index1" val="17"/><br />
<if obj="7845" par="index1" val="18"/><br />
<if obj="7845" par="index1" val="19"/><br />
<if obj="7845" par="index1" val="20"/><br />
</st><br />
<st id="load"><br />
<var nm="a1" obj="369" par="array.a1" user="1"/><br />
<var nm="a2" obj="369" par="array.a2" user="1"/><br />
<var nm="a3" obj="369" par="array.a3" user="1"/><br />
<var nm="a4" obj="369" par="array.a4" user="1"/><br />
<var nm="a5" obj="369" par="array.a5" user="1"/><br />
<var nm="a6" obj="369" par="array.a6" user="1"/><br />
<var nm="a7" obj="369" par="array.a7" user="1"/><br />
<var nm="a8" obj="369" par="array.a8" user="1"/><br />
<var nm="a9" obj="369" par="array.a9" user="1"/><br />
<var nm="a10" obj="369" par="array.a10" user="1"/><br />
<var nm="a11" obj="369" par="array.a11" user="1"/><br />
<var nm="a12" obj="369" par="array.a12" user="1"/><br />
<var nm="a13" obj="369" par="array.a13" user="1"/><br />
<var nm="a14" obj="369" par="array.a14" user="1"/><br />
<var nm="a15" obj="369" par="array.a15" user="1"/><br />
<var nm="a16" obj="369" par="array.a16" user="1"/><br />
<var nm="a17" obj="369" par="array.a17" user="1"/><br />
<var nm="a18" obj="369" par="array.a18" user="1"/><br />
<var nm="a19" obj="369" par="array.a19" user="1"/><br />
<var nm="a20" obj="369" par="array.a20" user="1"/><br />
<set obj="7845" par="a1" val="(a1)" round="1" if="0"/><br />
<set obj="7845" par="a2" val="(a2)" round="1" if="1"/><br />
<set obj="7845" par="a3" val="(a3)" round="1" if="2"/><br />
<set obj="7845" par="a4" val="(a4)" round="1" if="3"/><br />
<set obj="7845" par="a5" val="(a5)" round="1" if="4"/><br />
<set obj="7845" par="a6" val="(a6)" round="1" if="5"/><br />
<set obj="7845" par="a7" val="(a7)" round="1" if="6"/><br />
<set obj="7845" par="a8" val="(a8)" round="1" if="7"/><br />
<set obj="7845" par="a9" val="(a9)" round="1" if="8"/><br />
<set obj="7845" par="a10" val="(a10)" round="1" if="9"/><br />
<set obj="7845" par="a11" val="(a11)" round="1" if="10"/><br />
<set obj="7845" par="a12" val="(a12)" round="1" if="11"/><br />
<set obj="7845" par="a13" val="(a13)" round="1" if="12"/><br />
<set obj="7845" par="a14" val="(a14)" round="1" if="13"/><br />
<set obj="7845" par="a15" val="(a15)" round="1" if="14"/><br />
<set obj="7845" par="a16" val="(a16)" round="1" if="15"/><br />
<set obj="7845" par="a17" val="(a17)" round="1" if="16"/><br />
<set obj="7845" par="a18" val="(a18)" round="1" if="17"/><br />
<set obj="7845" par="a19" val="(a19)" round="1" if="18"/><br />
<set obj="7845" par="a20" val="(a20)" round="1" if="19"/><br />
<if obj="7845" par="len" op="&gt;" val="0"/><br />
<if obj="7845" par="len" op="&gt;" val="1"/><br />
<if obj="7845" par="len" op="&gt;" val="2"/><br />
<if obj="7845" par="len" op="&gt;" val="3"/><br />
<if obj="7845" par="len" op="&gt;" val="4"/><br />
<if obj="7845" par="len" op="&gt;" val="5"/><br />
<if obj="7845" par="len" op="&gt;" val="6"/><br />
<if obj="7845" par="len" op="&gt;" val="7"/><br />
<if obj="7845" par="len" op="&gt;" val="8"/><br />
<if obj="7845" par="len" op="&gt;" val="9"/><br />
<if obj="7845" par="len" op="&gt;" val="10"/><br />
<if obj="7845" par="len" op="&gt;" val="11"/><br />
<if obj="7845" par="len" op="&gt;" val="12"/><br />
<if obj="7845" par="len" op="&gt;" val="13"/><br />
<if obj="7845" par="len" op="&gt;" val="14"/><br />
<if obj="7845" par="len" op="&gt;" val="15"/><br />
<if obj="7845" par="len" op="&gt;" val="16"/><br />
<if obj="7845" par="len" op="&gt;" val="17"/><br />
<if obj="7845" par="len" op="&gt;" val="18"/><br />
<if obj="7845" par="len" op="&gt;" val="19"/><br />
</st><br />
<st id="save"><br />
<var nm="len" obj="7845" par="len"/><br />
<var nm="a1" obj="7845" par="a1"/><br />
<var nm="a2" obj="7845" par="a2"/><br />
<var nm="a3" obj="7845" par="a3"/><br />
<var nm="a4" obj="7845" par="a4"/><br />
<var nm="a5" obj="7845" par="a5"/><br />
<var nm="a6" obj="7845" par="a6"/><br />
<var nm="a7" obj="7845" par="a7"/><br />
<var nm="a8" obj="7845" par="a8"/><br />
<var nm="a9" obj="7845" par="a9"/><br />
<var nm="a10" obj="7845" par="a10"/><br />
<var nm="a11" obj="7845" par="a11"/><br />
<var nm="a12" obj="7845" par="a12"/><br />
<var nm="a13" obj="7845" par="a13"/><br />
<var nm="a14" obj="7845" par="a14"/><br />
<var nm="a15" obj="7845" par="a15"/><br />
<var nm="a16" obj="7845" par="a16"/><br />
<var nm="a17" obj="7845" par="a17"/><br />
<var nm="a18" obj="7845" par="a18"/><br />
<var nm="a19" obj="7845" par="a19"/><br />
<var nm="a20" obj="7845" par="a20"/><br />
<set obj="369" par="array.a1" val="(a1)" round="1" user="1" if="0"/><br />
<set obj="369" par="array.a2" val="(a2)" round="1" user="1" if="1"/><br />
<set obj="369" par="array.a3" val="(a3)" round="1" user="1" if="2"/><br />
<set obj="369" par="array.a4" val="(a4)" round="1" user="1" if="3"/><br />
<set obj="369" par="array.a5" val="(a5)" round="1" user="1" if="4"/><br />
<set obj="369" par="array.a6" val="(a6)" round="1" user="1" if="5"/><br />
<set obj="369" par="array.a7" val="(a7)" round="1" user="1" if="6"/><br />
<set obj="369" par="array.a8" val="(a8)" round="1" user="1" if="7"/><br />
<set obj="369" par="array.a9" val="(a9)" round="1" user="1" if="8"/><br />
<set obj="369" par="array.a10" val="(a10)" round="1" user="1" if="9"/><br />
<set obj="369" par="array.a11" val="(a11)" round="1" user="1" if="10"/><br />
<set obj="369" par="array.a12" val="(a12)" round="1" user="1" if="11"/><br />
<set obj="369" par="array.a13" val="(a13)" round="1" user="1" if="12"/><br />
<set obj="369" par="array.a14" val="(a14)" round="1" user="1" if="13"/><br />
<set obj="369" par="array.a15" val="(a15)" round="1" user="1" if="14"/><br />
<set obj="369" par="array.a16" val="(a16)" round="1" user="1" if="15"/><br />
<set obj="369" par="array.a17" val="(a17)" round="1" user="1" if="16"/><br />
<set obj="369" par="array.a18" val="(a18)" round="1" user="1" if="17"/><br />
<set obj="369" par="array.a19" val="(a19)" round="1" user="1" if="18"/><br />
<set obj="369" par="array.a20" val="(a20)" round="1" user="1" if="19"/><br />
<set obj="369" par="array.len" val="(len)" round="1" user="1"/><br />
<if obj="7845" par="len" op="&gt;" val="0"/><br />
<if obj="7845" par="len" op="&gt;" val="1"/><br />
<if obj="7845" par="len" op="&gt;" val="2"/><br />
<if obj="7845" par="len" op="&gt;" val="3"/><br />
<if obj="7845" par="len" op="&gt;" val="4"/><br />
<if obj="7845" par="len" op="&gt;" val="5"/><br />
<if obj="7845" par="len" op="&gt;" val="6"/><br />
<if obj="7845" par="len" op="&gt;" val="7"/><br />
<if obj="7845" par="len" op="&gt;" val="8"/><br />
<if obj="7845" par="len" op="&gt;" val="9"/><br />
<if obj="7845" par="len" op="&gt;" val="10"/><br />
<if obj="7845" par="len" op="&gt;" val="11"/><br />
<if obj="7845" par="len" op="&gt;" val="12"/><br />
<if obj="7845" par="len" op="&gt;" val="13"/><br />
<if obj="7845" par="len" op="&gt;" val="14"/><br />
<if obj="7845" par="len" op="&gt;" val="15"/><br />
<if obj="7845" par="len" op="&gt;" val="16"/><br />
<if obj="7845" par="len" op="&gt;" val="17"/><br />
<if obj="7845" par="len" op="&gt;" val="18"/><br />
<if obj="7845" par="len" op="&gt;" val="19"/><br />
</st><br />
</obj><br />
</pre><br />
<br />
=== Машина состояний объекта ===<br />
[[Файл:array.jpg]]<br />
<br />
<br />
== Пример использования ==<br />
<br />
[http://fs5.absolutist.com/files/wikisample/machine.rar Download]<br />
<br />
== Clone ==<br />
Clone - параметр команды init в разделе "системные действия".<br />
<br />
[[Файл:Clone1.PNG]]<br />
<br />
<br />
Значение 1 означает, что в текущем местоположении машины будет создана ее копия.<br />
<br />
[[Файл:Clone2.PNG]]<br />
<br />
=== Свойства ===<br />
<br />
1) Клонированная машина состояний имеет все свойства, состояния и параметры исходного объекта клонирования.<br />
<br />
2) Клоны рождаются и умирают в рамках одного экрана.<br />
<br />
3) Клоны отличаются друг от друга лишь параметром '''clone_num''', который у оригинала равен "-1", а у клонов от 0 до N.<br />
<br />
4) Нежелательно применять клонирование к клону во избежание путаницы значений параметра '''clone_num'''.<br />
<br />
5) Если при проверке условия [[#if|if]] в поле '''obj''' указать this, это значит что if будет проводить проверку текущего объекта. Таким образом машина может сама себя проверить по параметру '''clone_num''' клон ли она и если да то какой у нее номер;<br />
<br />
=== Пример использования ===<br />
<br />
По ссылке пример использования с подробным описанием машин.<br />
<br />
[http://fs5.absolutist.com/files/wikisample/Clone.zip Download]<br />
<br />
== Параметр команды машины состояний ==<br />
<br />
В случае, когда необходимо изменить значение какого-либо параметра в командах машины состояний (например v в команде move) в процессе работы приложения, можно использовать блок "Параметр команды машины состояний" в команде ''set'' машины состояний. Приведу пример использования этого блока.<br />
<br />
Пусть есть 2 машины: управляющая и управляемая.<br />
<br />
[[Файл:Stm1.jpg|300px]][[Файл:Stm2.jpg|300px]]<br />
<br />
Управляемая машина практически пустая и не содержит каких либо данных о движении, но тем не менее при запуске она будет двигаться, меняя направление. Это движение - заслуга управляющей машины, которая на ходу изменяет параметры движения управляемой. Рассмотрим более детально ее состояния.<br />
<br />
В первом состоянии "wait" мы пытаемся изменить скорость движения управляемой машины. Для этого указали объект (sun), состояние в котором хотим поменять параметр (у машины sun это состояние move), имя команды в которой меняем параметр (в данном случае это move), номер команды (если таких команд несколько, то нужно указать порядковый номер начиная с 0; в нашем случае команда одна), имя параметра (мы хотим изменить скорость, поэтому имя параметра v) и значение (указали значение 200). После этого переходим в следующее состояние.<br />
<br />
В состоянии "1" управляющей машины сначала мы вывели объект sun из состояния move, изменили параметр целевой координаты x на 512 и затем вернули в состояние move, чтобы применить изменения параметров. Таким образом управляемая машина начала движение в x=512 со скоростью 200. Через 2 секунды мы переводим управляющую машину в состояние "2", где аналогичным образом изменяется целевая координата на -512.<br />
<br />
Такой способ задания параметров может найти применение в случае, когда параметры нужно задавать переменными.<br />
<br />
[[Category:Main objects]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Machine&diff=6897Machine2015-03-10T07:43:46Z<p>Odyadina: /* Свойства */</p>
<hr />
<div>{{TOC right}}<br />
[[Machine]] - [[Object|объект]] '''машина состояний''' (state machine) позволяет описывать сложное поведение игровых объектов. Для машин с типовым набором состояний и поведений вводятся отдельные типы объектов. Например, кнопка, по своей сути, является машиной состояний.<br />
<br />
== Введение ==<br />
<br />
Логика поведения машины разбивается на отдельные узлы (состояния). Машина всегда находится строго в одном состоянии. Переход из одного состояния в другое происходит либо в результате внешнего воздействия на машину, либо в результате окончания некоторых процессов протекающих внутри неё<br />
<br />
Любая машина состояний может быть изображена в виде графа с кружочками и стрелками. У машины всегда активно строго одно состояние (ниже это изображено на левом рисунке темным кружком):<br />
<center><br />
[[Файл:def_states.png]]<br />
</center><br />
Машина состояний не обладает памятью. Это означает, что для анализа того, что произойдет в данном состоянии, неважно как мы в него попали, и какова была предыстория переходов. Важно, только, что мы находимся в этом состоянии. Такое отсутствие памяти упрощает анализ логики машины, так как каждый раз мы концентрируемся на одном конкретном состоянии, а всю логику работы разбиваем на отдельные кирпичики-состояния.<br />
<br />
Выше на правом рисунке изображено некоторое состояние. При входе в него, происходит инициализация состояния. Если на объект оказываются внешние воздействия, то он может покинуть состояние. Наконец, внутри состояния могут работать различные процессы.<br />
<br />
Все команды состояния, разбиваются на три группы:<br />
* '''[[#Инициализация|Инициализация]]''':<br />
** '''[[#draw|draw]]''' - установка графического ресурса;<br />
** '''[[#init|init]]''' - инициализация параметров машины (координаты и т.п.);<br />
** '''[[#set|set]]''' - установка состояния другого объекта;<br />
** '''[[#play|play]]''' - проиграть звук;<br />
** '''[[#var|var]]''' - переменная, которой присваивается значение параметра объекта;<br />
** '''[[#buy|buy]]''' - запуск процедуры in-app покупки;<br />
** '''[[#download|download]]''' - запуск процедуры закачки контента.<br />
* '''[[#Процессы|Процессы]]''':<br />
** '''[[#wait|wait]]''' - задержка по времени;<br />
** '''[[#move|move]]''' - равномерное движение;<br />
** '''[[#rot|rot]]''' - вращение вокруг точки пивота;<br />
** '''[[#alpha|alpha]]''' - изменение прозрачности;<br />
** '''[[#scale|scale]]''' - изменение размера;<br />
** '''[[#phys|phys]]''' - ускоренное движение;<br />
** '''[[#rgb|rgb]]''' - изменить rgb-каналы;<br />
** '''[[#spline|spline]]''' - движение по сплайну (по кривой).<br />
* '''[[#Воздействия|Воздействия]]''':<br />
** '''[[#click|click]]''' - что делать при клике на машине;<br />
** '''[[#drop|drop]]''' - на машине отпущена клавиша мыши;<br />
** '''[[#drag|drag]]''' - машину схватили и тащат;<br />
** '''[[#throw|throw]]''' - машину схватили и кинули;<br />
** '''[[#apply|apply]]''' - сработает при пересечении машины с линией или объектом;<br />
** '''[[#touch_in|touch_in]]''' - наведение мыши/пальца на машину, если палец "тащат" по экрану;<br />
** '''[[#touch_out|touch_out]]''' - выведение мыши из машины, если палец "тащат" по экрану;<br />
** '''[[#touch_up|touch_up]]''' - отжатие мыши от машины;<br />
** '''[[#tap|tap]]''' - умный тач;<br />
** '''[[#mouse_in|mouse_in]]''' - наведение мыши на машину даже если не нажата кнопка мыши;<br />
** '''[[#mouse_out|mouse_out]]''' - выведение мыши из машины даже если не нажата кнопка мыши.<br />
<br />
Кроме этого, есть команда '''[[#if|if]]''', вызываемая другими командами. В ней описываются некоторые логические условия, выполнение которых говорит команде (которая вызвала этот '''if'''), что можно завершать работу. Для разных команд использование этого параметра несколько '''отличается'''!<br />
<br />
Начальные понятия и методы работы с машинами состояний находятся в [[Learning|уроках]],<br />
начиная с [[Checkbox как машина состояний|третьего]].<br />
<br />
== Свойства ==<br />
<br />
Общие для всех объектов свойства описаны в документе [[Object|Object]].<br />
Дополнительные свойства:<br />
<br />
* '''в опции''' - да - машина будет сохранять свое состояние в опции и при следующей инициализации инициал-ся не в первом состоянии, а в состоянии, записанном в опциях.<br />
* '''Состояние''' - Состояние в котором будет находиться машина при инициализации. Если ничего не указано - первое состояние в списке состояний.<br />
* '''Хранить нажатость''' - нужно ли сбрасывать нажатость при изменении состояния.<br />
* '''res''' - графический ресурс машины. Может отсутствовать. Перетягивается из редактора ресурсов(поле должно быть в состоянии редактирования).<br />
* '''states''' - По двойному клику, или по нажатию на кнопку с тремя точками открывается список состояний.<br />
* '''отладка''' - Отображать в окне состояний текущий объект.<br />
* '''курсор''' - Графический ресурс курсора текущего и всех дочерних объектов.<br />
* '''прокликиваемая''' - 0 - машина не пропускает клик, 1 - машина пропускает клик, 2 - машина обрабатывает клик и пропускает его дальше.<br />
<br />
== Инициализация ==<br />
<br />
При попадании в состояние, сразу выполняются команды инициализации init, draw, set, buy, var. Если в этих командах нет параметра break, они все выполняются до запуска процессов. Параметр break (со значением 1) прерывает выполнение команд инициализации данного типа. Их можно перезапустить по окончанию команд процессов.<br />
<br />
'''''Замечание.''''' По возможности, нужно избегать передачи значений другим объектам, в начальном состоянии машины, так как такие команды будут выполнятся даже тогда, когда машина будет выключена на визуальной сцене.<br />
<br />
=== draw ===<br />
<br />
Команда определяет графический ресурс (картинку, которую надо рисовать в данном состоянии). Её параметры:<br />
<br />
* '''res''' - ресурс картинки (перетаскивается из редактора ресурсов);<br />
* '''f''' - начальный кадр;<br />
* '''ft''' - длительность кадра в миллисекундах;<br />
* '''loop''' - число повторов (зацикливаний анимации); если -1, то бесконечно; отсутствует или 0 - будет проигран один раз;<br />
* '''rev''' - играть анимацию в обратном порядке; 0 - прямой порядок проигрывания, 1 - обратный порядок проигрывания;<br />
* '''go''' - перейти в состояние;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]] для условия перехода; можно использовать логические операторы (см. [[#if|if]]);<br />
* '''break''' - прервать команды.<br />
<br />
Пустая команда draw (без параметров) "сбрасывает" текущую картинку и в этом состоянии ничего рисоваться не будет. Если в общих параметрах объекта (в базовой панеле свойств) задан ресурс рисования, и он во всех состояниях одинаков, то его можно в состоянии не задавать.<br />
<br />
Если параметра loop нет, кадры анимации проиграются один раз. Чтобы зациклить их, необходимо установить loop=-1 или нужное число раз. Аналогично параметру loop других команд, первый раз draw выполняется в любом случае. Дальнейшие её повторы определяются значением loop. Однако, в отличие от других команд, loop повторяет только '''данную''' команду draw (даже если она не первая).<br />
Для работы loop '''необходимо''' чтобы в редакторе ресурсов в настройках анимации '''было отключено''' зацикливание(looped).<br />
<br>Если есть анимация открывающейся и закрывающейся книги (коробки, двери и т.д.) не обязательно подгружать в проект две анимации, можно использовать одну, но запускать ее в обратном порядке, для этого есть параметр '''rev'''.<br />
<br />
=== init ===<br />
<br />
====Параметры объекта====<br />
<br />
* '''x''','''y''' - координата точки пивота относительно сцены или родительского объекта;<br />
* '''ang''' - угол поворота в градусах; отчитывается вниз от оси x, или вверх, если отрицательный;<br />
* '''al''' - Прозрачность: от 0 (прозрачен) до 1 (не прозрачен);<br />
* '''sx''','''sy''' - масштаб машины по осям (если 1, то это исходный размер; 0.5 - в два раза меньше);<br />
* '''vis''' - видимость - видимость машины (1 - видима, 0 - невидима), если vis = 0, это равноценно отключению объекта в редакторе;<br />
* '''z координата''' - координата машины по z.<br />
* '''z приращение''' - приращение координаты машины по z относительно текущего<br />
* '''прокликиваемая''' - если 1, то картинка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то клик обрабатывается, но передается дальше;<br />
<br />
====Параметры движения====<br />
<br />
* '''v''' - скорость для команды move<br />
* '''vr''' - угловая скорость для команды rot<br />
* '''vx''','''vy''' - начальная скорость для команды phys<br />
* '''ax''','''ay''' - ускорение для команды phys<br />
<br />
====Системные действия====<br />
<br />
* '''показать рейтинг''' - значение 1 означает, что при выполнении этого инита будет показано окно iOS рейтинга.<br />
Если на девайсе была нажата кнопка "отрейтинговать", то в опции запишется параметр rating значение 1, если нажата кнопка "позже" - rating 2, "никогда" - rating 3.<br />
* '''закрыть приложение''' - значение 1 означает, что при выполнении этого инита приложение будет закрыто.<br />
* '''перезагрузить лэйаут''' - значение 1 означает, что при выполнении этого инита будет перезагружен лэйаут.<br />
* '''вернуться назад''' - начение 1 означает, что при выполнении этого инита произойдет возврат на предыдущий экран.<br />
* '''реклама AdMob''' - 1 - показать, 0 - спрятать, -1 - не изменять состояние.<br />
* '''курсор''' - меняет текущий курсор мыши на указанный графический ресурс. Перетягивается из редактора ресурсов, поле должно быть в состоянии редактирования.<br />
* '''id внешней ссылки в текстовой базе''' - Ссыслка будет взята из текстовой базы в соответствии с текущим маркетом.<br />
* '''[[#Clone|clone]]''' - Значение 1 означает, что в текущем местоположении машины будет создана ее копия<br />
<br />
====Переходы и параметры выполнения====<br />
<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]] для условия выполнения; можно использовать логические операторы (см. [[#if|if]]);<br />
* '''break''' - прервать команды.<br />
<br />
Так же, как и при инициализации картинки ('''draw'''), вызов команды ('''init''') переопределяет только те параметры, которые в ней указаны. Остальные параметры (заданные в других состояниях или в общих свойствах объекта) остаются без изменений<br />
<br />
=== set ===<br />
<br />
Перевод другого объекта в некоторое состояние или изменение его параметров.<br />
<br />
* '''obj''' - изменяемый объект (выбирается из списка объектов). В значении объекта можно указать this, это значит что машина сама себе пропишет какой то параметр или состояние.<br />
* '''scr_param''' - глобальный либо текущий экран, параметры которого меняем.<br />
* '''scr_state''' - экран, состояние которого меняем.<br />
* '''parent''' - Объект, который будет установлен в качестве родителя объекту из obj. Объект obj будет оторван от текущего своего родителя и добавлен в детей объекта parent.<br><br />
* '''st''' - состояние в которое переводится объект.<br><br />
* '''par''' - параметр объекта для установки, используется вместе с val, val_obj, val_txt, val_scr,val_vid,val_res,val_node.<br />
* '''mSt''' - Состояние машины в котором будем изменять параметр команды.<br />
* '''mCmd''' - Имя команды, параметр которой меняем.<br />
* '''mCmdN''' - Порядковый номер в перечне одноименных команд состояния.<br />
* '''mPar''' - Установить этот параметр команды в значение val.<br />
* '''val_obj''' - id объекта, будет записано в в par<br />
* '''val_txt''' - id текста, будет записано в в par(параметр для текстов "txtID")<br />
* '''val_vid''' - id video, будет записано в par(параметр для видео "video" - RGB, "videoA" - Alpha)<br />
* '''val_scr''' - id экрана, будет записано в в par<br />
* '''val_res''' - Новое значение графического ресурса (перетаскивается из редактора ресурсов). (пока не работает)<br />
* '''val_node''' - Новое нода графа (выбирается из списка, при заданном объекте)<br />
* '''val''' - значение параметра объекта для установки<br />
* '''var''' - имя переменной данной машины, значение которой присваивается в параметр par объекта obj<br />
* '''round''' - округлить значение, записываемое в val<br><br />
* '''position''' - объект указанный в поле '''obj''' будет отпозиционирован относительно указанного объекта в этом поле ( можно одновременно и задавать состояние '''st''' в которое перевести объект ( поле obj ) ); <br />
* '''pos_dx''' - смещение по оси X от точки пивоты объекта из поля выше ( если это поле не указывать, смещение будет = 0 );<br />
* '''pos_dy''' - смещение по оси Y от точки пивоты объекта из поля выше ( если это поле не указывать, смещение будет = 0 )<br />
* '''scr''' - экран на который мы хотим перейти<br />
* '''user''' - 1 - сохранять значения для текущего пользователя. Для всех типов объектов кроме options этот флаг игнорируется<br><br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]] при выполнении которого происходит отработка команды set. <br />
* '''break''' - прервать выполнение команд set на этой команде (запустить их снова можно из команд процессов).<br />
<br />
Так как все объекты (не только машины) имеют состояния, то при помощи команды set можно их менять. Стоит обратить внимание на то, что когда в параметрах (любых команд) встречается st, речь идет о состоянии другого объекта, а если go, то данной машины состояний.<br />
<br />
=== play ===<br />
<br />
Проиграть звук.<br />
<br />
*'''snd''' - короткий звук (перетаскивается из редактора ресурсов);<br />
*'''voice''' - голос (запускается как звук, но без цикла и с громкостью голоса) (перетаскивается из редактора ресурсов);<br />
*'''mus''' - длинный звук (перетаскивается из редактора ресурсов);<br />
*'''preload''' - указанный звук будет загружен в память, но не будет проигрываться прямо сейчас. Для ускорения его старта потом;<br />
*'''loop''' - зациклить звук (звуки);<br />
*'''mus_loop''' - позволяет выбрать зацикливать музыку или нет.По умолчанию установлено "да".<br />
*'''repeat''' - Число повторов выбранного звука при отключенном loop;<br />
*'''mus_stop''' - остановить текущую музыку (''mus_stop=1'');<br />
*'''stop''' - остановить указанный в поле snd звук или голос. Для затухания используется fadeout.<br />
*'''mus_fading''' - Время затухания предыдущей мелодии в ms. Использовать совместно с mus.<br />
*'''volume''' - установить громкость для всех звуком данной машины - тех что уже играют и тех, что будут запущены впоследствии;<br />
*'''не выгружать''' - позволяет продолжать проигрывание звука при смене экранов.<br />
*'''go''' - выбор состояния, в которое нужно перейти после проигрывания музыки/звука/голоса.<br />
*'''if''' - номер (начиная с нуля) условия перехода [[#if|if]].<br />
<br />
Особенности применения:<br />
<br />
*Короткий звук (''snd'') нельзя запустить в первом (инитном) состоянии машины. Для того, чтобы запустить звук сразу при загрузке экрана, нужно в первом состоянии машины записать мгновенный переход во второе состояние мамашины (например, команда ''wait'', поле ''go'', в поле выбрать второе состояние), а во втором состоянии уже запустить звук. Если звук нужно зациклить и проигрывать какое-то количество раз (''loop=1,2,3,..,n'') или бесконечно (''loop=-1''), то нужно проследить чтобы состояние, в котором запускается звук, не вызывалось повторно во время проигрывания звука, иначе возникнет наложение звуков. Если во время проигрывания звука машина меняет свое состояние, звук продолжает играть. Если в одной машине почти одновременно воспроизводится несколько звуков, то они прерывают друг друга. Если каждый звук воспроизводится в отдельной машине, то они звучат параллельно.<br />
*Длинный звук (''mus'')- музыка. На экране не может воспроизводится несколько длинных звуков одновременно. Любой запуск длинного звука независимо от того, в какой машине он осуществляется, будет прекращать проигрывание предыдущего звука. Музыка, которая проигрывается на глобальном экране, проигрывается на всех экранах проекта.<br />
*'''stop''' - если не указан звук и голос, то команда остановит все звуки, запущенные этой машиной.<br />
<br />
=== var ===<br />
<br />
Переменная, которой присваивается значение параметра объекта<br />
<br />
*'''name''' - имя переменной;<br />
*'''tp''' - тип переменной;<br />
*'''obj''' - объект, используемый далее;<br />
*'''par''' - имя параметра, значение которого присваивается переменной;<br />
*'''val''' - значение переменной, если отсутствуют obj и par;<br />
*'''user''' - если стоит "1", то будет считываться с текущего профиля в опциях<br />
*'''func''' - в выпадающем списке можно выбрать функцию:<br />
**'''random''' - использует arg1 и arg2, возвращает случайное целое число в диапазоне arg1 .. arg2.<br />
**'''conc''' - объединяет 4 строки arg1,arg2,arg3,arg4. Возвращает строку, в которой соединены все строки<br />
**'''exp''' - экспонента от аргумента arg1.<br />
**'''ln''' - натуральный логарифм аргумента arg1.<br />
*'''arg1''' - аргумент функции<br />
*'''arg2''' - аргумент функции<br />
*'''arg3''' - аргумент функции<br />
*'''arg4''' - аргумент функции<br />
<br />
Обозначенная переменная существует (может использоваться) только в текущем состоянии. Переменная может определятся в одном состоянии только один раз. Если созданной переменной нужно изменить значение в рамках состояния, это можно сделать через другую переменную или через параметр опций ([[Options]]). Если ее значение нужно использовать в другом состоянии, то оно присваивается параметру опций, а затем заново считывается в новом состоянии. Переменные можно указывать в поле ''val'' с другими математическими действиями и цифрами, при этом каждое действие заключать в скобки. Если в поле ''val'' указать имя переменной ''А'' без скобок - воспримется строка ''А'', если указать в скобках - воспримется значение переменной.<br />
<br />
=== buy === <br />
<br />
'''(in-app совершить in-app покупку)'''<br />
<br />
При переходе в состояние, данная команда открывает системное окно с предложением совершить in-app покупку. В зависимости от действий игрока, покупка может произойти (успех) или не произойти (провал).<br />
<br />
* '''id покупки''' - внутренний id покупки для приложения, указывается в объекте [[Store]];<br />
* '''объект(успех)''' - объект, которому сообщается об удачной покупке;<br />
* '''состояние(успех)''' - состояние в которое переводится выбранный объект в случае успешной покупки;<br />
* '''объект(провал)''' - объект, которому сообщается о неудачной покупке;<br />
* '''состояние(провал)''' - состояние в которое переводится объект в случае неудачной покупки.<br />
<br />
=== download ===<br />
<br />
'''(скачать загружаемый контент)'''<br />
<br />
При переходе в состояние будет совершена попытку закачать контент.<br />
* '''url''' - ссылка на zip архив с контентом в интернете.<br />
* '''объект успех''' - объект, которому в случае успешной закачки будет задаваться указанное состояние.<br />
* '''состояние (успех)''' - состояние, которое будет устанавливаться выше указанному объекту, в случае успешной закачки.<br />
* '''объект (провал)''' -объект, которому, в случае неудачи закачки, будет устанавливаться указанное состояние.<br />
* '''состояние (провал)''' - состояние, которое, в случае неудачи закачки,будет устанавливаться выше указанному объекту.<br />
* '''счетчик прогресса''' - объект, типа счетчик, который отображает прогресс закачки контента. Крайне желательно, что бы он измерялся в диапазоне от 0 до 100.<br />
<br />
Существует несколько причин при которых вызывается состояние "провал". Для того что бы сообщить пользователю, по какой именно причине возник провал закачки, следует идентифицировать причины провала. Это возможно сделать с помощью параметра <br />
<pre><br />
downloadErrCode<br />
</pre><br />
Ниже приведены значение параметра которые помогут вывести нужное текстовое сообщение :<br />
<pre><br />
GCUSTOM_ERROR_CODE_ERROR_UNKNOWN = 1, //!< ошибка не классифицирована<br />
GCUSTOM_ERROR_CODE_WIFI_DISABLED = 2, //!< отключен WIFI<br />
GCUSTOM_ERROR_CODE_SDCARD_UNAVAILABLE = 3, //!< SD-карта недоступна<br />
GCUSTOM_ERROR_CODE_SDCARD_FULL = 4, //!< SD-карта переполнена перед закачкой<br />
GCUSTOM_ERROR_CODE_UNZIP_FAIL = 5 //!< ошибка при распаковки пака (скорее всего на SD-карте не<br />
хватает места для распаковки <br />
</pre><br />
<br />
== Процессы ==<br />
<br />
Все команды процессов, кроме параметров описанных ниже, могут содержать параметры, совпадающие с именами других команд. В этих параметрах указывается номер (начиная с нуля) команды, которую надо запустить на выполнение, после окончания действия данной команды процесса.<br />
<br />
Если в команде процесса есть условие '''[[#if|if]]''', то после окончания работы команды она ждет пока это условие не выполнится. Только после этого переходит к следующей команде этого же типа<br />
или в другое состояние (если есть параметр go).<br />
Исключением является команда wait, которая '''не''' ждёт срабатывания '''[[#if|if]]'''. Если он по окончанию wait сработал, то происходит переходит в другое состояние, если есть параметр go.<br />
Если параметра go нет, то в любом случае запускается следующий wait (т.е. if относится только к переходу go).<br />
<br />
=== wait ===<br />
<br />
Команда паузы (временной задержки). Если параметра '''t''' нет, то срабатывает сразу.<br />
Может также использоваться для логических ветвлений, случайных переходов в другие состояния и т.д.<br />
<br />
* '''t''' - длительность выполнения команды в ms;<br />
* '''dt''' - интервал от t-dt до t+dt, внутри которого команда может быть случайно прервана (при t>t+dt прерывается в любом случае);<br />
* '''p''' - вероятность срабатывания перехода в состояние, указываемое параметром go;<br />
* '''go''' - состояние, в которое нужно перейти поле окончания времени и срабатывания условия [[#if|if]], если оно указано;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;<br />
* '''loop''' - зациклить команды;<br />
* '''break''' - прервать выполнение команд wait на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
Простейший набор параметров команды wait выглядит следующим образом:<br />
<pre><br />
<wait t="1000" go="next"/> // ждем 1000ms и покидаем состояние<br />
</pre><br />
Для программирования объектов со случайным поведением можно использовать последовательность команд wait с параметром вероятности перехода p (от 0 до 1):<br />
<pre><br />
<wait t="100" p="0.5" go="st1"/> // через t с вероятностью 1/2 перейдет в st1<br />
<wait go="st2"/> // иначе, перейдем в st2<br />
</pre><br />
Этот же синтаксис позволяет делать состояния с различным временем жизни:<br />
<pre><br />
<wait t="100" p="0.5" go="next"/> // с вероятностью 1/2 живем 100ms<br />
<wait t="100" go="next"/> // или 200ms<br />
</pre><br />
Впрочем, последнюю задачу можно решить при помощи указывания интервала dt, внутри которого произойдет окончание команды. Так, состояние, живущее от 800 до 1200ms, реализуется следующим образом:<br />
<pre><br />
<wait t="1000" dt="200" go="next"/><br />
</pre><br />
<br />
=== move ===<br />
<br />
Перемещение по сцене:<br />
* '''tx''', '''ty''' - целевые координаты в пикселях, к которым должен переместиться объект. Можно указывать переменные заданные с помощью [http://ge.absolutist.com/index.php/Machine#var_2 переменной var];<br />
* '''dx''', '''dy''' - величина смещения от текущей (если есть - tx,ty игнорируются); можно задавать смесь tx, dy или dx,ty;<br />
* '''v''' - скорость перемещения в пикселях в секунду; для фреймовой анимации, например, ходьбы скорость рассчитывается исходя из длительности одного кадра и числа кадров на фазу движения. Поэтому, в этом случае, удобнее задавать скорость;<br />
* '''t''' - время перемещения (v игнорируется);<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду move, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд движения с первой команды;<br />
* '''break''' - прервать команды - Прервать выполнение команд move на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
В большинстве команд процессов, связанных с движением, величина изменения может быть задана в абсолютных или относительных величинах. Так, могут быть указаны целевые координаты tx, ty в которые надо переместиться, или смещение dx, dy относительно текущего положения объекта.<br />
<br />
Аналогично, скорость перемещения регулируется, либо явным заданием времени выполнения команды t, либо скоростью v. Исходя из требуемого расстояния, по этой скорости вычисляется необходимое время. Скорость задается в пикселях за секунду (а не миллисекунду!)<br />
<br />
=== rot ===<br />
<br />
Вращение объекта вокруг точки пивота с координатами px,py. Эти координаты задаются относительно верхнего левого угла объекта в общей секции описания параметров объекта или командой init в данном состоянии.<br />
* '''ta''' - целевой угол поворота объекта;<br />
* '''da''' - на сколько надо повернуться (ta игнорируется);<br />
* '''v''' - угловая скорость поворота в градусах в секунду;<br />
* '''t''' - время поворота (v игнорируется);<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду rot, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд движения с первой команды;<br />
* '''break''' - прервать команды - Прервать выполнение команд rot на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
Угол отсчитывается от оси x. Если он положителен, то поворот происходит по часовой стрелке. Если отрицательный - против часовой.<br />
<br />
=== alpha ===<br />
<br />
Изменение прозрачности объекта. Меняется от 0 (полностью прозрачен) до 1 (непрозрачен)<br />
* '''ta''' - целевая прозрачность<br />
* '''da''' - на сколько надо изменить прозрачность от текущей (ta игнорируется)<br />
* '''v''' - скорость изменения прозрачности (в долях единицы в ms)<br />
* '''t''' - время изменения (v игнорируется)<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду alpha, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд alpha с первой команды.<br />
* '''break''' - прервать команды - Прервать выполнение команд alpha на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
Если у объекта прозрачность ''al=0.00'', то он невидим для всякого взаимодействия. Если у объекта прозрачность ''al=0.01'', то он видим для клика, но невидим для дропа(команда drop на объект не видит объект с прозрачностью ''0.01''). Если у объекта ''al=0.02'', то он видим и для клика, и для дропа.<br />
<br />
=== scale ===<br />
<br />
Изменение размеров объекта<br />
* '''tx''', '''ty''' - целевой масштаб по каждой оси<br />
* '''dx''', '''dy''' - на сколько изменить масштаб по каждой оси<br />
* '''v''' - скорость изменения масштаба (в долях единицы в сек.)<br />
* '''t''' - длительность выполнения команды (v игнорируется)<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду scale, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд scale с первой команды.<br />
* '''break''' - прервать команды - Прервать выполнение команд scale на этой команде (запустить их сново можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
=== phys ===<br />
<br />
Команда phys позволяет имитировать простую физику. В ней задается начальная скорость и действующая на объект сила (ускорение).<br />
<br />
* '''vx''', '''vy''' - начальная скорость<br />
* '''ax''', '''ay''' - величина ускорения по каждой оси<br />
* '''a''' - полное ускорение<br />
* '''tvx''', '''tvy''' - целевая скорость<br />
* '''tx''', '''ty''' - целевая координата<br />
* '''go''' - новое состояние - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go; команда ждет срабатывания условия, и не запускает следующую команду phys, пока if не выполнится; <br />
* '''loop''' - зациклить команды - Начать выполнение команд phys с первой команды.<br />
* '''break''' - прервать команды - Прервать выполнение команд phys на этой команде (запустить их снова можно из команд процессов). <br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
Рассмотрим подпрыгивающий мячик, который при касании с землей деформируется (вертикально сплюскивается). Это можно сделать в 3 состояния (падаем, касаемся и взлетаем). Первоначально мячик находится в координате y=-100, и имеет высоту картинки w=60. Падает он до координаты ty=0. При касании с землёй, мяч сжимается на 20 процентов (sy=0.8). При этом его центр должен опуститься на dy=0.8*w/2 = 24.<br />
<pre><br />
<br />
<st id="down"> // падаем<br />
<phys vy="0" ay="20" ty="0" go="touch"/><br />
</st><br />
<br />
<st id="touch"> // касаемся земли<br />
<move dy="24" t="300"/> // опускаем центр при сжатии<br />
<scale ty="0.8" t="300"/> // сжимаемся<br />
<move dy="-24" t="300"/> // поднимаем центр при разжатии<br />
<scale ty="1" t="300" go="up"/> // разжимаемся<br />
</st><br />
<br />
<st id="up"> // взлетаем<br />
<phys vy="0" ty="-200" go="down"/><br />
</st><br />
<br />
</pre><br />
Напомним, что если объект имеет начальную скорость взлета, равную v=sqrt(2*ay*h), то он подпрыгнет на высоту h. Однако, в данном случае, вместо задания начальной скорости при взлете, мы задаем целевую координату (ty), до которой мяч должен подпрыгнуть.<br />
<br />
=== rgb ===<br />
<br />
* '''trgb''' - целевой эффект rgb; подразумевает под собой цвет в виде HEX-кода; по-умолчанию: FFFFFF;<br />
* '''t''' - длительность выполнения команды в ms;<br />
* '''go''' - состояние, в которое нужно перейти поле окончания времени и срабатывания условия [[#if|if]], если оно указано;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]], при выполнении которой происходит переход go;<br />
* '''loop''' - зациклить команды;<br />
* '''break''' - прервать выполнение команд wait на этой команде (запустить их снова можно из команд процессов).<br />
* '''init''', '''set''', '''draw''', '''move''', '''rot''', '''alpha''', '''scale''', '''phys''' - Номер запускаемой команды.<br />
<br />
=== spline ===<br />
<br />
Сплайн позволяет перемещать машину по заранее заданной траектории.<br />
<br />
====Параметры====<br />
<br />
*'''key''' - точки сплайна по которым движется <br />
*'''t''' - время движения по траектории<br />
*'''go''' - по окончанию переход в состояние<br />
*'''if''' - условие перехода<br />
*'''loop''' - количество повторений<br />
*'''break''' - прервать команды на этой<br />
*'''wait''' - номер запускаемого действия<br />
*'''init''' - номер запускаемого действия<br />
*'''alpha''' - номер запускаемого действия<br />
*'''rot''' - номер запускаемого действия<br />
*'''move''' - номер запускаемого действия<br />
*'''set''' - номер запускаемого действия<br />
*'''phys''' - номер запускаемого действия<br />
*'''scale''' - номер запускаемого действия<br />
*'''drow''' - номер запускаемого действия<br />
<br />
====Построение сплайна====<br />
<br />
# в состоянии машины добавляем правой кнопкой мыши действие "spline"<br />
# добавляем минимально необходимые параметры: '''key''' и '''t''', указываем время движения в '''t'''<br />
# выделяем для редактирования поле '''key'''<br />
# записываем координаты точек через запятую, сначала x потом y, например: -211,-248,-151,-248,-91,-247,59,-246,60,101,60,159,1,190<br />
Если записали все координаты вручную, то можно сохранить и проверять.<br />
Или можно в окне списка состояний нажать на кнопку "build spline" (справа вверху).<br />
[[Файл:Btn spline.jpg|500px]]<br />
<br />
Окно с списком состояний закроется, появится дополнительная панель с настройками сплайна и появится возможность указывать мышкой по экрану точки для сплайна.<br />
<br />
[[Файл:Spline panel.jpg|500px]]<br />
<br />
Точки сплайна указываются кликом левой кнопки мыши по экрану.<br />
<br />
Возможности редактирования:<br />
<br />
'''режимы:'''<br />
*'''add''' - по нажатию левой кнопкой мыши по экрану - будет добавлена новая точка, которая соединится с предыдущей<br />
*'''select''' - по нажатию левой кнопкой мыши по точке сплайна появится возможность отредактировать её положение перетащив её или поменяв её координаты в полях x и у<br />
*'''delete''' - по нажатию левой кнопкой мыши по точке сплайна точка удалится<br />
<br />
Чтобы удалить все точки сплайна необходимо нажать на кнопку "'''delete all knots'''"<br />
<br />
Сохранить сплайн можно нажав на кнопку "'''Save spline'''"<br />
<br />
====Дополнительные сведения====<br />
<br />
* Время движения между двумя соседними точками всегда одинаково, то есть чем дальше друг от друга соседние точки, тем быстрее будет двигаться объект, чем ближе - тем медленней.<br />
* Координаты сплайна просчитываются относительно точки пивота родительского объекта, если соответствующая машина является подобъектом. На координаты могут влиять модификаторы родительского объекта.<br />
<br />
== Воздействия ==<br />
<br />
=== click ===<br />
<br />
Команда вызывается, если на объект кликнули мышкой. Срабатывает на её нажатие.<br />
* '''go''' - состояние в которое при выполнении команды надо перейти (если if нет, то в любом случае);<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход go.<br />
<br />
По клику машина записывает координаты клика в параметры: clickX, clickY.<br />
<br />
=== touch_in ===<br />
<br />
Наведение мыши/пальца на машину, если палец "тащат" по экрану.<br />
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.<br />
<br />
=== touch_out ===<br />
Выведение мыши/пальца из машины, если палец "тащат" по экрану.<br />
* '''go''' - состояние в которое при клике нужно перейти;<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при котором срабатывает переход ''go''.<br />
<br />
=== touch_up ===<br />
<br />
Отжатие мыши от машины<br />
<br />
* '''go''' - состояние в которое при отжатии мыши нужно перейти;<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при котором срабатывает переход ''go''.<br />
<br />
=== mouse_in ===<br />
<br />
Срабатывает при наведение мыши/пальца на машину даже если не нажата кнопка мыши, работает на desktop-ных системах (OSX, Windows)<br />
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.<br />
<br />
=== mouse_out ===<br />
Срабатывает при выведение мыши/пальца из машины даже если не нажата кнопка мыши, работает на desktop-ных системах (OSX, Windows)<br />
* '''go''' - состояние в которое при выполнении команды нужно перейти (если if нет, то в любом случае);<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]], при срабатывании которого, происходит переход ''go''.<br />
<br />
=== drag ===<br />
<br />
Данная команда позволяет "таскать" объект по сцене нажав и удерживая клавишу мишки или (палец в случае сенсорного устройства) на нем.Так же есть возможность ограничить разрешенную область таскания, за пределы которой объект вытащить невозможно. [[Файл:drag.jpg|right]]<br />
* '''x1''' - разрешено таскать, когда координата объекта правее;<br />
* '''x2''' - разрешено таскать, когда координата объекта левее;<br />
* '''y1''' - разрешено таскать, когда координата объекта ниже;<br />
* '''y2''' - разрешено таскать, когда координата объекта выше;<br />
* '''if''' - номер команды условия (начиная с нуля) разрешения таскания;<br />
* '''obj''' - объект у которого надо изменить состояние;<br />
* '''st''' - новое состояние объекта obj;<br />
* '''за пивот''' - "да" - таскать объект за пивот, "нет" - за ту точку, за которую схватили<br />
* '''приклеивать''' - приклеивать при клике к мышке.<br />
<br />
=== dragRot ===<br />
<br />
Данная команда позволяет вращать объект вокруг точки пивота. Нажав и удерживая клавишу мишки или палец (в случае сенсорного устройства) на нем, мы можем вращать его по часовой либо против часовой стрелки. При многократном вращении вокруг своей оси значение его угла не накапливается, а обнуляется выходя за границы [360 ; -360] градусов. [[Файл:dragRot.jpg|right]]<br />
* '''if''' - номер команды условия (начиная с нуля) разрешения таскания;<br />
* '''obj''' - объект у которого надо изменить состояние;<br />
* '''st''' - новое состояние объекта obj;<br />
* '''maxVel''' - Максимальная скорость вращения градус/сек;<br />
* '''objStart''' - объект при начале вращения;<br />
* '''stStart''' - его новое состояние;<br />
* '''objEnd''' - объект при завершении вращения;<br />
* '''stEnd''' - его новое состояние;<br />
<br />
=== drop ===<br />
<br />
Если нажатая кнопка мышки отпускается, вызывается эта команда. Обычно она используется в связке с командой drag<br />
* '''obj''' - объект, на который надо уронить таскаемый объект;<br />
* '''go''' - состояние в которое переходим при отпускании мышки;<br />
* '''if''' - номер (начиная с нуля) условия [[#if|if]] разрешения бросания.<br />
<br />
Рассмотрим совместное применение команд drag и drop на следующей задаче. Пусть есть ключ и ящик. Ключ можно взять мышкой и перетащить, бросив на ящик. Ящик при этом должен постепенно стать прозрачным, а ключ уменьшиться до нуля. Машина состояний для ключа выглядит следующим образом:<br />
<pre><br />
<br />
<st id="drag"><br />
<drag x1="-350" x2="350" y1="-250" y2="250"/><br />
<drop obj="box" go="open"/><br />
</st><br />
<br />
<st id="open"><br />
<set obj="box" st="open"/><br />
<scale tx="0.01" ty="0.01" t="500" go="hide"/><br />
</st><br />
<br />
<st id="hide"><br />
<init x="268" y="30"/><br />
<scale tx="1" ty="1" t="500" go="drag"/><br />
</st><br />
<br />
<br />
</pre><br />
Ящик:<br />
<pre><br />
<br />
<st id="close"> // начальное состояние ящика<br />
<init al="1"/> // если его кто-то сюда переведет - он появится.<br />
</st><br />
<br />
<st id="open"> <br />
<alpha ta="0" t="500"/> // исчезает по прозрачности за 500 ms<br />
</st><br />
<br />
</pre><br />
<br />
====Использование свойства "Условие перехода" ====<br />
<br />
Можно прописать условие, при котором выполняется переход при дропе.<br />
[[Файл:Drop_if.png|300px|thumb|right]]<br />
<br />
С помощью этого условия мы можем научить наш объект выполнять разные задачи в зависимости от того, как именно его дропнули.<br />
Пусть есть объект который можно таскать. Когда объект не таскается должен быть включен флаер, привязанный к этому объекту. При клике на объект, он должен поворачиваться на 90 градусов. При дропе на соответствующую маску объект стает на свое место(Если выполнены условия, к примеру: установлен предыдущий объект и наш объект имеет правильный угол). Если дроп в любое другое место, то должен включится флаер.<br />
<br />
Для того, чтобы научить машину различать клик по ней и ее таскание сделаем следующее. Пропишем ей 2 состояния: click и drag, а также выставим ей параметр "хранить нажатость" = 1. В click будем вычислять координаты объекта и записывать объекту параметр допустимого смещения при котором таскание будет восприниматься как клик. (В данном примере эти параметры: cx, cy, vx, vy. А допустимое смещение составляет 10 пикселей.)<br />
<br />
В состоянии drag будем проверять попадает ли координата объекта при дропе в границы допустимого смещения. Для того чтобы сравнить параметр объекта с переменной, вычтем из нашего объекта, то что мы записали в click. В зависимости от условий и места дропа переходим в соответствующее состояние.<br />
<br />
[[Файл:Click.png|330px]] [[Файл:Drag st.png|630px]]<br />
<br />
=== throw ===<br />
<br />
Если на объект наступили мышкой, не отпуская кнопки, мышку оттащили и затем отпустили, вызывается команда throw со следующими параметрами:<br />
* '''go''' - состояние, в которое, при клике, надо перейти;<br />
* '''if''' - номер (начиная с нуля) команды [[#if|if]] разрешения бросания;<br />
* '''force''' - получаемая скорость равна разнице пикселей от начала бросания (мышь нажата) до его конца (мышь отжата), умноженная на этот параметр. По умолчанию он равен 1.<br />
<br />
Сработав, эта команда задает начальные значения скорости для команды phys, поэтому должна использоваться совместно с ней (см. ниже пример).<br />
<br />
=== tap ===<br />
<br />
* '''go''' - Состояние в которое нужно перейти после окончания времени.<br />
* '''if''' - номер (начиная с нуля) условия [[#if|if]] разрешения бросания.<br />
<br />
=== apply ===<br />
<br />
Вызывается, если данная машина пересеклась с другой. Обычно используется в совокупности с throw, move, phys, drag.<br />
* '''obj''' - сработает , если пересеклись с этим объектом;<br />
* '''x1''' - сработает, если центр объекта левее этого x-са;<br />
* '''x2''' - сработает, если центр объекта правее этого x-са;<br />
* '''y1''' - сработает, если центр объекта выше этого y-ка;<br />
* '''y2''' - сработает, если центр объекта ниже этого y-ка;<br />
* '''rm''' - радиус этой машины (если rm=0, то она считается прямоугольной)<br />
* '''ro''' - радиус объекта obj (если ro=0, то он считается прямоугольным)<br />
* '''st''' - состояние, в которое надо перевести объект obj<br />
* '''go''' - состояние, в которое надо перейти при срабатывании;<br />
* '''if''' - номер (начиная с нуля) команды условия [[#if|if]] разрешения применения команды apply.<br />
<br />
[[Файл:Апплай.png|500px]]<br />
<br />
Блок схема работы '''apply'''<br />
<br />
[[Файл:Блок схема apply.png|500px]]<br />
<br />
* Сначала у нас проверяется координаты '''x1''', '''x2''', '''y1''', '''y2'''.<br />
* Далее проверяет если '''obj'''<br />
* Если '''obj''' нет, то идёт проверку, и выдаёт результат<br />
(если при этом если '''x1''', '''x2''', '''y1''', '''y2''' нет, то они считаются по ширине и высоте всего экрана.)<br />
* Если есть '''obj''', то проверяет есть ли радиусы '''rm''', '''ro'''.<br />
* Если он есть, то значит у нас '''apply''' по кругам<br />
* Если нет, то проверяем наличие '''x1''', '''x2''', '''y1''', '''y2'''.<br />
* Если они есть, то проверка и результат.<br />
* Если их нет, то проверка идёт по шейпам объектов, и выдаётся результат/<br />
Если не будет стоять ни каких галочек, то проверка будет идти по шейпам объектов.<br />
<br />
<br />
Пусть, например, есть снаряд, который при помощи мышки надо кинуть в "тыкву". Если мы промахнулись, снаряд должен вернуться обратно, а с тыквой ничего не произойти. Если мы в тыкву попадаем, снаряд также возвращается, а тыква "взрывается":<br />
<pre><br />
<br />
<st id="trow"><br />
<init x="-350" y="150"/> // начальное положение<br />
<throw go="fly"/> // бросаем<br />
</st><br />
<br />
<st id="fly"><br />
<phys ay="100"/> // летим<br />
<apply y2="300" go="throw"/> // с землей<br />
<apply obj="тыква" rm="8" ro="10" st="bang"/> // с тыквой<br />
</st><br />
<br />
</pre><br />
<br />
== Условия ==<br />
<br />
=== if ===<br />
<br />
В состоянии может быть произвольное число команд if. Их номера (начиная с нуля) указываются<br />
в параметре if других команд. Эти номера можно соединять при помощи логических связок:<br />
* '''&''' - логическое '''и''' (вместо значка '''&''' можно использовать запятую ''',''');<br />
* '''|''' - логическое '''или''';<br />
* '''!''' - логическое '''не'''.<br />
Пример записи логического выражения в поле if некоторой команды: '''(1&2)|(3&(!4))''',<br />
что означает: выполняется if под номером 1 и под номером 2, или под номером 3 и не под номером 4.<br />
<br />
Логические связки используются также как математической логике или любом языке программирования. <br />
Так:<br />
* A '''&''' B - истинно, если истинны оба условия A и B;<br />
* A '''|''' B - истинно, если истинно хотя бы одно условие (или оба);<br />
* '''!''' А - истинно, если условие A ложно.<br />
Скобки в логическом выражении определяют приоритет (порядок) выполнения логических операций.<br />
Отметим несколько тождеств, справедливых при формировании логических высказываний:<br />
* !(A & B) = (!A) | (!B)<br />
* !(A | B) = (!A) & (!B)<br />
* !(!A) = A<br />
<br />
Если при формировании условия (ниже) есть несколько проверок, то они соединены логическим '''и'''.<br />
Т.е., если хотя бы одна из них не выполняется, то считается, что условие не выполнилось.<br />
<br />
Параметры команды:<br />
* '''obj''' - находится ли объект obj в состоянии st или имеет ли его параметр par значение val. В этом поле можно указать this, это значит что if будет проводить проверку текущего объекта. Добавлено это вместе с параметром clone. Клоны рождаются и умирают в рамках одного экрана. Для различия клонов между собой машина имеет уникальный параметр "clone_num" у оригинала = -1, у клонов от 0 до N, собственно с помощью this машина может сама себя проверить клон ли она и если да то какой у нее номер;<br />
* '''st''' - имя состояния в котором может находиться объект obj;<br />
* '''par''' - имя параметра объекта obj, значение которого сравнивается с полем val;<br />
* '''val''' - значение параметра par, которое проверяется у объекта obj;<br />
* '''val_txt''' - Значение текстового параметра объекта для проверки условия;<br />
* '''val_res''' - Значение ресурсного параметра объекта для проверки условия;<br />
* '''op''' - операция сравнения par op val. Если операции нет, то предполагается проверка на равенство par=val. Иначе используются операторы:<br />
** '''<''' - меньше (par < val);<br />
** '''>''' - больше (par > val);<br />
** '''!=''' - не равно (par != val);<br />
** '''<>''' - не равно (par <> val);<br />
** '''>=''' - больше или равно (par >= val);<br />
** '''<=''' - меньше или равно (par <= val);<br />
* '''curScr''' - если текущий экран совпадает с этим, то условие выполнилось;<br />
* '''prScr''' - если предыдущий экран совпадает с этим, то условие выполнилось;<br />
* '''wasScr''' - если был (когда либо) этот экран, то условие выполнилось.<br />
* '''buy''' - был ли куплен данный inn-app (проверяется флаг поля в объекте [[Options]]);<br />
* '''url''' - валиден (правилен и может быть запущен) ли данный интернет-адрес;<br />
* '''is_mus''' - играет ли сейчас музыка (значение 1);<br />
* '''guest''' - объект который установил состояние (используется вместо параметра obj). Если указанный объект не менял состояние этой машины, то условие не срабатывает.<br />
<br />
Если использовать obj, par, val, то будет происходить проверка на равенство значения параметра объекта и значения записанного в поле val.<br />
Если же использовать obj, par, op, val, то будет происходить проверка в соответствии с операцией сравнения значения параметра объекта и значения записанного в поле val.<br />
<br />
Для проверки текущего значения прозрачности у объекта можно воспользоваться параметром ''cur_al''<br />
<br />
== Математика ==<br />
<br />
=== Основные математические операции ===<br />
Математика в appsalute creator представлена 6-ю основными операциями: (плюс), (минус), (умножить), (поделить), (целочисленное деление), (остаток от деления) <br><br />
Организована благодаря совместному использованию '''[[#var|var]]''' и '''[[#set|set]]'''. <br />
[[Файл:Example_mod.png|300px|right|Пример использования операции остатка от деления]]<br />
''(плюс)'' '''+'''<br><br />
''(минус)'' '''-'''<br><br />
''(умножить)'' '''*'''<br><br />
''(поделить)'' '''/'''<br><br />
''(целочисленное деление)'' '''\'''<br><br />
''(остаток от деления)'' '''%'''<br><br />
<br><br />
Примеры использования последних двух операций:<br><br />
5\2=2<br><br />
5%2=1<br><br />
<br />
=== var ===<br />
Благодаря использованию '''[[#var|var]]''' существует возможность cчитать любой числовой параметр любого объекта. Например: x - координату какой-то машины, текущее значение любого объекта counter или timer и конечно же считывание значения любого параметра из опций! Каким образом это устроено? Рассмотрим подробнее '''[[#var|var]]''': <br><br />
[[Файл:VAR.png|right]]<br />
*'''name''' - здесь выбираем имя для нашей будущей переменной, которой будем оперировать далее<br />
*'''obj''' - выбирается объект, параметры которого мы хотим считать<br />
*'''par''' - параметр, который нужно вычитать из объекта, указанного выше<br />
*'''val''' - указывается числовое значение, которое будет установлено по умолчанию в случае отсутствия obj и par<br />
*'''user''' - если стоит "1", то будет считываться с текущего профиля в опциях<br />
На изображении справа можно наблюдать каким образом организован '''[[#var|var]]'''. В данном случае объявлена переменная x_cor, которая считывает x-координату объекта actor_1, при этом считывание переменной происходит из текущего профиля, так, как в поле user установлено значение равное "1".<br />
<br />
=== set ===<br />
[[Файл:SET.png|right]]<br />
Использование '''[[#var|var]]''' без '''[[#set|set]]''' не имеет смысла. Так, как переменная создается, но не используется дальше. Рассмотрим следующий пример, где вычитаем x - координату из одного объекта и сохраним ее в опции, предварительно увеличив ее на 50 единиц (в данном случае 50 пикселей).<br />
На рисунке справа можно наблюдать, каким образом это сделано. В состоянии '''init''' объявляется переменная '''x_cor''', которая считывает координату '''x''' из объекта '''actor_1''', таким образом в переменную '''x_cor''' запишется положение по '''x''' объекта '''actor_1'''. Поле '''user''' в данном случае в '''1''' не обязательно устанавливать, так как работа ведется с машинами, а не с опциями. Если бы на месте '''actor_1''' оказался объект '''options''', то это было бы просто необходимо, иначе программа считает значение не из профиля. Далее в '''[[#set|set]]''' выбран объект '''options''', в параметр '''x_position''' которого будет сохранятся значение переменной '''x_cor''' увеличенной на 50. В поле '''round''' идет округление вычисляемого значения, если оно установлено в 1. Поле '''user ''' установлено в 1, это значит, что параметр '''x_position''' будет сохранен в профиль. После это выполняется сохранение опций путем задания объекту '''options''' состояния '''save'''.<br><br />
! ! !ВАЖНО: чтобы выполнить какие-то действия с '''[[#var|var]]''' его обязательно нужно указывать в поле '''val''' в '''set''', при этом, если он используется, то все выражение должно стоять в скобках. Если в поле '''val''' не используется переменная, то скобки необязательны.<br />
<br><br />
<br><br />
Существует также возможность использовать '''[[#var|var]]''' совместно с '''[[#if|if]]''', а также '''[[#var|var]]''' с '''[[#move|move]]'''<br />
<br><br />
Так же добавилась возможность записывать значение переменной в состояние "st", что значительно уменьшает<br />
необходимость в записи 1000 if-ов. При этом, тип переменной в '''[[#var|var]]''' должен быть "строка".<br />
И добавилась возможность записи переменной boolean: ((a)==(b)). true = 1, false = 0. Довольно полезная вещь,<br />
если не хотите забивать "память" ненужной математикой.<br />
<br />
=== var и if ===<br />
[[Файл:IF.png|right]]<br />
При подробном рассмотрении '''[[#if|if]]''' можно заметить, что в нем есть поле '''val''', соответственно в этом поле можно указать переменную. Таким образом в поле '''val''' необязательно указывать константу, а можно указать какую-то переменную, которая может постоянно изменяться. Например, существует два объекта, один находится состоянии покоя, а другой находится в движении. При этом первый объект (тот, который в состоянии покоя) постоянно опрашивает положение второго объекта, и в случае, если у объекта, который движется, '''х''' координата равна '''х''' координате первого объекта, то первый объект входит в состояние, где он начинает свое движение. На рисунке показан объект, который находится в состоянии покоя, рассмотрим его состояния:<br><br />
В данном объекте существует два состояния: '''init''' и '''move'''. В '''init''' объект опрашивает другой объект и в случае, когда условие срабатывает, то переходит в состояние '''move''', где начинает свое движение.<br />
В '''init''' создаем переменную, в которую записываем положение по '''x''' объекта '''actor_2''', в '''if''' проверяется условие на соответствие координат объектов '''actor_1''' и '''actor_2''', в данном случае координата объекта '''actor_2''' представлена в виде переменной '''x_cor'''. Если условие выполняется, то происходит переход в состояние '''move''', если нет, то заново проходим состояние '''init''' и повторяем вышеописанную последовательность действий.<br />
<br><br />
<br><br />
<br><br />
<br><br />
<br />
=== var и move ===<br />
Также с помощью '''[[#var|var]]''' есть возможность указать целевые координаты в '''[[#move|move]]'''. То есть, не обязательно указывать целевые координаты в виде констант, их можно указать теперь с помощью переменных. При использовании '''[[#var|var]]''' и '''[[#move|move]]''' можно организовать обмен двух объектов местами с анимацией движения. Для этого необходимо определять какой объект нажат первым, а какой вторым, сохранять их координаты через объект '''options''' и только потом менять их местами. На рисунке можно увидеть, как это организовано.<br />
[[Файл:var_move.png|1000px|thumb|center|]]<br />
Рассмотрим подробнее состояние данной машины:<br />
<br><br />
* '''init'''<br><br />
В этом состоянии ожидаем клик на объект и обнуляем параметр, который отвечает за то, какой по счету объект сейчас нажат. Так, как при обмене объектов, если мы делаем это по клику, важно знать, по какому кликнули первым, а по какому вторым.<br />
* '''check'''<br><br />
Проверяется параметр '''number''', если он равен '''0''', то это значит, что еще ничего не кликали и мы переходим в состояние, где в опции записываются координаты этого объекта, который считается нажатым первым. Если не равен '''0''', то считается, что этот объект нажат вторым и переходит в состояние, где в опции записываются координаты этого объекта, который считается нажатым вторым по счету.<br />
* '''first_object'''<br><br />
В этом состоянии записываются координаты объекта в опции. Чтобы записать координаты в опции используются '''[[#var|var]]''' и '''[[#set|set]]''' упоминаемые выше. В опции координаты первого нажатого объекта сохраняются под параметрами '''x_first''' и '''y_first'''. В конце параметру '''number''' присваиваем значение '''1''', чтобы указать, что следующий нажатый объект будет вторым по счету. <br />
* '''second_object'''<br><br />
В этом состоянии объект будет в том случае, если он будет нажатым вторым по счету, то есть после состояния '''check''' объект попадет в это состояние, где он запишет свои текущие координаты под параметрами '''x_second''' и '''y_second'''. Запись координат происходит таким же самым образом, что и в состоянии '''first_object'''. После этого он автоматически переходит в следующее состояние.<br />
* '''move_first'''<br><br />
В этом состоянии объект будет в том случае, если он был нажат первым, поэтому он будет двигаться на место второго нажатого объекта, который сохранил свои координаты в параметры'''x_second''' и '''y_second'''. Движение происходит следующим образом: сперва в переменную вычитываем координаты второго объекта, а потом в '''move''' вместо целевых координат записываем переменные, которые обязательно должны быть взяты в скобки.<br />
* '''move_second'''<br><br />
В этом состоянии объект будет в том случае, если он был нажат вторым, поэтому он будет двигаться на место первого нажатого объекта, который сохранил свои координаты в параметры '''x_first''' и '''y_first'''. Движение происходит следующим образом: сперва в переменную вычитываем координаты первого объекта, а потом в '''move''' вместо целевых координат записываем переменные, которые обязательно должны быть взяты в скобки.<br />
<br />
В результате проделанных манипуляций с машинами по кликам на две машины, они обменяются местами с анимацией движения. Это может быть очень полезным во многих мини играх!!!<br />
<br />
=== Важно знать ===<br />
* Переменная действует в рамках одного состояния, если нужно, чтобы она была глобальной, нужно сохранить ее в опции и потом в нужный момент считывать ее из опций.<br />
* Если складываем два числа, то в поле '''val''' они должны быть записаны в скобках: (5+3).<br />
* Если возникает необходимость написать какое-то более сложное арифметическое вычисление, то следует помнить, что на одно действие приходятся одни скобки. Например: (((5+3)\2)*2).<br />
* Количество открывающих и закрывающих скобок должно быть одинаковым.<br />
* В скобках можно писать переменную, если она была объявлена выше: (5+a).<br />
* Переменная может состоять из цифр и букв и знака нижнего подчеркивания.<br />
* Иногда бывает необходимым использование '''round''' в '''set''', так например, если какой-то параметр получен с помощью арифметических вычислений и потом используется его в каком-то условии, и условие проверяет параметр, как целочисленное значение, то могут возникнуть ошибки. Так, как число будет записано в следующем виде 123.0000 и программа будет считать, что оно не целочисленное, а дробное. И чтобы избавится от лишних нулей в дробной части следует округлять число.<br />
* Действия, которые требуют времени, такие как move, rot, wait и другие перестают работать для уменьшения вычислительной нагрузки на устройство.<br />
* Действия, которые не требуют времени, такие как set, init и другие продолжают функционировать.<br />
<br />
<br />
<pre><br />
Если с помощью переменной менять объекту любой параметр, например, координату X, то она<br />
запомнится (запишется как значение по умолчанию).<br />
Тогда при повторном попадании на экран считается не тот X, который указан в свойствах,<br />
а тот, который установлен через переменную.<br />
Если нужно при ините экрана возвращать начальные значения параметров,<br />
то можно сделать это двумя способами:<br />
- не использовать переменную;<br />
- создать отдельное состояние, которое будет "вручную" устанавливать начальные значения<br />
параметрам при ините экрана.<br />
Если координата (или другой параметр) меняется другим способом, то будут автоматически<br />
при ините экрана подтягиваться значения из свойств объекта.<br />
</pre><br />
<br />
=== Примеры применений ===<br />
С помощью математики можно организовать следующее:<br />
* динамические опции (изменение звука и музыки с помощью ползунка);<br />
* анимацию каунтера в играх (по окончанию уровня можно наблюдать, как изменяются очки);<br />
* подсчет очков (гибкая система подсчета очков);<br />
* обмен объектов местами (использование var и move)<br />
* увеличение z-координаты любого объекта (когда необходимо, чтобы нажатый или таскаемый объект был выше других по z);<br />
* простейший калькулятор;<br />
* и много других.<br />
<br />
== Копирование машины состояния с сохранением ссылки на себя ==<br />
Довольно часто бывает, что машина состояний ссылается только на глобальные объекты и на саму себя. При этом, если мы просто скопируем объект, он будет ссылаться на свою предыдущую копию. Этого можно избежать, сделав 3 шага:<br />
1. Переместить объект в отдельную сцену<br />
2. Скопировать данную сцену(имеется в виду обычное копирование, без ссылки)<br />
3. Перенести объект и его копию обратно, в нужную сцену<br />
4. Созданные сцены можно удалить :)<br />
<br />
== Guest ==<br />
<br />
'''Guest (гость)''' - объект, который перевел машину в текущее состояние. Пример: кнопка ''btn1'' по клику переводит машину ''mch1'' в состояние ''st1'', в этом состоянии у машины ''mch1'' гостем является кнопка ''btn1''. Гостем может быть объект любого типа, если он может менять состояние другому объекту (например: хидден-объект по нахождению может менять состояние объекту, кнопка, машина, пэчворк и т.д.)<br />
<br />
В машине состояний можно считывать (проверять) и передавать параметры и состояния гостя. Любое поле ''obj'' в выпадающем списке содержит строку ''guest'', что позволяет работать с гостем, как с любым другим объектом.<br />
<br />
=== Пример использования ===<br />
<br />
[[Файл:Guest1.jpg|left]]<br />
Пускай экран содержит 3 кнопки (''btn1'', ''btn2'' и ''btn3'') и одну машину ''mch1''. Нужно сделать так, чтобы по клику на любую из кнопок машина перемещалась в ее координаты и переводила кнопку в состояние ''disable''. Так же по клику на кнопку ''btn2'', машина должна перейти в состояние ''bonus''.<br><br />
Всем трем кнопкам по клику пропишем передавать объекту ''mch1'' состояние ''check''.<br><br><br />
Создадим в машине три состояния: ''init'' - состояние в котором машина будет находиться по умолчанию, ''check'' - состояние, которое будет вызываться тремя кнопками, в этом состоянии у машины ''mch1'' одна из трех кнопок будет гостем, ''bonus'' - последнее состояние.<br><br />
Две команды ''var'' считывают у гостя координаты, т.к. мы не знаем, какая именно кнопка перевела машину ''mch1'' в состояние ''check'', то обращаемся к гостю, а не к кнопкам. За ними следует две команды ''set'', которые передают координаты гостя машине. Еще один ''set'' переводит гостя в состояние ''disable''. И через ''wait'' осуществляется переход в состояние ''bonus'', если гость ''btn2''.<br />
<br />
<pre><br />
При смене состояния гость сохраняется, т.е. в состоянии bonus гостем останется btn2.<br />
</pre><br />
<pre><br />
Если машина изначально сама себе меняет состояния, то у нее нет гостя.<br />
</pre><br />
<br />
[[Файл:Guest2.jpg]]<br />
<br />
== Массив (Array) ==<br />
<br />
В данном объекте реализован массив, имеющий максимальную длину в 20 элементов.<br />
<br />
=== Свойства объекта массив: ===<br />
<br />
len - длинна массива. Длинна массива может как считываться, так и записываться. Влияет на количество сохраняемых объектов в Options.<br />
<br />
index1 - индекс элемента. (данный массив можно расширить до многомерного и использовать несколько индексов)<br />
<br />
val - значение элемента массива, с индексом index1<br />
<br />
a1..a20 - внутренние элементы массива(обращаться можно через свойство par объекта). Предполагается, что пользователь редактора к ним обращаться напрямую не будет, однако иногда для удобства полезны.<br />
<br />
=== Состояния объекта массив: ===<br />
<br />
get - при вызове этого состояния во внутреннюю переменную val записывается значение элемента с индексом index1<br />
<br />
set - при вызове этого состояния во внутреннюю переменную a1..a20, соответствующую индексу index1 записывается значение val<br />
<br />
load - загрузить значения массива из xml.<br />
<br />
save - сохранить элементы массива от 1 до len<br />
<br />
=== Как использовать? ===<br />
<br />
1. Загружаем массив, переводя объект array в состояние load<br />
<br />
2. Записываем значения массива<br />
<br />
а). Задаём значение свойству index1 объекта array (устанавливаем индекс ячейки, в которую будет заноситься число)<br />
б). Задаём значение свойству val объекта array (устанавливаем значение, которое будет заноситься в ячейку<br />
с индексом index1)<br />
в). Переводим объект array в состояние set<br />
<br />
3. Считываем значения массива<br />
а). Задаём значение свойству index1 объекта array (устанавливаем индекс ячейки, из которой будет считываться число)<br />
б). Переводим объект array в состояние get<br />
в). Считываем значение из свойства val объекта array<br />
<br />
4. Сохраняем массив, переводя объект array в состояние save. Если хотите изменить количество сохраняемых элементов - предварительно измените параметр len.<br />
<br />
=== Копирование объекта ===<br />
<br />
При копировании, необходимо заменить в состояниях load и save array.имя_параметра на другое имя. Например, array2.имя_параметра. Копировать следует через использование доп. сцены (см. выше)<br />
<br />
=== Достоинства ===<br />
<br />
Позволяет избежать необходимости каждый раз создавать большое количество if-ов и set-ов, если необходимо работать с нумерованным списком. Можно один раз создать структуру и копировать её неограниченное количество раз<br />
<br />
=== Недостатки ===<br />
<br />
Данный объект содержит довольно большое количество кода, поэтому при большом их обилии/длине может занизить скорость работы сцены и скорость загрузки сцены.<br />
<br />
=== Исходный XML код===<br />
Прим. id="369" - идентификатор объекта Options, сохраняющего все переменные приложения. id="7845" - идентификатор объекта<br />
<br />
<pre><br />
<obj id="7845" type="machine" nm="array" sync="1" w="1" h="1"><br />
<st id="init"/><br />
<st id="get"><br />
<var nm="a1" obj="7845" par="a1"/><br />
<var nm="a2" obj="7845" par="a2"/><br />
<var nm="a3" obj="7845" par="a3"/><br />
<var nm="a4" obj="7845" par="a4"/><br />
<var nm="a5" obj="7845" par="a5"/><br />
<var nm="a6" obj="7845" par="a6"/><br />
<var nm="a7" obj="7845" par="a7"/><br />
<var nm="a8" obj="7845" par="a8"/><br />
<var nm="a9" obj="7845" par="a9"/><br />
<var nm="a10" obj="7845" par="a10"/><br />
<var nm="a11" obj="7845" par="a11"/><br />
<var nm="a12" obj="7845" par="a12"/><br />
<var nm="a13" obj="7845" par="a13"/><br />
<var nm="a14" obj="7845" par="a14"/><br />
<var nm="a15" obj="7845" par="a15"/><br />
<var nm="a16" obj="7845" par="a16"/><br />
<var nm="a17" obj="7845" par="a17"/><br />
<var nm="a18" obj="7845" par="a18"/><br />
<var nm="a19" obj="7845" par="a19"/><br />
<var nm="a20" obj="7845" par="a20"/><br />
<set obj="7845" par="val" val="(a1)" round="1" if="0"/><br />
<set obj="7845" par="val" val="(a2)" round="1" if="1"/><br />
<set obj="7845" par="val" val="(a3)" round="1" if="2"/><br />
<set obj="7845" par="val" val="(a4)" round="1" if="3"/><br />
<set obj="7845" par="val" val="(a5)" round="1" if="4"/><br />
<set obj="7845" par="val" val="(a6)" round="1" if="5"/><br />
<set obj="7845" par="val" val="(a7)" round="1" if="6"/><br />
<set obj="7845" par="val" val="(a8)" round="1" if="7"/><br />
<set obj="7845" par="val" val="(a9)" round="1" if="8"/><br />
<set obj="7845" par="val" val="(a10)" round="1" if="9"/><br />
<set obj="7845" par="val" val="(a11)" round="1" if="10"/><br />
<set obj="7845" par="val" val="(a12)" round="1" if="11"/><br />
<set obj="7845" par="val" val="(a13)" round="1" if="12"/><br />
<set obj="7845" par="val" val="(a14)" round="1" if="13"/><br />
<set obj="7845" par="val" val="(a15)" round="1" if="14"/><br />
<set obj="7845" par="val" val="(a16)" round="1" if="15"/><br />
<set obj="7845" par="val" val="(a17)" round="1" if="16"/><br />
<set obj="7845" par="val" val="(a18)" round="1" if="17"/><br />
<set obj="7845" par="val" val="(a19)" round="1" if="18"/><br />
<set obj="7845" par="val" val="(a20)" round="1" if="19"/><br />
<if obj="7845" par="index1" val="1"/><br />
<if obj="7845" par="index1" val="2"/><br />
<if obj="7845" par="index1" val="3"/><br />
<if obj="7845" par="index1" val="4"/><br />
<if obj="7845" par="index1" val="5"/><br />
<if obj="7845" par="index1" val="6"/><br />
<if obj="7845" par="index1" val="7"/><br />
<if obj="7845" par="index1" val="8"/><br />
<if obj="7845" par="index1" val="9"/><br />
<if obj="7845" par="index1" val="10"/><br />
<if obj="7845" par="index1" val="11"/><br />
<if obj="7845" par="index1" val="12"/><br />
<if obj="7845" par="index1" val="13"/><br />
<if obj="7845" par="index1" val="14"/><br />
<if obj="7845" par="index1" val="15"/><br />
<if obj="7845" par="index1" val="16"/><br />
<if obj="7845" par="index1" val="17"/><br />
<if obj="7845" par="index1" val="18"/><br />
<if obj="7845" par="index1" val="19"/><br />
<if obj="7845" par="index1" val="20"/><br />
</st><br />
<st id="set"><br />
<var nm="val" obj="7845" par="val"/><br />
<set obj="7845" par="a1" val="(val)" round="1" if="0"/><br />
<set obj="7845" par="a2" val="(val)" round="1" if="1"/><br />
<set obj="7845" par="a3" val="(val)" round="1" if="2"/><br />
<set obj="7845" par="a4" val="(val)" round="1" if="3"/><br />
<set obj="7845" par="a5" val="(val)" round="1" if="4"/><br />
<set obj="7845" par="a6" val="(val)" round="1" if="5"/><br />
<set obj="7845" par="a7" val="(val)" round="1" if="6"/><br />
<set obj="7845" par="a8" val="(val)" round="1" if="7"/><br />
<set obj="7845" par="a9" val="(val)" round="1" if="8"/><br />
<set obj="7845" par="a10" val="(val)" round="1" if="9"/><br />
<set obj="7845" par="a11" val="(val)" round="1" if="10"/><br />
<set obj="7845" par="a12" val="(val)" round="1" if="11"/><br />
<set obj="7845" par="a13" val="(val)" round="1" if="12"/><br />
<set obj="7845" par="a14" val="(val)" round="1" if="13"/><br />
<set obj="7845" par="a15" val="(val)" round="1" if="14"/><br />
<set obj="7845" par="a16" val="(val)" round="1" if="15"/><br />
<set obj="7845" par="a17" val="(val)" round="1" if="16"/><br />
<set obj="7845" par="a18" val="(val)" round="1" if="17"/><br />
<set obj="7845" par="a19" val="(val)" round="1" if="18"/><br />
<set obj="7845" par="a20" val="(val)" round="1" if="19"/><br />
<if obj="7845" par="index1" val="1"/><br />
<if obj="7845" par="index1" val="2"/><br />
<if obj="7845" par="index1" val="3"/><br />
<if obj="7845" par="index1" val="4"/><br />
<if obj="7845" par="index1" val="5"/><br />
<if obj="7845" par="index1" val="6"/><br />
<if obj="7845" par="index1" val="7"/><br />
<if obj="7845" par="index1" val="8"/><br />
<if obj="7845" par="index1" val="9"/><br />
<if obj="7845" par="index1" val="10"/><br />
<if obj="7845" par="index1" val="11"/><br />
<if obj="7845" par="index1" val="12"/><br />
<if obj="7845" par="index1" val="13"/><br />
<if obj="7845" par="index1" val="14"/><br />
<if obj="7845" par="index1" val="15"/><br />
<if obj="7845" par="index1" val="16"/><br />
<if obj="7845" par="index1" val="17"/><br />
<if obj="7845" par="index1" val="18"/><br />
<if obj="7845" par="index1" val="19"/><br />
<if obj="7845" par="index1" val="20"/><br />
</st><br />
<st id="load"><br />
<var nm="a1" obj="369" par="array.a1" user="1"/><br />
<var nm="a2" obj="369" par="array.a2" user="1"/><br />
<var nm="a3" obj="369" par="array.a3" user="1"/><br />
<var nm="a4" obj="369" par="array.a4" user="1"/><br />
<var nm="a5" obj="369" par="array.a5" user="1"/><br />
<var nm="a6" obj="369" par="array.a6" user="1"/><br />
<var nm="a7" obj="369" par="array.a7" user="1"/><br />
<var nm="a8" obj="369" par="array.a8" user="1"/><br />
<var nm="a9" obj="369" par="array.a9" user="1"/><br />
<var nm="a10" obj="369" par="array.a10" user="1"/><br />
<var nm="a11" obj="369" par="array.a11" user="1"/><br />
<var nm="a12" obj="369" par="array.a12" user="1"/><br />
<var nm="a13" obj="369" par="array.a13" user="1"/><br />
<var nm="a14" obj="369" par="array.a14" user="1"/><br />
<var nm="a15" obj="369" par="array.a15" user="1"/><br />
<var nm="a16" obj="369" par="array.a16" user="1"/><br />
<var nm="a17" obj="369" par="array.a17" user="1"/><br />
<var nm="a18" obj="369" par="array.a18" user="1"/><br />
<var nm="a19" obj="369" par="array.a19" user="1"/><br />
<var nm="a20" obj="369" par="array.a20" user="1"/><br />
<set obj="7845" par="a1" val="(a1)" round="1" if="0"/><br />
<set obj="7845" par="a2" val="(a2)" round="1" if="1"/><br />
<set obj="7845" par="a3" val="(a3)" round="1" if="2"/><br />
<set obj="7845" par="a4" val="(a4)" round="1" if="3"/><br />
<set obj="7845" par="a5" val="(a5)" round="1" if="4"/><br />
<set obj="7845" par="a6" val="(a6)" round="1" if="5"/><br />
<set obj="7845" par="a7" val="(a7)" round="1" if="6"/><br />
<set obj="7845" par="a8" val="(a8)" round="1" if="7"/><br />
<set obj="7845" par="a9" val="(a9)" round="1" if="8"/><br />
<set obj="7845" par="a10" val="(a10)" round="1" if="9"/><br />
<set obj="7845" par="a11" val="(a11)" round="1" if="10"/><br />
<set obj="7845" par="a12" val="(a12)" round="1" if="11"/><br />
<set obj="7845" par="a13" val="(a13)" round="1" if="12"/><br />
<set obj="7845" par="a14" val="(a14)" round="1" if="13"/><br />
<set obj="7845" par="a15" val="(a15)" round="1" if="14"/><br />
<set obj="7845" par="a16" val="(a16)" round="1" if="15"/><br />
<set obj="7845" par="a17" val="(a17)" round="1" if="16"/><br />
<set obj="7845" par="a18" val="(a18)" round="1" if="17"/><br />
<set obj="7845" par="a19" val="(a19)" round="1" if="18"/><br />
<set obj="7845" par="a20" val="(a20)" round="1" if="19"/><br />
<if obj="7845" par="len" op="&gt;" val="0"/><br />
<if obj="7845" par="len" op="&gt;" val="1"/><br />
<if obj="7845" par="len" op="&gt;" val="2"/><br />
<if obj="7845" par="len" op="&gt;" val="3"/><br />
<if obj="7845" par="len" op="&gt;" val="4"/><br />
<if obj="7845" par="len" op="&gt;" val="5"/><br />
<if obj="7845" par="len" op="&gt;" val="6"/><br />
<if obj="7845" par="len" op="&gt;" val="7"/><br />
<if obj="7845" par="len" op="&gt;" val="8"/><br />
<if obj="7845" par="len" op="&gt;" val="9"/><br />
<if obj="7845" par="len" op="&gt;" val="10"/><br />
<if obj="7845" par="len" op="&gt;" val="11"/><br />
<if obj="7845" par="len" op="&gt;" val="12"/><br />
<if obj="7845" par="len" op="&gt;" val="13"/><br />
<if obj="7845" par="len" op="&gt;" val="14"/><br />
<if obj="7845" par="len" op="&gt;" val="15"/><br />
<if obj="7845" par="len" op="&gt;" val="16"/><br />
<if obj="7845" par="len" op="&gt;" val="17"/><br />
<if obj="7845" par="len" op="&gt;" val="18"/><br />
<if obj="7845" par="len" op="&gt;" val="19"/><br />
</st><br />
<st id="save"><br />
<var nm="len" obj="7845" par="len"/><br />
<var nm="a1" obj="7845" par="a1"/><br />
<var nm="a2" obj="7845" par="a2"/><br />
<var nm="a3" obj="7845" par="a3"/><br />
<var nm="a4" obj="7845" par="a4"/><br />
<var nm="a5" obj="7845" par="a5"/><br />
<var nm="a6" obj="7845" par="a6"/><br />
<var nm="a7" obj="7845" par="a7"/><br />
<var nm="a8" obj="7845" par="a8"/><br />
<var nm="a9" obj="7845" par="a9"/><br />
<var nm="a10" obj="7845" par="a10"/><br />
<var nm="a11" obj="7845" par="a11"/><br />
<var nm="a12" obj="7845" par="a12"/><br />
<var nm="a13" obj="7845" par="a13"/><br />
<var nm="a14" obj="7845" par="a14"/><br />
<var nm="a15" obj="7845" par="a15"/><br />
<var nm="a16" obj="7845" par="a16"/><br />
<var nm="a17" obj="7845" par="a17"/><br />
<var nm="a18" obj="7845" par="a18"/><br />
<var nm="a19" obj="7845" par="a19"/><br />
<var nm="a20" obj="7845" par="a20"/><br />
<set obj="369" par="array.a1" val="(a1)" round="1" user="1" if="0"/><br />
<set obj="369" par="array.a2" val="(a2)" round="1" user="1" if="1"/><br />
<set obj="369" par="array.a3" val="(a3)" round="1" user="1" if="2"/><br />
<set obj="369" par="array.a4" val="(a4)" round="1" user="1" if="3"/><br />
<set obj="369" par="array.a5" val="(a5)" round="1" user="1" if="4"/><br />
<set obj="369" par="array.a6" val="(a6)" round="1" user="1" if="5"/><br />
<set obj="369" par="array.a7" val="(a7)" round="1" user="1" if="6"/><br />
<set obj="369" par="array.a8" val="(a8)" round="1" user="1" if="7"/><br />
<set obj="369" par="array.a9" val="(a9)" round="1" user="1" if="8"/><br />
<set obj="369" par="array.a10" val="(a10)" round="1" user="1" if="9"/><br />
<set obj="369" par="array.a11" val="(a11)" round="1" user="1" if="10"/><br />
<set obj="369" par="array.a12" val="(a12)" round="1" user="1" if="11"/><br />
<set obj="369" par="array.a13" val="(a13)" round="1" user="1" if="12"/><br />
<set obj="369" par="array.a14" val="(a14)" round="1" user="1" if="13"/><br />
<set obj="369" par="array.a15" val="(a15)" round="1" user="1" if="14"/><br />
<set obj="369" par="array.a16" val="(a16)" round="1" user="1" if="15"/><br />
<set obj="369" par="array.a17" val="(a17)" round="1" user="1" if="16"/><br />
<set obj="369" par="array.a18" val="(a18)" round="1" user="1" if="17"/><br />
<set obj="369" par="array.a19" val="(a19)" round="1" user="1" if="18"/><br />
<set obj="369" par="array.a20" val="(a20)" round="1" user="1" if="19"/><br />
<set obj="369" par="array.len" val="(len)" round="1" user="1"/><br />
<if obj="7845" par="len" op="&gt;" val="0"/><br />
<if obj="7845" par="len" op="&gt;" val="1"/><br />
<if obj="7845" par="len" op="&gt;" val="2"/><br />
<if obj="7845" par="len" op="&gt;" val="3"/><br />
<if obj="7845" par="len" op="&gt;" val="4"/><br />
<if obj="7845" par="len" op="&gt;" val="5"/><br />
<if obj="7845" par="len" op="&gt;" val="6"/><br />
<if obj="7845" par="len" op="&gt;" val="7"/><br />
<if obj="7845" par="len" op="&gt;" val="8"/><br />
<if obj="7845" par="len" op="&gt;" val="9"/><br />
<if obj="7845" par="len" op="&gt;" val="10"/><br />
<if obj="7845" par="len" op="&gt;" val="11"/><br />
<if obj="7845" par="len" op="&gt;" val="12"/><br />
<if obj="7845" par="len" op="&gt;" val="13"/><br />
<if obj="7845" par="len" op="&gt;" val="14"/><br />
<if obj="7845" par="len" op="&gt;" val="15"/><br />
<if obj="7845" par="len" op="&gt;" val="16"/><br />
<if obj="7845" par="len" op="&gt;" val="17"/><br />
<if obj="7845" par="len" op="&gt;" val="18"/><br />
<if obj="7845" par="len" op="&gt;" val="19"/><br />
</st><br />
</obj><br />
</pre><br />
<br />
=== Машина состояний объекта ===<br />
[[Файл:array.jpg]]<br />
<br />
<br />
== Пример использования ==<br />
<br />
[http://fs5.absolutist.com/files/wikisample/machine.rar Download]<br />
<br />
== Clone ==<br />
Clone - параметр команды init в разделе "системные действия".<br />
<br />
[[Файл:Clone1.PNG]]<br />
<br />
<br />
Значение 1 означает, что в текущем местоположении машины будет создана ее копия.<br />
<br />
[[Файл:Clone2.PNG]]<br />
<br />
=== Свойства ===<br />
<br />
1) Клонированная машина состояний имеет все свойства, состояния и параметры исходного объекта клонирования.<br />
<br />
2) Клоны рождаются и умирают в рамках одного экрана.<br />
<br />
3) Клоны отличаются друг от друга лишь параметром '''clone_num''', который у оригинала равен "-1", а у клонов от 0 до N.<br />
<br />
4) Нежелательно применять клонирование к клону во избежание путаницы значений параметра '''clone_num'''.<br />
<br />
5) Если при проверке условия [[#if|if]] в поле '''obj''' указать this, это значит что if будет проводить проверку текущего объекта. Таким образом машина может сама себя проверить по параметру '''clone_num''' клон ли она и если да то какой у нее номер;<br />
<br />
=== Пример использования ===<br />
<br />
По ссылке пример использования с подробным описанием машин.<br />
<br />
[http://fs5.absolutist.com/files/wikisample/Clone.zip Download]<br />
<br />
== Параметр команды машины состояний ==<br />
<br />
В случае, когда необходимо изменить значение какого-либо параметра в командах машины состояний (например v в команде move) в процессе работы приложения, можно использовать блок "Параметр команды машины состояний" в команде ''set'' машины состояний. Приведу пример использования этого блока.<br />
<br />
Пусть есть 2 машины: управляющая и управляемая.<br />
<br />
[[Файл:Stm1.jpg|300px]][[Файл:Stm2.jpg|300px]]<br />
<br />
Управляемая машина практически пустая и не содержит каких либо данных о движении, но тем не менее при запуске она будет двигаться, меняя направление. Это движение - заслуга управляющей машины, которая на ходу изменяет параметры движения управляемой. Рассмотрим более детально ее состояния.<br />
<br />
В первом состоянии "wait" мы пытаемся изменить скорость движения управляемой машины. Для этого указали объект (sun), состояние в котором хотим поменять параметр (у машины sun это состояние move), имя команды в которой меняем параметр (в данном случае это move), номер команды (если таких команд несколько, то нужно указать порядковый номер начиная с 0; в нашем случае команда одна), имя параметра (мы хотим изменить скорость, поэтому имя параметра v) и значение (указали значение 200). После этого переходим в следующее состояние.<br />
<br />
В состоянии "1" управляющей машины сначала мы вывели объект sun из состояния move, изменили параметр целевой координаты x на 512 и затем вернули в состояние move, чтобы применить изменения параметров. Таким образом управляемая машина начала движение в x=512 со скоростью 200. Через 2 секунды мы переводим управляющую машину в состояние "2", где аналогичным образом изменяется целевая координата на -512.<br />
<br />
Такой способ задания параметров может найти применение в случае, когда параметры нужно задавать переменными.<br />
<br />
[[Category:Main objects]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Ecollection&diff=6808Ecollection2014-11-18T12:06:52Z<p>Odyadina: </p>
<hr />
<div>[[Object|Объект]] '''Ecollection''' позволяет отображать коллекции предметов в игре с объектом [[economics]].<br />
<br />
=Параметры=<br />
<br />
[[Файл:Ecollection1.jpg|right|260px]]<br />
*'''alpha''' - прозрачность: от 0 (объект полностью прозрачный) до 1 (объект не прозрачный).<br />
*'''economics''' - ссылка на объект [[economics]].<br />
*'''таблица''' - ссылка на таблицу, куда помещаются коллекционные предметы (обязательно должна быть подобъектом).<br />
*'''зарядник 1''' - иконка первого зарядника (инвентарного предмета, необходимого для сдачи коллекции).<br />
*'''зарядник 2''' - иконка второго зарядника.<br />
*'''зарядник 3''' - иконка третьего зарядника.<br />
*'''зарядник 4''' - иконка четвертого зарядника.<br />
*'''зарядник 1 к-во''' - счетчик, сколько нужно первого зарядника для сдачи коллекции.<br />
*'''зарядник 2 к-во''' - счетчик, сколько нужно второго зарядника для сдачи коллекции.<br />
*'''зарядник 3 к-во''' - счетчик, сколько нужно третего зарядника для сдачи коллекции.<br />
*'''зарядник 4 к-во''' - счетчик, сколько нужно четвертого зарядника для сдачи коллекции.<br />
*'''зарядник 1 есть''' - счетчик, сколько есть первого зарядника в инвентаре.<br />
*'''зарядник 2 есть''' - счетчик, сколько есть второго зарядника в инвентаре.<br />
*'''зарядник 3 есть''' - счетчик, сколько есть третего зарядника в инвентаре.<br />
*'''зарядник 4 есть''' - счетчик, сколько есть четвертого зарядника в инвентаре.<br />
*'''кнопка сдачи 1''' - кнопка, по нажатию на которую, происходит сдача коллекции. Передает состояние collection объекту ecollection (обязательно должна быть подобъектом).<br />
*'''кнопка сдачи 2''' - передает состояние collection объекту ecollection. Эта кнопка видна в том случае, когда не хватает чарджеров для сдачи коллекции (обязательно должна быть подобъектом). Будет открываться окно с предложением докупить зарядников (чарджеров).<br />
*'''название коллекции''' - текстовый объект, в котором будет отображаться название коллекции.<br />
*'''фонарь''' - машина состояний, которая сигнализирует о том, что коллекция готова к сдаче. Должна иметь состояния on и off.<br />
*'''награда''' - объект, которому будет присвоена иконка наградного предмета (на рисунке справа у объекта тип [[button]], т.к. по нажатию на иконку награды вызывается окошко, но обычно это тип [[image]]).<br />
*'''проверять количество награды''' - принимает значение 1 и 0. По умолчанию '''1''' - если кол-во награды 0, то иконка награды полупрозрачная, если кол-во награды >0, то иконка награды с альфой 1. При '''0''' - иконка награды будет полупрозрачной только до первой сдачи, если после первой сдачи мы используем награду, иконка все равно останется с альфой 1.<br />
*'''награда текст''' - текстовый объект, в который помещается название наградного предмета.<br />
*'''награда ресурс 1''' - счетчик, который будет отображать количество призового ресурса 1.<br />
*'''награда ресурс 2''' - счетчик, который будет отображать количество призового ресурса 2.<br />
*'''награда опыт''' - счетчик, который будет отображать количество призового опыта.<br />
*'''число наград''' - счетчик, который будет отображать, сколько раз была сдана коллекция.<br />
*'''метка сдано''' - объект, который становится видимым, если коллекция сдана хотя бы раз (например, это может быть поздравительная картинка, в которую помещен текст и счетчик из поля ''число наград'').<br />
*'''esocial''' - ссылка на объект типа [[esocial]].<br />
*'''Кнопка подарить''' - добавляемый параметр, кнопка, которая позволяет подарить коллекционный предмет другу. Кнопка должна передавать объекту ecollection в параметр param порядковый номер предмета в коллекции (начиная с 0) и вызывать состояние ''gift''. После этого открывается окно дарения подарка прописанное в объекте [[esocial]]. Если в коллекции 5 предметов, то и кнопок должно быть 5.<br />
*'''Кнопка попросить''' - добавляемый параметр, кнопка, которая позволяет попросить у друга необходимый коллекционный предмет. Записывает объекту ecollection в параметр param порядковый номер предмета в коллекции (начиная с 0) и вызывает состояние ''wish''. Если в коллекции 5 предметов, то и кнопок должно быть 5.<br />
<br />
<br />
=Состояния=<br />
[[Файл:Ecollection3.jpg|right|350px]]<br />
*'''collection''' - Попытаться сдать коллекцию.<br />
*'''chargers''' - Показать окно покупки чарджеров.<br />
*'''wish''' - добавляет коллекционный предмет в wishlist. Обязательно передавать порядковый номер предмета перед вызовом состояния.<br />
*'''gift''' - Дарит предмет другу (открывает окно дарения подарка). Обязательно передавать порядковый номер предмета перед вызовом состояния.<br />
<br />
Пример окошка с коллекциями на рисунке справа.<br />
<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.<br />
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. <br />
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
<br />
<br />
[[Category:Economics]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Ecollection&diff=6807Ecollection2014-11-18T10:21:03Z<p>Odyadina: /* Параметры */</p>
<hr />
<div>[[Object|Объект]] '''Ecollection''' позволяет отображать коллекции предметов в игре с объектом [[economics]].<br />
<br />
=Параметры=<br />
<br />
[[Файл:Ecollection1.jpg|right|260px]]<br />
*'''alpha''' - прозрачность: от 0 (объект полностью прозрачный) до 1 (объект не прозрачный).<br />
*'''economics''' - ссылка на объект [[economics]].<br />
*'''таблица''' - ссылка на таблицу, куда помещаются коллекционные предметы (обязательно должна быть подобъектом).<br />
*'''зарядник 1''' - иконка первого зарядника (инвентарного предмета, необходимого для сдачи коллекции).<br />
*'''зарядник 2''' - иконка второго зарядника.<br />
*'''зарядник 3''' - иконка третьего зарядника.<br />
*'''зарядник 4''' - иконка четвертого зарядника.<br />
*'''зарядник 1 к-во''' - счетчик, сколько нужно первого зарядника для сдачи коллекции.<br />
*'''зарядник 2 к-во''' - счетчик, сколько нужно второго зарядника для сдачи коллекции.<br />
*'''зарядник 3 к-во''' - счетчик, сколько нужно третего зарядника для сдачи коллекции.<br />
*'''зарядник 4 к-во''' - счетчик, сколько нужно четвертого зарядника для сдачи коллекции.<br />
*'''зарядник 1 есть''' - счетчик, сколько есть первого зарядника в инвентаре.<br />
*'''зарядник 2 есть''' - счетчик, сколько есть второго зарядника в инвентаре.<br />
*'''зарядник 3 есть''' - счетчик, сколько есть третего зарядника в инвентаре.<br />
*'''зарядник 4 есть''' - счетчик, сколько есть четвертого зарядника в инвентаре.<br />
*'''кнопка сдачи 1''' - кнопка, по нажатию на которую, происходит сдача коллекции. Передает состояние collection объекту ecollection (обязательно должна быть подобъектом).<br />
*'''кнопка сдачи 2''' - передает состояние collection объекту ecollection. Эта кнопка видна в том случае, когда не хватает чарджеров для сдачи коллекции (обязательно должна быть подобъектом). Будет открываться окно с предложением докупить зарядников (чарджеров).<br />
*'''название коллекции''' - текстовый объект, в котором будет отображаться название коллекции.<br />
*'''фонарь''' - машина состояний, которая сигнализирует о том, что коллекция готова к сдаче. Должна иметь состояния on и off.<br />
*'''награда''' - объект, которому будет присвоена иконка наградного предмета (на рисунке справа у объекта тип [[button]], т.к. по нажатию на иконку награды вызывается окошко, но обычно это тип [[image]]).<br />
*'''проверять количество награды''' - принимает значение 1 и 0. По умолчанию '''1''' - если кол-во награды 0, то иконка награды полупрозрачная, если кол-во награды >0, то иконка награды с альфой 1. При '''0''' - иконка награды будет полупрозрачной только до первой сдачи, если после первой сдачи мы используем награду, иконка все равно останется с альфой 1.<br />
*'''награда текст''' - текстовый объект, в который помещается название наградного предмета.<br />
*'''награда ресурс 1''' - счетчик, который будет отображать количество призового ресурса 1.<br />
*'''награда ресурс 2''' - счетчик, который будет отображать количество призового ресурса 2.<br />
*'''награда опыт''' - счетчик, который будет отображать количество призового опыта.<br />
*'''число наград''' - счетчик, который будет отображать, сколько раз была сдана коллекция.<br />
*'''метка сдано''' - объект, который становится видимым, если коллекция сдана хотя бы раз (например, это может быть поздравительная картинка, в которую помещен текст и счетчик из поля ''число наград'').<br />
*'''esocial''' - ссылка на объект типа [[esocial]].<br />
*'''Кнопка подарить''' - кнопка которая позволяет подарить коллекционный предмет другу. Записывает объекту ecollection в параметр param порядковый номер предмета в коллекции (начиная с 0) и вызывает состояние ''gift''. После этого открывается окно дарения подарка прописанное в объекте [[esocial]].<br />
*'''Кнопка попросить''' - кнопка, которая позволяет попросить у друга необходимый коллекционный предмет. Записывает объекту ecollection в параметр param порядковый номер предмета в коллекции (начиная с 0) и вызывает состояние ''wish''.<br />
<br />
=Состояния=<br />
*'''collection''' - Попытаться сдать коллекцию.<br />
*'''chargers''' - Показать окно покупки чарджеров.<br />
<br />
Пример окошка с коллекциями:<br />
<br />
[[Файл:Ecollection3.jpg|300px]]<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.<br />
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. <br />
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
<br />
<br />
[[Category:Economics]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ecollection1.jpg&diff=6806Файл:Ecollection1.jpg2014-11-18T09:52:12Z<p>Odyadina: Odyadina загружена новая версия «Файл:Ecollection1.jpg»</p>
<hr />
<div></div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Etaskitem&diff=6805Etaskitem2014-11-18T09:17:56Z<p>Odyadina: </p>
<hr />
<div>[[Object|Объект]] '''Etaskitem''' - Шаблон/форма отдельной подзадачи в общем задании. Шаблон/форма представляет собой скомпонованную группу объектов (картинки, счетчики, кнопки, рамочки и т.п.), которая должна быть вложена в Etaskitem. Объект Etaskitem заполняет шаблон по очереди для каждой подзадачи текущего задания и помещает заполненный шаблон в ячейку таблицы (таблицу, в которую помещать шаблон, указывают в Taskorganaizer setup для конкретной задачи). <br />
<br />
=Свойства=<br />
<br />
[[Файл:Etaskitem1.jpg|right|250px]]<br />
*'''alpha''' - прозрачность: от 0 (объект полностью прозрачен) до 1(объект не прозрачен).<br />
*'''taskorganizer''' - Объект типа [[taskorganizer]].<br />
*'''иконка''' - Иконка предмета подзадачи.<br />
*'''описание''' - Текстовый объект, куда будет занесено описание объекта.<br />
*'''цена res2''' - Цена предмета в ресурсе 2. Игрок может купить предмет для выполнения подзадачи.<br />
*'''цена res1''' - Цена предмета в ресурсе 1. Игрок может купить предмет для выполнения подзадачи.<br />
*'''кнопка искать''' - Кнопка поиска указывает, в какой локации можно найти предмет. Видна, если объект коллекционный. Должна вызывать объекту [[Economics]] состояние ''search_task''.<br />
*'''кнопка коллекции''' - Кнопка ведущая в коллекции. Видна, если задание состоит в сдаче коллекции. Должна вызывать объекту [[Economics]] состояние ''search_task''.<br />
*'''кнопка купить''' - Кнопка покупки. Видна, если объект инвентарный. Должна вызывать объекту Etaskitem состояние buy.<br />
*'''кнопка инвентарь''' - Кнопка, по нажатию на которую происходит переход на инвентарь. Кнопка видна, если подзадача требует применить предмет и он есть в наличии.<br />
*'''кнопка магазин''' - Кнопка, по нажатию на которую происходит переход в магазин. Кнопки видна, если подзадача требует применить предмет, но его нет в наличии.<br />
*'''надпись успеха''' - Объект, например, картинка галочки или текст. Виден, если данная часть задания выполнена.<br />
*'''счетчик (текущий)''' - Счетчик, отображающий имеющееся кол-во предмета (или текущее значение параметра для подзадачи типа опции).<br />
*'''счетчик (желаемый)''' - Счетчик, отображающий требуемое кол-во предмета (или требуемое значение параметра для подзадачи типа опции).<br />
<br />
[[Файл:Etaskitem2.jpg|right|300px]]<br />
Справа показан пример, как будет выглядеть шаблон в окне задачи. Если у задачи несколько подзадач, например, нужно найти несколько разных предметов, то Etaskitem заполняет шаблон для каждой подзадачи и помещает в ячейку таблицы, на рисунке видно две ячейки таблицы для двух подзадач.<br />
<br />
Объект Etaskinem полезен тем, что с его помощью можно отображать огромное количество подзадач (заполненных шаблонов) в таблице. Так же этот объект может скрывать/показывать отдельные элементы шаблона, для отдельной подзадачи (ячейки таблицы), а не для всей таблицы.<br />
<br />
Недостаток: Шаблон/форма всегда одна для одного таскорганайзера. Может возникать потребность в разных шаблонах для разных задач таскорганайзера. Например, в задаче 1 шаблон подзадач помещается в таблицу 1 и должен отображать иконку предмета, а в задаче 2 шаблон помещается в таблицу 2 и должен отображать описание подзадачи. Тогда при открытии окна придется "вручную" (в машине состояний) прятать/показывать элементы шаблона/формы, в данном примере иконку и текст. Таких ситуаций лучше избегать!!!<br />
<br />
=Состояния=<br />
*'''set_filter''' - при переходе, например в инвентарь или в магазин, сразу открывает тот раздел, в котором находится нужный предмет.<br />
*'''buy''' - Купить нужный предмет.<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.<br />
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. <br />
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
<br />
<br />
[[Category:Economics]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Etaskitem&diff=6804Etaskitem2014-11-18T08:46:22Z<p>Odyadina: /* Свойства */</p>
<hr />
<div>[[Object|Объект]] '''Etaskitem''' - Шаблон/форма отдельного подзадания в общем задании.<br />
<br />
=Свойства=<br />
<br />
[[Файл:Etaskitem1.jpg|right|250px]]<br />
*'''alpha''' - прозрачность: от 0 (объект полностью прозрачен) до 1(объект не прозрачен).<br />
*'''taskorganizer''' - Объект типа [[taskorganizer]].<br />
*'''иконка''' - Иконка предмета подзадачи.<br />
*'''описание''' - Текстовый объект, куда будет занесено описание объекта.<br />
*'''цена res2''' - Цена предмета в ресурсе 2. Игрок может купить предмет для выполнения подзадачи.<br />
*'''цена res1''' - Цена предмета в ресурсе 1. Игрок может купить предмет для выполнения подзадачи.<br />
*'''кнопка искать''' - Кнопка поиска указывает, в какой локации можно найти предмет. Видна, если объект коллекционный. Должна вызывать объекту [[Economics]] состояние ''search_task''.<br />
*'''кнопка коллекции''' - Кнопка ведущая в коллекции. Видна, если задание состоит в сдаче коллекции. Должна вызывать объекту [[Economics]] состояние ''search_task''.<br />
*'''кнопка купить''' - Кнопка покупки. Видна, если объект инвентарный. Должна вызывать объекту Etaskitem состояние buy.<br />
*'''кнопка инвентарь''' - Кнопка, по нажатию на которую происходит переход на инвентарь. Кнопка видна, если подзадача требует применить предмет и он есть в наличии.<br />
*'''кнопка магазин''' - Кнопка, по нажатию на которую происходит переход в магазин. Кнопки видна, если подзадача требует применить предмет, но его нет в наличии.<br />
*'''надпись успеха''' - Объект, например, картинка галочки или текст. Виден, если данная часть задания выполнена.<br />
*'''счетчик (текущий)''' - Счетчик, отображающий имеющееся кол-во предмета (или текущее значение параметра для подзадачи типа опции).<br />
*'''счетчик (желаемый)''' - Счетчик, отображающий требуемое кол-во предмета (или требуемое значение параметра для подзадачи типа опции).<br />
<br />
[[Файл:Etaskitem2.jpg|right|300px]]<br />
Справа показан пример, как будет выглядеть шаблон в окне задачи. Если у задачи несколько подзадач, например, нужно найти несколько разных предметов, то Etaskitem заполняет шаблон для каждой подзадачи и помещает в ячейку таблицы, на примере видно две ячейки таблицы для двух подзадач.<br />
<br />
=Состояния=<br />
*'''set_filter''' - при переходе, например в инвентарь или в магазин, сразу открывает тот раздел в котором находится нужный предмет.<br />
*'''buy''' - Купить нужный предмет.<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.<br />
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. <br />
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
<br />
<br />
[[Category:Economics]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Etaskitem&diff=6803Etaskitem2014-11-18T08:45:56Z<p>Odyadina: /* Свойства */</p>
<hr />
<div>[[Object|Объект]] '''Etaskitem''' - Шаблон/форма отдельного подзадания в общем задании.<br />
<br />
=Свойства=<br />
<br />
[[Файл:Etaskitem1.jpg|right|250px]]<br />
*'''alpha''' - прозрачность: от 0 (объект полностью прозрачен) до 1(объект не прозрачен).<br />
*'''taskorganizer''' - Объект типа [[taskorganizer]].<br />
*'''иконка''' - Иконка предмета подзадачи.<br />
*'''описание''' - Текстовый объект, куда будет занесено описание объекта.<br />
*'''цена res2''' - Цена предмета в ресурсе 2. Игрок может купить предмет для выполнения подзадачи.<br />
*'''цена res1''' - Цена предмета в ресурсе 1. Игрок может купить предмет для выполнения подзадачи.<br />
*'''кнопка искать''' - Кнопка поиска указывает, в какой локации можно найти предмет. Видна, если объект коллекционный. Должна вызывать объекту [[Economics]] состояние ''search_task''.<br />
*'''кнопка коллекции''' - Кнопка ведущая в коллекции. Видна, если задание состоит в сдаче коллекции. Должна вызывать объекту [[Economics]] состояние ''search_task''.<br />
*'''кнопка купить''' - Кнопка покупки. Видна, если объект инвентарный. Должна вызывать объекту Etaskitem состояние buy.<br />
*'''кнопка инвентарь''' - Кнопка, по нажатию на которую происходит переход на инвентарь. Кнопка видна, если подзадача требует применить предмет и он есть в наличии.<br />
*'''кнопка магазин''' - Кнопка, по нажатию на которую происходит переход в магазин. Кнопки видна, если подзадача требует применить предмет, но его нет в наличии.<br />
*'''надпись успеха''' - Объект, например, картинка галочки или текст. Виден, если данная часть задания выполнена.<br />
*'''счетчик (текущий)''' - Счетчик, отображающий имеющееся кол-во предмета (или текущее значение параметра для подзадачи типа опции).<br />
*'''счетчик (желаемый)''' - Счетчик, отображающий требуемое кол-во предмета (или требуемое значение параметра для подзадачи типа опции).<br />
<br />
Справа показан пример, как будет выглядеть шаблон в окне задачи. Если у задачи несколько подзадач, например, нужно найти несколько разных предметов, то Etaskitem заполняет шаблон для каждой подзадачи и помещает в ячейку таблицы, на примере видно две ячейки таблицы для двух подзадач.<br />
<br />
[[Файл:Etaskitem2.jpg|right|300px]]<br />
<br />
=Состояния=<br />
*'''set_filter''' - при переходе, например в инвентарь или в магазин, сразу открывает тот раздел в котором находится нужный предмет.<br />
*'''buy''' - Купить нужный предмет.<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.<br />
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. <br />
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
<br />
<br />
[[Category:Economics]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Etaskitem&diff=6802Etaskitem2014-11-18T08:28:46Z<p>Odyadina: /* Свойства */</p>
<hr />
<div>[[Object|Объект]] '''Etaskitem''' - Шаблон/форма отдельного подзадания в общем задании.<br />
<br />
=Свойства=<br />
<br />
[[Файл:Etaskitem1.jpg|right|250px]]<br />
*'''alpha''' - прозрачность: от 0 (объект полностью прозрачен) до 1(объект не прозрачен).<br />
*'''taskorganizer''' - Объект типа [[taskorganizer]].<br />
*'''иконка''' - Иконка предмета задания.<br />
*'''описание''' - Текстовый объект куда будет занесено описание объекта.<br />
*'''кнопка искать''' - Кнопка поиска. Видна, если объект коллекционный. Должна вызывать объекту [[Economics]] состояние ''search_task''.<br />
*'''кнопка коллекции''' - Кнопка ведущая в коллекции. Видна, если задание состоит в сдаче коллекции. Должна вызывать объекту [[Economics]] состояние ''search_task''.<br />
*'''кнопка купить''' - Кнопка покупки. Видна, если объект инвентарный. Должна вызывать объекту Etaskitem состояние buy.<br />
*'''кнопка инвентарь''' - кнопка по нажатию на которую происходит переход на инвентарь. Кнопка видна, если подзадача требует применить предмет и он есть в наличии.<br />
*'''кнопка магазин''' - кнопка по нажатию на которую происходит переход в магазин. Кнопки видна, если подзадача требует применить предмет, но его нет в наличии.<br />
*'''надпись успеха''' - Объект, видимый если данная часть задания выполнена.<br />
*'''счетчик''' - счетчик, отображающий количество предметов.<br />
<br />
Пример ячеек подзадач:<br />
<br />
[[Файл:Etaskitem2.jpg|300px]]<br />
<br />
=Состояния=<br />
*'''set_filter''' - при переходе, например в инвентарь или в магазин, сразу открывает тот раздел в котором находится нужный предмет.<br />
*'''buy''' - Купить нужный предмет.<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.<br />
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. <br />
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
<br />
<br />
[[Category:Economics]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Etaskitem1.jpg&diff=6801Файл:Etaskitem1.jpg2014-11-18T08:28:10Z<p>Odyadina: Odyadina загружена новая версия «Файл:Etaskitem1.jpg»</p>
<hr />
<div></div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Taskorganizer&diff=6800Taskorganizer2014-11-18T08:16:05Z<p>Odyadina: /* Taskorganizer setup */</p>
<hr />
<div>{{TOC right}}<br />
[[Object|Объект]] Taskorganizer - Менеджер задач и квестов<br />
<br />
=Свойства=<br />
[[Файл:Task.jpg|250px|thumb|right]]<br />
[[Файл:Task_1.jpg|250px|thumb|right]]<br />
'''Общие параметры'''<br />
*'''economics''' - Объект типа экономикс.<br />
*'''предметы''' - Объект типа eitems.<br />
*'''таблица''' - Таблица куда будут помещены иконки заданий. При тапе на таблицу объекту Taskorganizer вызывается состояние show. Иконки подтягиваются из текстовой базы (icon1).<br />
*'''добавлять иконки''' - 1 - добавлять в таблицу иконки, 0 - тексты из текстового id (поле word).<br />
*'''шаблон предмета''' - Объект типа etaskitem будет использоваться при показе превью задания.<br />
*'''фильтрация''' - Категория, которые должны будут отобразиться в таблице логов при вызове состояния logbook. Пустая строка - все.<br />
*'''таблица логов''' - Таблица куда будут помещены записи лог бука.<br />
*'''новая запись''' - Объект, которому будет вызвано состояние show при добавлении новой записи в логбук.<br />
*'''новое задание''' - Графический ресурс, который будет отмечать новые задания. Смещение должно достигаться пивотом.<br />
*'''уведомление''' - Текстовый айди заголовка связанных с задачами уведомлений.<br />
*'''вероятность уведомления''' - Подменная вероятность нахождения предмета нужного для задания по уведомлению с которого мы пришли. 0 - использовать значение по умолчанию.<br />
*'''выполнять непрочитанные''' - 1 - выполнять непрочитанные таски, 0 - нет.<br />
*'''хронологический порядок''' - 1 - записывать задачи в хронологическом порядке, 0 - нет.<br />
'''Группа угадайка'''<br />
<br />
Угадайка - задание, в котором игроку предлагается вспомнить или угадать, кто из персонажей просил тот или иной коллекционный предмет. Владелец предмета указывается в настройке подзадачи.<br />
<br />
*'''показывать через''' - Через какое количество обычных задач показывать угадайку.<br />
*'''с уровня''' - Угадайка будет генерироваться только начиная с данного уровня.<br />
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.<br />
*'''иконка''' - Объект, в который сложим иконку предмета.<br />
*'''иконка для таблицы''' - Иконка соответствующая угадайке в таблице задач.<br />
*'''ресурс 1''' - Деньги даваемые за выполнение задания.<br />
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.<br />
*'''опыт''' - Опыт даваемый за выполнение задания.<br />
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.<br />
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.<br />
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.<br />
'''Группа рулетка'''<br />
<br />
На самом деле название "рулетка" весьма условное. В этом разделе можно поместить любое периодически повторяющееся задание.<br />
<br />
*'''показывать через''' - Через какое количество обычных задач показывать рулетку.<br />
*'''с уровня''' - Рулетка будет генерироваться только начиная с данного уровня.<br />
*'''машина''' - Объект, которому при активации будет вызвано состояние show.<br />
*'''иконка для таблицы''' - Иконка соответствующая рулетке в таблице задач.<br />
'''Группа генерируемые'''<br />
<br />
В этой группе находятся периодически генерируемые задания на прохождение локаций.<br />
<br />
*'''активных задач''' - Эти задачи будут генерироваться, когда активных задач столько или меньше.<br />
*'''с уровня''' - Эти задачи будут генерироваться только начиная с данного уровня.<br />
*'''максимально''' - Будет сгенерированно случайное количество задач от 1 до n.<br />
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.<br />
*'''название''' - Текстовый объект, в который будет сложено название локации.<br />
*'''превью''' - Объект, в который сложим превью локации для генерируемой задачи.<br />
*'''иконка для таблицы''' - Иконка соответствующая генерируемому таску в таблице задач.<br />
*'''ресурс 1''' - Деньги даваемые за выполнение задания.<br />
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.<br />
*'''опыт''' - Опыт даваемый за выполнение задания.<br />
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.<br />
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.<br />
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.<br />
<br />
<pre><br />
Если перед генерацией случайного таска на исследование локации указать параметру gen_loc значение от 0 до n, то ближайшая генерируемая задача будет для конкретной локации под указанным номером. После генерации параметр gen_loc становится -1.<br />
</pre><br />
<br />
<pre><br />
Если перед генерацией случайного таска от персоанжа указать параметру gen_face значение от 0 до n, то ближайшая генерируемая задача будет от персонажа под указанным номером. После генерации параметр gen_face становится -1.<br />
</pre><br />
<br />
=Taskorganizer setup=<br />
[[Файл:Task_2.jpg|600px|thumb|right]]<br />
<br />
*'''id''' - Идентификатор задания. Используется в других заданиях. По общей концепции - строковый айди. Перетаскивается из текстовой базы.<br />
'''Для каждого задания(записи в logbook) должен быть свой уникальный id.'''<br />
*'''хинт''' - Список строк-подсказок для задачи. Перетаскиваются из текстовой базы. Таким образом, добавив несколько записей из базы, увидим выпадающий список.<br />
*'''название (объект)''' - Текстовый объект, в который мы сложим название задания. Описание подтягивается из текстовой базы из первого столбика (word) текстового id задания.<br />
*'''машина''' - Объект, которому при активации задания будет вызвано состояние show, а при повторном открытии задания show_old.<br />
*'''портрет''' - Объект, которому при активации задания будет устанорвлен графический ресурс рожи.<br />
*'''таблица''' - Таблица куда будут помещены темплейты предметов данного задания.<br />
*'''описание (объект)''' - Текстовый объект, в который мы сложим описание задания. Описание подтягивается из текстовой базы из второго столбика (sentence1) текстового id задания.<br />
*'''награда (ресурс 1)''' - Счетчик отображающий награду в ресурсе 1 за выполнение задания.<br />
*'''награда (ресурс 2)''' - Счетчик отображающий награду в ресурсе 2 за выполнение задания.<br />
*'''награда (опыт)''' - Счетчик отображающий награду в опыте за выполнение задания.<br />
*'''таблица хинта''' - Таблица, в которую будем складывать хинты.<br />
<br />
'''Необходимое для логбука'''<br />
<br />
*'''для журнала''' - 0 - задача предназначена для списка задач, 1 - задача предназначена для журнала.<br />
*'''категория''' - Категория к которой относится задача/запись. Пока используется только задачами для логбука.<br />
<br />
'''Критерии появления'''<br />
<br />
*'''уровень''' - Минимальный уровень, при котором может появиться задание.<br />
*'''аномалия''' - В какой-либо локации присутствует аномалия данного типа. -1 - не учитывать условие.<br />
*'''локация''' - Локация для которой будем проверять мастерство. -1 - не учитывать условие.<br />
*'''мастерство''' - Уровень мастерства, который должен быть достигнут в локиции. -1 - не учитывать условие.<br />
*'''завершены до''' - Задания, которые должны быть завершены до появления этого.<br />
*'''получены до''' - Задания, которые должны быть получены до появления этого.<br />
*'''не завершены до''' - Задания, которые должны быть НЕ завершены до появления этого.<br />
*'''объект до''' - Объект, который должен находиться в состоянии_до для появления задания.<br />
*'''состояние до''' - Состояние объекта_до, в котором вызывается генерация задания.<br />
*'''коллекционные''' - Коллекционные предметы, которые должны быть найдены для появления задания.<br />
*'''вероятность нужного''' - Когда мы будем проходить локации, в которых есть предметы необходимые для задания - мы будем подменять вероятность из локации вот этой вероятностью. 0 - использовать дефолтную.<br />
<br />
'''Критерии завершения'''<br />
<br />
*'''с аномалией''' - Задача выполняется при нахождение локации с аномалией данного типа. Не путать с аномалией необходимой для возникновения задания. -1 - не учитывать аномалию. <br />
*'''задачи''' - Задания, выполнение которых требуется для выполнения данной.<br />
*'''предметы''' - Задание завершается, когда получены следующие предметы (коллекционные и инвентарные единым списком).<br />
*'''объект''' - Объект, который должен находиться в определенном состоянии,для завершения задания.<br />
*'''состояние''' - Состояние объекта, в котором вызывается проверка задания.<br />
<br />
'''Награда'''<br />
<br />
*'''ресурс 1''' - Деньги даваемые за выполнение задания.<br />
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.<br />
*'''опыт''' - Опыт даваемый за выполнение задания.<br />
*'''перевести объект''' - При выполнении задания этот объект будет переведен в новое состояние.<br />
*'''в состояние''' - Состояние для объекта из предыдущего поля.<br />
<br />
==Изменить состояние объекта - новое задание==<br />
<br />
Позволяет изменять состояние объекту каждый раз при появлении нового задания, находится в taskorganizer setup.<br />
<br />
==Примеры==<br />
<br />
'''Пример настройки Taskorganizer setup'''<br />
<br />
1. Заполняем поле '''id''' путем перетаскивания записи из текстовой базы. В текстовом редакторе эта запись может предствалять собой следующее:<br />
<br />
[[Файл:Taskorg 1.jpg]]<br />
<br />
2. Заполняем поле '''хинт''' строками-подсказками. Они также перетаскиваются из текстовой базы. Добавим две:<br><br />
[[Файл:Taskorg 4.jpg]], где<br><br />
<br />
первая строка подсказка<br><br />
[[Файл:Taskorg 2.jpg]]<br><br />
<br />
вторая<br><br />
[[Файл:Taskorg 3.jpg]]<br><br />
<br />
3. Указываем в поле '''название (объект)''' текстовый объект, который будет отображать задачи.<br><br />
4. Указываем в поле '''машина''' машину, в которой будет 2 состояния: ''show'' и ''show_old''. Состояние ''show'' будет вызвано при активации задания, ''show_old'' - при повторном открытии.<br />
<br />
=Состояния=<br />
<br />
*'''Show''' - При вызове этого состояния из таблицы с иконками заданий открывается соответствующая машина задания, прописанная в группе '''задание'''.<br />
*'''Check''' - При вызове проверяется выполнение текущих заданий.<br />
*'''Generate''' - При вызове подбирается подходящее задание в зависимости от прогресса игрока.<br />
*'''log_check''' - При вызове состояния проверяется доступны ли новые записи в логбук.<br />
*'''log_show''' - Заполняет таблицу логбука записями с текущим фильтром.<br />
*'''refresh''' - Удаляет иконку выполненного задания из таблицы. Лучше всего вызывать после Check.<br />
*'''cancel''' - Удаляет задание без награды, которое указано как ID в параметре param таскорганайзера, т.е. объекту Taskorganizer в param указываем ID таска (например 1933 - берется из options.xml или текстовой базы), а потом вызываем состояние cancel.<br />
*'''add_hint''' - Добавляет в таблицу хинтов следующий текстовый ID из поля хинты текущего таска. Если все хинты показаны, то в опции записывается параметр haveHints=0.<br />
*'''task_prev''' - Используется, если открыта машина-шаблон текущего задания. В этом состоянии показывается предыдущее по списку таблицы задание.<br />
*'''task_next''' - Показывает следующее по списку таблицы задание.<br />
<pre><br />
Состояния task_prev и task_next работают циклически, после первой задачи показывают последнюю и наоборот.<br />
</pre><br />
*'''show_id''' - Показать окно задачи, взяв ее id из параметра.<br />
*'''guess''' - Ответить на текущую угадайку, взяв ответ из параметра (param). Taskorganizer также хранит правильный ответ на текущую угадайку в параметре ''guess_answer'', его можно использовать, если нужно оставить игроку меньше вариантов для угадывания.<br />
*'''add_hint_last''' - Добавить подсказку последней добавленной задаче.<br />
*'''add_hint_top''' - Добавить подсказку верхней задаче в таблице.<br />
*'''guess_who_reward''' - начислить награду за последнюю угадайку.<br />
*'''roulette_complete''' -состояние, вызываемое при выполнении текущей задачи "рулетка".<br />
*'''cheat_complete''' - если его вызвать, то при следующем check выполнится задача, для которой последней показывали превью.<br />
<br />
ПРИМЕЧАНИЕ: при проверке задач для логбука для последней выполненной будет перезаписано поле filter автоматически.<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря.<br />
* [[Файл:Kub.png]] - [[Ecraftitem]] - шаблон для ячейки создания предмета. <br />
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
<br />
=Пример проекта=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\Taskorganizer<br />
<br />
<br />
[[Category:Economics]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Task_2.jpg&diff=6799Файл:Task 2.jpg2014-11-18T08:13:04Z<p>Odyadina: Odyadina загружена новая версия «Файл:Task 2.jpg»</p>
<hr />
<div></div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Image&diff=5944Image2014-08-05T11:12:32Z<p>Odyadina: /* Параметры */</p>
<hr />
<div>{{TOC right}}<br />
<br />
'''Image''' - объект применяется для отображения графических файлов на сцене.<br><br />
==Особенности объекта Image==<br />
[[Файл:Image_02.JPG|150px|right]]<br />
На первом рисунке приведен пример того, как выглядит объект Image без графического ресурса. На втором рисунке отображен объект Image с графическим ресурсом. <br />
*Объект Image может не иметь графический ресурс, который виден на сцене<br />
*Параметры объекта Image в процессе геймплэя могут меняться через объекты Mashine, Button ,Checkbox и т.п.<br />
*На положение графического ресурса обьекта Image влияет точка пивота.<br />
*Графический ресурс объекта Image должен лежать в базе ресурсов проекта<br />
*Графический ресурс объекта Image может иметь бордеры (о бордерах смотри больше на [[Интерфейс ResourceEditor]])<br />
*Независимо от видимой формы графического ресурса на сцене форма объекта Image прямоугольная (мы видим прямоугольную рамочку)<br><br />
*При задании графического ресурса объекту Image необходимо разместить графический ресурс в соответствии с задумкой художников. Для этого необходимо воспользоваться функций "Расположить сцену в соответствии с изображением" Больше о данной функции смотри [[Функция Расположить сцену в соответствии с изображением]]<br />
[[Файл:Image_01.JPG|150px|right]]<br />
<br />
== Параметры ==<br />
*'''id-объекта'''(id) - уникальный номер объекта<br />
*'''тип''' (type) - Выбранный тип объекта определяет его функциональное назначение и его свойства<br />
*'''имя'''(name) - Имя графического объекта в дереве проекта. Может быть произвольным. По умолчанию соответствует имени файла из базы ресурсов.<br />
*'''синхронизация''' (sync)- Применяется для синхронизации между лейаутами, если указан параметр ''нет'' то объект будет активен только на текущем лейауте<br />
*'''память''' (memo) - Если 1, то при повторном открытии экрана объект не обновляет свои параметры (помнит текущие параметры, оставшиеся от предыдущего посещения экрана).<br />
*'''res''' - Графический ресурс для отображения объекта. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''[[прокликиваемая]]''' (res) - Если 1, то картинка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то картинка сама обрабатывает клик, но и пропускает его дальше"<br />
*'''Сохранение параметров''' -Настройка этого параметра актуальна, если приложение в дальнейшем будет сворачиваться в системную панель («трей»). При выходе из трэя будут восстановлены ранее измененные/установленные (при переходе с одного экрана на другой)параметры объектов или подобъектов в зависимости от выбранного варианта для этого параметра. По умолчанию указан параметр "нет". Возможны следующие варианты: "нет", "только объект", "объект с подобъектами", "только подобъекты". <br>Следует помнить, что если выбирается для объекта некоторой сцены значения этого параметра отличное от "нет", то должно и предусматриваться соответствующее значение этого параметра и для этой сцены, и для экрана, содержащего эту сцену.<br />
'''Группа - положение''' <br />
*'''положение X'''(px) - Горизонтальная координата центра графического объекта (его точки пивота) в пикселях. Отсчитывается от точки пивота сцены. <br />
*'''положение Y''' (py)- Вертикальная координата центра графического объекта (его точки пивота) в пикселях. Отсчитывается от точки пивота сцены.<br />
<br />
'''Группа - размер'''<br />
[[Файл:object1.png|400px|right]] <br />
*'''размер -> W''' (w) - Ширина графического объекта в пикселях<br />
*'''размер -> H''' (h)- Высота графического объекта в пикселях<br />
'''Группа - модификаторы'''<br />
*'''alpha''' (al) - Прозрачность: от 0 (прозрачен) до 1 (не прозрачен).<br />
*'''blending''' (bl) - Alpha смешивание (parent - наследует alpha от родителя, blend - смешивание, add - добавление, sub - вычитание, none - ничего не происходит. (Подробнее о Alpha смешивании - здесь)).<br />
*'''angle''' (ang) - Угол поворота в градусах (0 - не повёрнут). Отсчитывается от оси x вниз. Вверх - идут отрицательные углы.<br />
*'''scale x''' (sx) - Масштаб по оси '''x''' (1 - не изменен, 1.5 - увеличен в полтора раза, и т.д.).<br />
*'''scale y''' (sy)- Масштаб по оси '''y''' (1 - не изменен, 1.5 - увеличен в полтора раза, и т.д.).<br />
*'''Принудительный scale x''' - Строгий масштаб по оси '''х''', независимый от масштаба родителей (если указать 0, то будет использоваться обычный скейл с учетом родителей)<br />
*'''Принудительный scale y''' - Строгий масштаб по оси '''y'''.<br />
*'''тайлинг''' - если размер объекта отличается от размера графического ресурса, то с графическим ресурсом:<br />
#ничего не делать (нет)<br />
#замостить им область объекта (тайлинг)<br />
#растянуть по области объекта (растянуть)<br />
*'''z''' - Параметр порядка рисования объекта. Сначала рисуются объекты с большим z, затем, поверх них - с меньшим.<br />
<br />
'''Группа - [[позиционирование]]'''<br />
*'''горизонтальное''' (alHor) - выравнивание по горизонтали (0 - нет выравнивания; 1 - прижать к левому краю; 2- центр; 3 - прижать к правому краю).<br />
*'''вертикальное''' (alVer)- выравнивание по вертикали (0 - нет выравнивания; 1 - прижать к верхнему краю; 2- центр; 3 - прижать к нижнему краю).<br />
<br />
Сам по себе объект Image статичен, т е не может менять положение на сцене.<br />
<br />
== Точка пивота ==<br />
[[Файл:scena.png|400px|right]]<br />
<br />
'''Точка пивота''' - точка, вокруг которой может быть повернут графический ресурс объект Image. Может находится за пределами графического объекта. <br> <br />
Параметры точки пивота задаются в редакторе ресурсов и могут быть изменены в любое время.<br><br />
'''Замечание'''.Точка пивота сцены, как правило, расположена в центре сцены.<br><br />
<br />
[[Файл:pivot_point1.png|400px|left]]<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
'''Пример изменения координат точки пивота'''<br> <br />
Пусть на сцене расположен объект Image c параметром angle=90.<br><br />
Рисунок слева иллюстрирует, что после задания параметра angle=90 точка пивота объекта не сместилась.<br><br />
Рисунок справа иллюстрирует, что при изменении точки пивота объекта (ее переместили вниз) в редакторе ресурсов и после задания параметра angle=90 в редакторе точка пивота остается на месте.<br />
<br />
[[Файл:pivot1.png|400px|left]][[Файл:pivot2.png|400px|center]]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Button&diff=5884Button2014-07-18T07:01:27Z<p>Odyadina: /* Основные параметры */</p>
<hr />
<div>{{TOC right}}<br />
'''Общие параметры'''<br />
(см. описание [[Object|Object]])<br />
<br />
*'''[[прокликиваемая]]''' - Если 1, то кнопка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то кнопка сама обрабатывает клик, но и пропускает его дальше<br />
*'''память''' - Если 1, то при повторном открытии экрана объект не обновляет свое состояние (помнит текущие параметры, оставшиеся от предыдущего посещения экрана)<br />
<br />
== Основные параметры ==<br />
'''Группа - внешний вид'''<br />
[[Файл:But.png|250px|right]]<br />
<br />
*'''up''' - Графический ресурс для отображения отжатой кнопки. <br />
*'''down''' - Графический ресурс для отображения нажатой кнопки. Может отсутствовать.<br />
*'''over''' - Графический ресурс для отображения кнопки с мышкой над ней. Может отсутствовать.<br />
*'''disable''' - Графический ресурс для отображения неактивной кнопки. Может отсутствовать. <br />
*'''disable alpha''' - Можно указать с какой прозрачностью будет кнопка в состоянии disable, например, если кнопку в неактивном состоянии нужно прятать, то ставим 0, и кнопка в состоянии disable будет невидимой.<br />
*'''накладывать''' - Если "1", то графика из параметра '''down''' будет накладываться на графику из параметра '''up''' при нажатии на кнопу, если "0", то не накладывается.<br />
*'''down scale''' - Изменяет размеры графического ресурса для отображения нажатой кнопки. Может отсутствовать.<br />
*'''over scale''' - Изменяет размеры графического ресурса для отображения кнопки с мышкой над ней. Может отсутствовать.<br />
<br />
'''Группа - звуки'''<br />
<br />
*'''up''' - Звуковой ресурс для проигрывания отжатой кнопки. Может отсутствовать.<br />
*'''down''' - Звуковой ресурс для проигрывания нажатой кнопки. Может отсутствовать.<br />
*'''over''' - Звуковой ресурс для проигрывания кнопки с мышкой над ней. Может отсутствовать.<br />
<br />
'''Группа - время'''<br />
<br />
*'''невидимости''' - Время невидимости перед открытием.<br />
*'''открытия''' - Время проявления кнопки от полной прозрачности к прозрачности, заданной в модификаторах.<br />
*'''закрытия''' - Время исчезания кнопки до полной прозрачности.<br />
*'''Пауза''' - Время, в течении которого кнопка после нажатия не будет воспринимать клик, но будет выглядеть как активная. Применяется для предотвращения случайного двойного нажатия, например, для кнопки покупки или закрытия окна, когда закрытие длится некоторое время. Этот параметр НЕ применяется для кнопки хинта с перезарядкой.<br />
<br />
'''надпись ID''' - Надпись на кнопке, перетаскивается из редактора строк.<br />
<br />
'''надпись''' - Надпись на кнопке. Используется только, если нет графики. <br />
<br />
'''Группа - [[шрифт]]'''<br />
<br />
*'''имя''' - Номер шрифта - целое число, начиная с 0 (порядковый номер шрифта).<br />
*'''размер''' - Размер шрифта в пикселях.<br />
<br />
== Дополнительные параметры ==<br />
<br />
*'''вернуться назад''' - 1 - кнопка служит для возврата на предыдущий экран, id экрана для перехода игнорируется.<br />
*'''перейти на''' - Экран для перехода после клика на кнопку, если условные переходы (ниже) не сработали<br />
*'''задержка перехода''' - Задержка перед переходом на следующий экран в ms.<br />
*'''рейтинг''' - Открывает системное окно с предложением проголосовать, данные берёт из rating.xml<br />
Если на девайсе была нажата кнопка "отрейтинговать", то в опции запишется параметр rating значение 1, если нажата кнопка "позже" - rating 2, "никогда" - rating 3.<br />
*'''перезагрузить лэйаут''' - 1 - по нажатию на кнопку перезагружает лэйаут<br />
*'''отменить текущие закачки''' - 1 - по нажатию на кнопку отменяет все текущие закачки<br />
*'''перезапустить текущие закачки''' - 1 - по нажатию на кнопку перезапускает все текущие закачки<br />
*'''не предзагружать''' - Не загружает в фоновой загрузке графику экрана на которую ведёт кнопка.<br />
*'''закрыть приложение''' - По нажатию закрывает приложение.<br />
*'''восстановить покупки''' - 1 - по нажатию на кнопку попытаться восстановить покупки.<br />
<br />
'''Группа - [[позиционирование]]'''<br />
*'''горизонтальное''' - 0 - нет выравнивания; 1 - прижать к левому краю; 2 - центр; 3 - к правому<br />
*'''вертикальное''' - 0 - нет выравнивания; 1 - прижать к верхнему краю; 2 - центр; 3 - к нижнему<br />
<br />
== Добавляемые параметры ==<br />
<br />
<br />
[[Файл:Menadd.png|300px|right]]<br />
Меню выбора ''Добавляемые параметры'' к объектам активируется по правой кнопки мыши. <br />
<br />
[[Файл:+.png]] '''если был экран''' - Переходим на определенный экран, если некоторый экран был уже хотя бы раз посещен.<br />
*'''был экран'''- Проверяемый экран, который мы проверяем на то, был ли он уже открыт хотя бы один раз.<br />
*'''перейти на''' - Переходим на этот экран, если экран из предыдущего поля уже открывался.<br />
<br />
[[Файл:+.png]] '''изменить состояние объекта''' - При клике на кнопку перевести объект в новое состояние.<br />
*'''объект''' - Изменить состояние у выбранного объекта<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля. <br />
<br />
[[Файл:+.png]] '''изменить параметр объекта''' - Изменить параметр (свойство) объекта при клике на кнопку.<br />
*'''объект''' - Изменить параметр у выбранного объекта<br />
*'''параметр''' - Параметр, который мы изменяем. <br />
*'''значение''' - Новое значение параметра.<br />
<br />
[[Файл:+.png]] '''изменить графику объекта''' - При клике на кнопку изменить графический ресурс объекта.<br />
*'''объект''' - Изменить параметр у выбранного объекта<br />
*'''параметр''' - Параметр, который мы изменяем.<br />
*'''значение''' - Новое значение графического ресурса (перетаскивается из редактора ресурсов). <br />
<br />
[[Файл:+.png]] '''изменить id текста''' - При клике на кнопку меняет id текста на выбранный у другого объекта.<br />
*'''объект''' - Объект у которого меняется id текста. <br />
*'''свойство''' - Свойство, в которое записывается новый id текста.<br />
*'''значение''' - Новое значение текстового ресурса (перетаскивается из редактора текстов). <br />
<br />
[[Файл:+.png]] '''изменить id объекта''' - При клике на кнопку меняет id объекта на выбранный у другого объекта(на пример у инвентаря таким образом указывается id объекта помещаемого в инвентарь).<br />
*'''объект''' - Объект у которого меняется id объекта. <br />
*'''свойство''' - Свойство, в которое записывается новый id объекта.<br />
*'''значение''' - Объект, id которого будет записан. <br />
<br />
[[Файл:+.png]] '''изменить id экрана объекта''' - При клике на кнопку меняет id экрана на выбранный у другого объекта(на пример можно использовать для изменения id экрана для перехода у кнопки).<br />
*'''объект''' - Объект у которого меняется id экрана. <br />
*'''свойство''' - Свойство, в которое записывается новый id экрана.<br />
*'''значение''' - Экран, id которого будет записан. <br />
<br />
[[Файл:+.png]] '''совершить in-app покупку''' - При клике на кнопку открывается системное окно с предложением совершить in-app покупку.<br />
*'''id покупки''' - Внутренний id покупки для приложения, указывается в объекте store<br />
*'''объект(успех)''' - Объект, которому сообщается об удачной покупке<br />
*'''состояние(успех)''' - Состояние в которое переводится выбранный объект в случае успешной покупки<br />
*'''объект(провал)''' - Объект, которому сообщается о неудачной покупке<br />
*'''состояние(провал)''' - Состояние в которое переводится объект в случае неудачной покупки<br />
<br />
[[Файл:+.png]] '''скачать загружаемый контент''' - При клике на кнопку будет совершена попытка скачать контент. <br />
*'''url''' - Ссылка на zip архив с контентом в интернете.<br />
*'''объект (успех)''' - Этому объекту будет сообщено об успехе закачки.<br />
*'''состояние (успех)''' - Это состояние будет установлено объекту при успешной закачке.<br />
*'''объект (провал)''' - Этому объекту будет сообщено о неудаче закачки.<br />
*'''состояние (провал)''' - Это состояние будет установлено объекту при ошибке/отмене закачки.<br />
*'''счетчик прогресса''' - Объект типа счетчик, который будет отображать прогресс загрузки. Крайне желательно, чтобы он имел диапазон 0..100.<br />
<br />
[[Файл:+.png]] '''открыть внешнюю ссылку''' - При клике на кнопку открыть ссылку в браузере.<br />
*'''id cсылки''' - Если в опциях не будет найдено ссылки, то сам айдишник будет интерпретироваться как ссылка.<br />
*'''id cсылки (iOS)''' - Если задано, то на iOS устройствах будет использоваться ВМЕСТО основного линка. Ссылка которая открывается на iOS устройствах(может быть в виде itms://.. itms-apps://.. http://...).<br />
*'''id cсылки (Android)''' - Если задано, то на Android устройствах будет использоваться ВМЕСТО основного линка.<br />
*'''id cсылки (текстовая база)''' - Если задано, то будет использоваться ссылка из записи текстовой базы(перетаскивается запись из текстовой базы) ВМЕСТО основного линка. Какая ссылка будет использоваться задаётся при сборке.<br />
<br />
==Примечания и дополнения==<br />
<br />
'''Важно помнить:''' <br />
<br />
*Кнопка реагирует только на отпускание. (В отличии от машины, которая может реагировать как на нажатие, команда click, так и на отпускание, команда touch_up.)<br/><br />
Часто для простых похожих действий используют как кнопки, так и машины. Важно учитывать, на каком этапе тапа они срабатывают (нажатие, удерживание, отпускание) потому, что игрок может очень длительное время удерживать палец на экране. <br/><br />
Можно сделать так, что один тап будет приводить в действие два объекта. Например, тапнуть на машину, которая реагирует на нажатие, а затем перетащить палец на кнопку (или поместить кнопку поверх машины) и отпустить. В таком случае на один тап откликнется и машина, и кнопка.<br />
<br />
*Следует аккуратно использовать кнопки, если у них или их родителей прокликиваемость = 2. В таком случае, если кнопку двигать (например, анимация колыхания), то она потеряет фокус и не будет реагировать на тап.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Button&diff=5881Button2014-07-17T10:24:26Z<p>Odyadina: /* Основные параметры */</p>
<hr />
<div>{{TOC right}}<br />
'''Общие параметры'''<br />
(см. описание [[Object|Object]])<br />
<br />
*'''[[прокликиваемая]]''' - Если 1, то кнопка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то кнопка сама обрабатывает клик, но и пропускает его дальше<br />
*'''память''' - Если 1, то при повторном открытии экрана объект не обновляет свое состояние (помнит текущие параметры, оставшиеся от предыдущего посещения экрана)<br />
<br />
== Основные параметры ==<br />
'''Группа - внешний вид'''<br />
[[Файл:But.png|250px|right]]<br />
<br />
*'''up''' - Графический ресурс для отображения отжатой кнопки. <br />
*'''down''' - Графический ресурс для отображения нажатой кнопки. Может отсутствовать.<br />
*'''over''' - Графический ресурс для отображения кнопки с мышкой над ней. Может отсутствовать.<br />
*'''disable''' - Графический ресурс для отображения неактивной кнопки. Может отсутствовать. <br />
*'''disable alpha''' - Можно указать с какой прозрачностью будет кнопка в состоянии disable, например, если кнопку в неактивном состоянии нужно прятать, то ставим 0, и кнопка в состоянии disable будет невидимой.<br />
*'''накладывать''' - Если "1", то графика из параметра '''down''' будет накладываться на графику из параметра '''up''' при нажатии на кнопу, если "0", то не накладывается.<br />
*'''down scale''' - Изменяет размеры графического ресурса для отображения нажатой кнопки. Может отсутствовать.<br />
*'''over scale''' - Изменяет размеры графического ресурса для отображения кнопки с мышкой над ней. Может отсутствовать.<br />
<br />
'''Группа - звуки'''<br />
<br />
*'''up''' - Звуковой ресурс для проигрывания отжатой кнопки. Может отсутствовать.<br />
*'''down''' - Звуковой ресурс для проигрывания нажатой кнопки. Может отсутствовать.<br />
*'''over''' - Звуковой ресурс для проигрывания кнопки с мышкой над ней. Может отсутствовать.<br />
<br />
'''Группа - время'''<br />
<br />
*'''невидимости''' - Время невидимости перед открытием.<br />
*'''открытия''' - Время проявления кнопки от полной прозрачности к прозрачности, заданной в модификаторах.<br />
*'''закрытия''' - Время исчезания кнопки до полной прозрачности.<br />
<br />
'''надпись ID''' - Надпись на кнопке, перетаскивается из редактора строк.<br />
<br />
'''надпись''' - Надпись на кнопке. Используется только, если нет графики. <br />
<br />
'''Группа - [[шрифт]]'''<br />
<br />
*'''имя''' - Номер шрифта - целое число, начиная с 0 (порядковый номер шрифта).<br />
*'''размер''' - Размер шрифта в пикселях.<br />
<br />
== Дополнительные параметры ==<br />
<br />
*'''вернуться назад''' - 1 - кнопка служит для возврата на предыдущий экран, id экрана для перехода игнорируется.<br />
*'''перейти на''' - Экран для перехода после клика на кнопку, если условные переходы (ниже) не сработали<br />
*'''задержка перехода''' - Задержка перед переходом на следующий экран в ms.<br />
*'''рейтинг''' - Открывает системное окно с предложением проголосовать, данные берёт из rating.xml<br />
Если на девайсе была нажата кнопка "отрейтинговать", то в опции запишется параметр rating значение 1, если нажата кнопка "позже" - rating 2, "никогда" - rating 3.<br />
*'''перезагрузить лэйаут''' - 1 - по нажатию на кнопку перезагружает лэйаут<br />
*'''отменить текущие закачки''' - 1 - по нажатию на кнопку отменяет все текущие закачки<br />
*'''перезапустить текущие закачки''' - 1 - по нажатию на кнопку перезапускает все текущие закачки<br />
*'''не предзагружать''' - Не загружает в фоновой загрузке графику экрана на которую ведёт кнопка.<br />
*'''закрыть приложение''' - По нажатию закрывает приложение.<br />
*'''восстановить покупки''' - 1 - по нажатию на кнопку попытаться восстановить покупки.<br />
<br />
'''Группа - [[позиционирование]]'''<br />
*'''горизонтальное''' - 0 - нет выравнивания; 1 - прижать к левому краю; 2 - центр; 3 - к правому<br />
*'''вертикальное''' - 0 - нет выравнивания; 1 - прижать к верхнему краю; 2 - центр; 3 - к нижнему<br />
<br />
== Добавляемые параметры ==<br />
<br />
<br />
[[Файл:Menadd.png|300px|right]]<br />
Меню выбора ''Добавляемые параметры'' к объектам активируется по правой кнопки мыши. <br />
<br />
[[Файл:+.png]] '''если был экран''' - Переходим на определенный экран, если некоторый экран был уже хотя бы раз посещен.<br />
*'''был экран'''- Проверяемый экран, который мы проверяем на то, был ли он уже открыт хотя бы один раз.<br />
*'''перейти на''' - Переходим на этот экран, если экран из предыдущего поля уже открывался.<br />
<br />
[[Файл:+.png]] '''изменить состояние объекта''' - При клике на кнопку перевести объект в новое состояние.<br />
*'''объект''' - Изменить состояние у выбранного объекта<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля. <br />
<br />
[[Файл:+.png]] '''изменить параметр объекта''' - Изменить параметр (свойство) объекта при клике на кнопку.<br />
*'''объект''' - Изменить параметр у выбранного объекта<br />
*'''параметр''' - Параметр, который мы изменяем. <br />
*'''значение''' - Новое значение параметра.<br />
<br />
[[Файл:+.png]] '''изменить графику объекта''' - При клике на кнопку изменить графический ресурс объекта.<br />
*'''объект''' - Изменить параметр у выбранного объекта<br />
*'''параметр''' - Параметр, который мы изменяем.<br />
*'''значение''' - Новое значение графического ресурса (перетаскивается из редактора ресурсов). <br />
<br />
[[Файл:+.png]] '''изменить id текста''' - При клике на кнопку меняет id текста на выбранный у другого объекта.<br />
*'''объект''' - Объект у которого меняется id текста. <br />
*'''свойство''' - Свойство, в которое записывается новый id текста.<br />
*'''значение''' - Новое значение текстового ресурса (перетаскивается из редактора текстов). <br />
<br />
[[Файл:+.png]] '''изменить id объекта''' - При клике на кнопку меняет id объекта на выбранный у другого объекта(на пример у инвентаря таким образом указывается id объекта помещаемого в инвентарь).<br />
*'''объект''' - Объект у которого меняется id объекта. <br />
*'''свойство''' - Свойство, в которое записывается новый id объекта.<br />
*'''значение''' - Объект, id которого будет записан. <br />
<br />
[[Файл:+.png]] '''изменить id экрана объекта''' - При клике на кнопку меняет id экрана на выбранный у другого объекта(на пример можно использовать для изменения id экрана для перехода у кнопки).<br />
*'''объект''' - Объект у которого меняется id экрана. <br />
*'''свойство''' - Свойство, в которое записывается новый id экрана.<br />
*'''значение''' - Экран, id которого будет записан. <br />
<br />
[[Файл:+.png]] '''совершить in-app покупку''' - При клике на кнопку открывается системное окно с предложением совершить in-app покупку.<br />
*'''id покупки''' - Внутренний id покупки для приложения, указывается в объекте store<br />
*'''объект(успех)''' - Объект, которому сообщается об удачной покупке<br />
*'''состояние(успех)''' - Состояние в которое переводится выбранный объект в случае успешной покупки<br />
*'''объект(провал)''' - Объект, которому сообщается о неудачной покупке<br />
*'''состояние(провал)''' - Состояние в которое переводится объект в случае неудачной покупки<br />
<br />
[[Файл:+.png]] '''скачать загружаемый контент''' - При клике на кнопку будет совершена попытка скачать контент. <br />
*'''url''' - Ссылка на zip архив с контентом в интернете.<br />
*'''объект (успех)''' - Этому объекту будет сообщено об успехе закачки.<br />
*'''состояние (успех)''' - Это состояние будет установлено объекту при успешной закачке.<br />
*'''объект (провал)''' - Этому объекту будет сообщено о неудаче закачки.<br />
*'''состояние (провал)''' - Это состояние будет установлено объекту при ошибке/отмене закачки.<br />
*'''счетчик прогресса''' - Объект типа счетчик, который будет отображать прогресс загрузки. Крайне желательно, чтобы он имел диапазон 0..100.<br />
<br />
[[Файл:+.png]] '''открыть внешнюю ссылку''' - При клике на кнопку открыть ссылку в браузере.<br />
*'''id cсылки''' - Если в опциях не будет найдено ссылки, то сам айдишник будет интерпретироваться как ссылка.<br />
*'''id cсылки (iOS)''' - Если задано, то на iOS устройствах будет использоваться ВМЕСТО основного линка. Ссылка которая открывается на iOS устройствах(может быть в виде itms://.. itms-apps://.. http://...).<br />
*'''id cсылки (Android)''' - Если задано, то на Android устройствах будет использоваться ВМЕСТО основного линка.<br />
*'''id cсылки (текстовая база)''' - Если задано, то будет использоваться ссылка из записи текстовой базы(перетаскивается запись из текстовой базы) ВМЕСТО основного линка. Какая ссылка будет использоваться задаётся при сборке.<br />
<br />
==Примечания и дополнения==<br />
<br />
'''Важно помнить:''' <br />
<br />
*Кнопка реагирует только на отпускание. (В отличии от машины, которая может реагировать как на нажатие, команда click, так и на отпускание, команда touch_up.)<br/><br />
Часто для простых похожих действий используют как кнопки, так и машины. Важно учитывать, на каком этапе тапа они срабатывают (нажатие, удерживание, отпускание) потому, что игрок может очень длительное время удерживать палец на экране. <br/><br />
Можно сделать так, что один тап будет приводить в действие два объекта. Например, тапнуть на машину, которая реагирует на нажатие, а затем перетащить палец на кнопку (или поместить кнопку поверх машины) и отпустить. В таком случае на один тап откликнется и машина, и кнопка.<br />
<br />
*Следует аккуратно использовать кнопки, если у них или их родителей прокликиваемость = 2. В таком случае, если кнопку двигать (например, анимация колыхания), то она потеряет фокус и не будет реагировать на тап.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Taskorganizer&diff=5880Taskorganizer2014-07-17T10:13:50Z<p>Odyadina: </p>
<hr />
<div>{{TOC right}}<br />
Менеджер задач и квестов<br />
<br />
=Свойства=<br />
[[Файл:Task.jpg|250px|thumb|right]]<br />
[[Файл:Task_1.jpg|250px|thumb|right]]<br />
'''Общие параметры'''<br />
*'''economics''' - Объект типа экономикс.<br />
*'''предметы''' - Объект типа eitems.<br />
*'''таблица''' - Таблица куда будут помещены иконки заданий. При тапе на таблицу объекту Taskorganizer вызывается состояние show. Иконки подтягиваются из текстовой базы (icon1).<br />
*'''добавлять иконки''' - 1 - добавлять в таблицу иконки, 0 - тексты из текстового id (поле word).<br />
*'''шаблон предмета''' - Объект типа etaskitem будет использоваться при показе превью задания.<br />
*'''фильтрация''' - Категория, которые должны будут отобразиться в таблице логов при вызове состояния logbook. Пустая строка - все.<br />
*'''таблица логов''' - Таблица куда будут помещены записи лог бука.<br />
*'''новая запись''' - Объект, которому будет вызвано состояние show при добавлении новой записи в логбук.<br />
*'''новое задание''' - Графический ресурс, который будет отмечать новые задания. Смещение должно достигаться пивотом.<br />
*'''уведомление''' - Текстовый айди заголовка связанных с задачами уведомлений.<br />
*'''вероятность уведомления''' - Подменная вероятность нахождения предмета нужного для задания по уведомлению с которого мы пришли. 0 - использовать значение по умолчанию.<br />
*'''выполнять непрочитанные''' - 1 - выполнять непрочитанные таски, 0 - нет.<br />
*'''хронологический порядок''' - 1 - записывать задачи в хронологическом порядке, 0 - нет.<br />
'''Группа угадайка'''<br />
<br />
Угадайка - задание, в котором игроку предлагается вспомнить или угадать, кто из персонажей просил тот или иной коллекционный предмет. Владелец предмета указывается в настройке подзадачи.<br />
<br />
*'''показывать через''' - Через какое количество обычных задач показывать угадайку.<br />
*'''с уровня''' - Угадайка будет генерироваться только начиная с данного уровня.<br />
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.<br />
*'''иконка''' - Объект, в который сложим иконку предмета.<br />
*'''иконка для таблицы''' - Иконка соответствующая угадайке в таблице задач.<br />
*'''ресурс 1''' - Деньги даваемые за выполнение задания.<br />
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.<br />
*'''опыт''' - Опыт даваемый за выполнение задания.<br />
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.<br />
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.<br />
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.<br />
'''Группа рулетка'''<br />
<br />
На самом деле название "рулетка" весьма условное. В этом разделе можно поместить любое периодически повторяющееся задание.<br />
<br />
*'''показывать через''' - Через какое количество обычных задач показывать рулетку.<br />
*'''с уровня''' - Рулетка будет генерироваться только начиная с данного уровня.<br />
*'''машина''' - Объект, которому при активации будет вызвано состояние show.<br />
*'''иконка для таблицы''' - Иконка соответствующая рулетке в таблице задач.<br />
'''Группа генерируемые'''<br />
<br />
В этой группе находятся периодически генерируемые задания на прохождение локаций.<br />
<br />
*'''активных задач''' - Эти задачи будут генерироваться, когда активных задач столько или меньше.<br />
*'''с уровня''' - Эти задачи будут генерироваться только начиная с данного уровня.<br />
*'''максимально''' - Будет сгенерированно случайное количество задач от 1 до n.<br />
*'''машина''' - Объект, которому при активации будет вызвано состояние show. Она же после угадайки будет переведена в состояние win или fail.<br />
*'''название''' - Текстовый объект, в который будет сложено название локации.<br />
*'''превью''' - Объект, в который сложим превью локации для генерируемой задачи.<br />
*'''иконка для таблицы''' - Иконка соответствующая генерируемому таску в таблице задач.<br />
*'''ресурс 1''' - Деньги даваемые за выполнение задания.<br />
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.<br />
*'''опыт''' - Опыт даваемый за выполнение задания.<br />
*'''награда ресурс 1''' - Счетчик, которому будет присвоено количество призового ресурса 1.<br />
*'''награда ресурс 2''' - Счетчик, которому будет присвоено количество призового ресурса 2.<br />
*'''награда опыт''' - Счетчик, которому будет присвоено количество призового опыта.<br />
<br />
<pre><br />
Если перед генерацией случайного таска на исследование локации указать параметру gen_loc значение от 0 до n, то ближайшая генерируемая задача будет для конкретной локации под указанным номером. После генерации параметр gen_loc становится -1.<br />
</pre><br />
<br />
<pre><br />
Если перед генерацией случайного таска от персоанжа указать параметру gen_face значение от 0 до n, то ближайшая генерируемая задача будет от персонажа под указанным номером. После генерации параметр gen_face становится -1.<br />
</pre><br />
<br />
=Taskorganizer setup=<br />
[[Файл:Task 2.jpg|250px|thumb|right]]<br />
<br />
*'''id''' - Идентификатор задания. Используется в других заданиях. По общей концепции - строковый айди.<br />
'''Для каждого задания(записи в logbook) должен быть свой уникальный id.'''<br />
*'''хинт''' - Список строк-подсказок для задачи.<br />
*'''название (объект)''' - Текстовый объект, в который мы сложим название задания.<br />
*'''машина''' - Объект, которому при активации задания будет вызвано состояние show, а при повторном открытии задания show_old.<br />
*'''таблица''' - Таблица куда будут помещены темплейты предметов данного задания.<br />
*'''описание (объект)''' - Текстовый объект, в который мы сложим описание задания. Описание подтягивается из текстовой базы из второго столбика (sentence1) текстового id задания.<br />
*'''награда (ресурс 1)''' - Счетчик отображающий награду в ресурсе 1 за выполнение задания.<br />
*'''награда (ресурс 2)''' - Счетчик отображающий награду в ресурсе 2 за выполнение задания.<br />
*'''награда (опыт)''' - Счетчик отображающий награду в опыте за выполнение задания.<br />
*'''таблица хинта''' - Таблица, в которую будем складывать хинты.<br />
<br />
'''Необходимое для логбука'''<br />
<br />
*'''для журнала''' - 0 - задача предназначена для списка задач, 1 - задача предназначена для журнала.<br />
*'''категория''' - Категория к которой относится задача/запись. Пока используется только задачами для логбука.<br />
<br />
'''Критерии появления'''<br />
<br />
*'''уровень''' - Минимальный уровень, при котором может появиться задание.<br />
*'''аномалия''' - В какой-либо локации присутствует аномалия данного типа. -1 - не учитывать условие.<br />
*'''локация''' - Локация для которой будем проверять мастерство. -1 - не учитывать условие.<br />
*'''мастерство''' - Уровень мастерства, который должен быть достигнут в локиции. -1 - не учитывать условие.<br />
*'''завершены до''' - Задания, которые должны быть завершены до появления этого.<br />
*'''получены до''' - Задания, которые должны быть получены до появления этого.<br />
*'''не завершены до''' - Задания, которые должны быть НЕ завершены до появления этого.<br />
*'''объект до''' - Объект, который должен находиться в состоянии_до для появления задания.<br />
*'''состояние до''' - Состояние объекта_до, в котором вызывается генерация задания.<br />
*'''коллекционные''' - Коллекционные предметы, которые должны быть найдены для появления задания.<br />
*'''вероятность нужного''' - Когда мы будем проходить локации, в которых есть предметы необходимые для задания - мы будем подменять вероятность из локации вот этой вероятностью. 0 - использовать дефолтную.<br />
<br />
'''Критерии завершения'''<br />
<br />
*'''с аномалией''' - Задача выполняется при нахождение локации с аномалией данного типа. Не путать с аномалией необходимой для возникновения задания. -1 - не учитывать аномалию. <br />
*'''задачи''' - Задания, выполнение которых требуется для выполнения данной.<br />
*'''предметы''' - Задание завершается, когда получены следующие предметы (коллекционные и инвентарные единым списком).<br />
*'''объект''' - Объект, который должен находиться в определенном состоянии,для завершения задания.<br />
*'''состояние''' - Состояние объекта, в котором вызывается проверка задания.<br />
<br />
'''Награда'''<br />
<br />
*'''ресурс 1''' - Деньги даваемые за выполнение задания.<br />
*'''ресурс 2''' - Кристаллы даваемые за выполнение задания.<br />
*'''опыт''' - Опыт даваемый за выполнение задания.<br />
*'''перевести объект''' - При выполнении задания этот объект будет переведен в новое состояние.<br />
*'''в состояние''' - Состояние для объекта из предыдущего поля.<br />
<br />
==Изменить состояние объекта - новое задание==<br />
<br />
Позволяет изменять состояние объекту каждый раз при появлении нового задания, находится в taskorganizer setup.<br />
<br />
=Состояния=<br />
<br />
*'''Show''' - При вызове этого состояния из таблицы с иконками заданий открывается соответствующая машина задания, прописанная в группе '''задание'''.<br />
*'''Check''' - При вызове проверяется выполнение текущих заданий.<br />
*'''Generate''' - При вызове подбирается подходящее задание в зависимости от прогресса игрока.<br />
*'''log_check''' - При вызове состояния проверяется доступны ли новые записи в логбук.<br />
*'''log_show''' - Заполняет таблицу логбука записями с текущим фильтром.<br />
*'''refresh''' - Удаляет иконку выполненного задания из таблицы. Лучше всего вызывать после Check.<br />
*'''add_hint''' - Добавляет в таблицу хинтов следующий текстовый ID из поля хинты текущего таска. Если все хинты показаны, то в опции записывается параметр haveHints=0.<br />
*'''task_prev''' - Используется, если открыта машина-шаблон текущего задания. В этом состоянии показывается предыдущее по списку таблицы задание.<br />
*'''task_next''' - Показывает следующее по списку таблицы задание.<br />
<pre><br />
Состояния task_prev и task_next работают циклически, после первой задачи показывают последнюю и наоборот.<br />
</pre><br />
*'''show_id''' - Показать окно задачи, взяв ее id из параметра.<br />
*'''guess''' - Ответить на текущую угадайку, взяв ответ из параметра (param). Taskorganizer также хранит правильный ответ на текущую угадайку в параметре ''guess_answer'', его можно использовать, если нужно оставить игроку меньше вариантов для угадывания.<br />
*'''add_hint_last''' - Добавить подсказку последней добавленной задаче.<br />
*'''add_hint_top''' - Добавить подсказку верхней задаче в таблице.<br />
*'''guess_who_reward''' - начислить награду за последнюю угадайку.<br />
*'''roulette_complete''' -состояние, вызываемое при выполнении текущей задачи "рулетка".<br />
*'''cheat_complete''' - если его вызвать, то при следующем check выполнится задача, для которой последней показывали превью.<br />
<br />
ПРИМЕЧАНИЕ: при проверке задач для логбука для последней выполненной будет перезаписано поле filter автоматически.<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря. <br />
* [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
<br />
=Пример проекта=<br />
S:\!MOBILE\!!!EditorGames\Wiki_sample\Taskorganizer</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Text&diff=5665Text2014-05-12T08:04:49Z<p>Odyadina: /* Параметры */</p>
<hr />
<div>== Введение ==<br />
[[Файл:2223.png]]<br><br />
Для отображения текстовой информации с поддержкой многоязычности. Для управления текстовыми ресурсами используется TextEditor. <br><br />
<br />
Если необходимо разместить текст на сцене необходимо создать объект с типом text и перетащить на поле текстID текстовую строку из TextEditor. Также можно просто перенести их TextEditor выбранную текстовую запись, при этом автоматически создастся объект с типом Text.<br><br />
<br />
<br />
== Параметры объекта ==<br />
<br />
=== Общие параметры ===<br />
(см. описание [[Object|Object]])<br />
<br />
=== Основные параметры ===<br />
<br />
*'''res''' - Графический ресурс подложки на которой выводится текст. Перетаскивается мышкой из редактора текста (поле должно находится в состоянии редактирования). Может отсутствовать.<br />
*'''текстID''' - Выводимый текст перетаскивается из ресурса тектстов, для перетягивания поле в объекте Text должно быть в режиме редактирования. Решетка (#) разделяет на страницы, черта (|) - принудительный переход на новую строку.<br />
*'''текст''' - Выводимый текст без использования базы текстовых ресурсов. Решетка (#) разделяет на страницы, черта (|) - принудительный переход на новую строку.<br />
*'''состояние''' - в поле указывается состояние текстового объекта, в которое он перейдет при загрузке экрана (это поле часто оставляют пустым, а состояния задают машиной).<br />
<br />
'''!!! - Необходимо обязательно сохранять любые изменения с текстом в редакторе TextEditor.'''<br />
<br />
[[Файл:Text1.PNG|800px|thumb|center]]<br />
<br />
=== Дополнительные параметры ===<br />
<br />
[[Файл:Text2.PNG|800px|thumb|right]] <br />
<br />
'''Группа - форматирования'''<br />
<br />
*'''dx''' - Бордюр (отступ текста слева и справа от границы прямоугольника объекта);<br />
*'''dy''' - Бордюр (отступ текста сверху и снизу от границы прямоугольника объекта);<br />
*'''отступ''' - Вертикальное расстояние между строчками в пикселях;<br />
*'''h align''' - Горизонтальное форматирование. Если (c) - центрирование по горизонтали, если (r) - прижатие вправо;<br />
*'''v align''' - Вертикальное форматирование. Если (c) - центрирование по вертикали.<br />
[[Файл:2224.png|250px|center]]<br />
[[Файл:Text11.png|250px|left]]<br />
[[Файл:Text22.png|250px|center]]<br />
<br><br />
<br />
'''Группа - Параметры отображения текста'''<br />
<br />
*'''время до открытия''' - Время перед началом проявления текста (от невидимого до заданной прозрачности);<br />
*'''время открытия''' - Время проявления текста и подложки до alpha в начале;<br />
*'''время закрытия''' - Время исчезновения текста и подложки от alpha до 0 в конце. Если отрицательно - текст не закрывается;<br />
*'''буквы''' - Задержка в ms для перехода к новой букве при подсветке;<br />
*'''слова''' - Задержка в ms перед подсветкой следующего слова;<br />
*'''страницы''' - Задержка в ms перед переходом к следующей странице или увяданию по alpha-каналу.<br />
<br />
'''Группа - Параметры используемого [[шрифт]]а'''<br />
<br />
*'''имя''' - Номер [[шрифт]]а - целое число, начиная с 0 (порядковый номер шрифта).<br />
*'''размер''' - Размер [[шрифт]]а в поинтах.<br />
*'''цвет 1''' - Цвет текста начального вида (бледный).<br />
*'''цвет 2''' - Цвет прочитанного текста (контрастный). Чтение делается по буквам.<br />
<br />
'''Группа - Параметры поведения текста'''<br />
<br />
*'''автопромотка''' - Автоматический переход на следующую страницу после завершения отображения текста;<br />
* '''зациклить''' - Зациклить страницы (после последней, перейти опять на первую);<br />
*'''подсветка''' - Тип подсветки: <br />
**0-не подсвечивать, <br />
**1-по слову; <br />
**2-по букве слова (караоке); <br />
**3-по букве с начала страницы.<br />
*'''звук''' - 1 - есть озвучка, 0 - нет;<br />
*'''случайный выбор''' - 1 - при переключении страницы будет выбираться случайная, 0 - все страницы последовательно. Если выбрана 1 - в редакторе Texts Editor между страницами надо поставить знак #. <br />
<br>Например:<br />
<br />
[[Файл:Text3.PNG|800px|thumb|center]]<br />
<br />
*'''голос''' - голос для озвучки. Звуковой файл для одной реплики.<br />
*'''позиционирование текста'''<br />
** горизонтальное - 0 - нет выравнивания; 1 - прижать к левому краю; 2 - центр; 3 - к правому;<br />
** вертикальное - 0 - нет выравнивания; 1 - прижать к верхнему краю; 2 - центр; 3 - к нижнему.<br />
<br />
=== Добавляемые параметры ===<br />
<br />
<br />
[[Файл:Menadd.png|300px|right]]<br />
Меню выбора ''Добавляемые параметры'' к объектам активируется по правой кнопки мыши. <br />
<br />
[[Файл:+.png]] '''голос для озвучки''' - голос для озвучки 1 реплики. Следить за тем, чтобы количество звуков совпадало с количеством реплик.<br />
=== Состояния ===<br />
<br />
<br />
*'''start''' - это состояние проверяет время ''до открытия'' и переходит либо в ''beg'', если время до открытия не ноль, либо в ''open'', если время до открытия равняется нулю;<br />
<br />
*'''beg''' - это состояние "ждет" время ''до открытия'' и переходит в ''open'';<br />
<br />
*'''open''' - плавно проявляет текст до его нормального ''alpha'' в течении ''времени открытия'';<br />
<br />
*'''first''' - это состояние перезапускает текст без появления по ''alpha''; в этом состоянии текстовый объект мгновенно отобразит первую (или единственную) страницу текста; <br />
<br />
*'''next''' - в этом состоянии текстовый объект мгновенно отобразит следующую за текущей страницу текста (если текущая страница - последняя, то в этом состоянии ничего не произойдет);<br />
<br />
*'''close''' - плавно растворяет текст до ''alpha=0'' в течении ''времени закрытия'', после чего переходит в состояние ''end'';<br />
<br />
*'''end''' - в этом состоянии текстовый объект не отображается.<br />
<br />
=== Параметры ===<br />
<br />
*'''txtID''' - меняет объекту текстовый id. Перетягиваем из текстового редактора в поле ''val_txt'' необходимый текстовый id.<br />
*'''fc1''' - предоставляет возможность изменить цвет шрифта текстового объекта. В поле ''val'' вписывается цвет в виде 16-го кода.<br />
*'''sense''' - позволяет отображать разные поля текстового id. Если установить значение 0 - у текстового объекта будет отображаться поле ''word'', если 1 - ''sentence1'', если 2 - ''sentence2''.<br />
*'''textWidth''' - ширина текущего текста в текстовом объекте в px (с учетом параметров форматирования текстового объекта).<br />
*'''textHeight''' - высота текущего текста в текстовом объекте в px.<br />
<br />
== Пример применения ==<br />
<br />
[[Файл:Text3.PNG|800px|thumb|center]]<br />
<br />
[[Файл:Ex3.PNG|800px|thumb|center]]<br />
<br />
== Примечания и дополнения ==<br />
<br />
* Если у одного текстового ID слишком много страниц или же они должны меняться в запутанном порядке, то лучше создать несколько тестовых ID и по очереди присваивать их одному текстовому объекту с помощью машины состояний: команда ''set'', параметры ''obj''(текстовый объект), ''par''(txtID), ''val_txt''(текстовый ID, перетаскивается кнопкой мыши из редактора текстов).<br />
* Отображать и делать невидимым текст можно несколькими способами, например, менять общие параметры vis или al, но целесообразней использовать состояния текстового объекта ''start'' и ''close''.<br />
* Разделение строк в текстовой базе символом ''#'' можно использовать, если страниц 2(3). В этом случае для смены страниц используют состояние ''next''. Если страниц больше 2(3), лучше создать несколько текстовых ID и присваивать их текстовому объекту с помощью машины состояний.<br />
* Значения временных параметров по умолчанию: <br />
:время до открытия - 0, <br />
:время открытия - 500,<br />
:время закрытия - 500, <br />
:буквы - 30, <br />
:слова - 30, <br />
:страницы - 500. <br />
:Другими словами такие значения параметров равносильны нулю.<br />
'''Для постепенного открытия (закрытия) текста следует указывать временные параметры отличные от значений по умолчанию.'''</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Isomover&diff=5652Isomover2014-04-29T08:40:52Z<p>Odyadina: /* Состояния */</p>
<hr />
<div>'''Isomover''' - объект используется для осуществления движения и взаимодействия в изометрической карте. <br><br />
Isomover обязательно должен быть подобъектом [[isomap]]. <br><br />
В проекте с картой ([[isomap]]) и движущимися по ней объектами (isomover) часто используют [[economics]] и [[eitems]] потому, что для завершения процессов часто требуется применить предмет или ресурс.<br />
==Общие параметры==<br />
*Память - всегда должно быть значение 1, обязательное условие корректной работы.<br />
==Основные параметры==<br />
*Старт - <br />
*Финиш - <br />
*Скорость (макс) - <br />
*Скорость - не использовать, вычисляется по формуле автоматически, позже будет скрыто.<br />
*Жизнь (макс) - <br />
*Жизнь - <br />
*Коэффициент скорости - <br />
*Менять угол - <br />
*Тип - <br />
*Радиус - <br />
*Время появления - <br />
*Графический ресурс:<br />
**анимации направлений - <br />
**деятельность - <br />
**иконка персонажа - <br />
**смещение иконки - <br />
*Таймер:<br />
**подложка - <br />
**цифры - <br />
**двоеточие - <br />
**dx - <br />
**dy - <br />
**dx между цифрами - <br />
**dx от - <br />
*eitems - <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 />
**состояние - <br />
==Состояния==<br />
[[Файл:isomover_box.png|right|350px]]<br />
'''idle''' - дефолтное состояние, в которое isomover переходит после всех манипуляций. Недвижимым объектам следует передавать idle, чтобы они появились (нарисовались) на карте. Для движущихся объектов его практически не используют, объект сам рисуется с началом движения.<br><br />
'''acting_wait''' - первое состояние взаимодействия (запускается первый таймер, анимация взаимодействия и ожидается старт).<br><br />
'''acting''' - второе состояние взаимодействия (вызывается после применения предмета или клика, запускает второй таймер).<br><br />
'''being_acted''' - в этом состоянии пребывает тот объект, над которым идет действие. Объект в этом состоянии невидим.<br><br />
'''move''' - состояние движения от старта к финишу.<br><br />
'''move_to_smooth''' - состояние движения от текущей ноды (или следующей, если объект идет) к финишу.<br><br />
'''appear''' - показать по альфе за время появления.<br><br />
'''disappear''' - скрыть по альфе за время появления.<br><br />
'''prepare_acting''' - вызвать взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.<br><br />
'''start_acting''' - продолжить взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Isomover_box.png&diff=5651Файл:Isomover box.png2014-04-29T08:40:13Z<p>Odyadina: </p>
<hr />
<div></div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Isomover&diff=5650Isomover2014-04-29T08:39:48Z<p>Odyadina: </p>
<hr />
<div>'''Isomover''' - объект используется для осуществления движения и взаимодействия в изометрической карте. <br><br />
Isomover обязательно должен быть подобъектом [[isomap]]. <br><br />
В проекте с картой ([[isomap]]) и движущимися по ней объектами (isomover) часто используют [[economics]] и [[eitems]] потому, что для завершения процессов часто требуется применить предмет или ресурс.<br />
==Общие параметры==<br />
*Память - всегда должно быть значение 1, обязательное условие корректной работы.<br />
==Основные параметры==<br />
*Старт - <br />
*Финиш - <br />
*Скорость (макс) - <br />
*Скорость - не использовать, вычисляется по формуле автоматически, позже будет скрыто.<br />
*Жизнь (макс) - <br />
*Жизнь - <br />
*Коэффициент скорости - <br />
*Менять угол - <br />
*Тип - <br />
*Радиус - <br />
*Время появления - <br />
*Графический ресурс:<br />
**анимации направлений - <br />
**деятельность - <br />
**иконка персонажа - <br />
**смещение иконки - <br />
*Таймер:<br />
**подложка - <br />
**цифры - <br />
**двоеточие - <br />
**dx - <br />
**dy - <br />
**dx между цифрами - <br />
**dx от - <br />
*eitems - <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 />
**состояние - <br />
==Состояния==<br />
[[Файл:isomover_box.png|right|500px]]<br />
'''idle''' - дефолтное состояние, в которое isomover переходит после всех манипуляций. Недвижимым объектам следует передавать idle, чтобы они появились (нарисовались) на карте. Для движущихся объектов его практически не используют, объект сам рисуется с началом движения.<br><br />
'''acting_wait''' - первое состояние взаимодействия (запускается первый таймер, анимация взаимодействия и ожидается старт).<br><br />
'''acting''' - второе состояние взаимодействия (вызывается после применения предмета или клика, запускает второй таймер).<br><br />
'''being_acted''' - в этом состоянии пребывает тот объект, над которым идет действие. Объект в этом состоянии невидим.<br><br />
'''move''' - состояние движения от старта к финишу.<br><br />
'''move_to_smooth''' - состояние движения от текущей ноды (или следующей, если объект идет) к финишу.<br><br />
'''appear''' - показать по альфе за время появления.<br><br />
'''disappear''' - скрыть по альфе за время появления.<br><br />
'''prepare_acting''' - вызвать взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.<br><br />
'''start_acting''' - продолжить взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Isomover&diff=5646Isomover2014-04-22T11:30:29Z<p>Odyadina: /* Состояния */</p>
<hr />
<div>'''Isomover''' - объект используется для осуществления движения и взаимодействия в изометрической карте. <br><br />
Isomover обязательно должен быть подобъектом [[isomap]]. <br><br />
В проекте с картой ([[isomap]]) и движущимися по ней объектами (isomover) часто используют [[economics]] и [[eitems]] потому, что для завершения процессов часто требуется применить предмет или ресурс.<br />
==Общие параметры==<br />
*Память - всегда должно быть значение 1, обязательное условие корректной работы.<br />
==Основные параметры==<br />
*Старт - <br />
*Финиш - <br />
*Скорость (макс) - <br />
*Скорость - не использовать, вычисляется по формуле автоматически, позже будет скрыто.<br />
*Жизнь (макс) - <br />
*Жизнь - <br />
*Коэффициент скорости - <br />
*Менять угол - <br />
*Тип - <br />
*Радиус - <br />
*Время появления - <br />
*Графический ресурс:<br />
**анимации направлений - <br />
**деятельность - <br />
**иконка персонажа - <br />
**смещение иконки - <br />
*Таймер:<br />
**подложка - <br />
**цифры - <br />
**двоеточие - <br />
**dx - <br />
**dy - <br />
**dx между цифрами - <br />
**dx от - <br />
*eitems - <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 />
**состояние - <br />
==Состояния==<br />
'''idle''' - дефолтное состояние, в которое isomover переходит после всех манипуляций. Недвижимым объектам следует передавать idle, чтобы они появились (нарисовались) на карте. Для движущихся объектов его практически не используют, объект сам рисуется с началом движения.<br><br />
'''acting_wait''' - первое состояние взаимодействия (запускается первый таймер, анимация взаимодействия и ожидается старт).<br><br />
'''acting''' - второе состояние взаимодействия (вызывается после применения предмета или клика, запускает второй таймер).<br><br />
'''being_acted''' - в этом состоянии пребывает тот объект, над которым идет действие. Объект в этом состоянии невидим.<br><br />
'''move''' - состояние движения от старта к финишу.<br><br />
'''move_to_smooth''' - состояние движения от текущей ноды (или следующей, если объект идет) к финишу.<br><br />
'''appear''' - показать по альфе за время появления.<br><br />
'''disappear''' - скрыть по альфе за время появления.<br><br />
'''prepare_acting''' - вызвать взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.<br><br />
'''start_acting''' - продолжить взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Isomover&diff=5642Isomover2014-04-17T14:55:44Z<p>Odyadina: Новая страница: «'''Isomover''' - объект используется для осуществления движения и взаимодействия в изометриче...»</p>
<hr />
<div>'''Isomover''' - объект используется для осуществления движения и взаимодействия в изометрической карте. <br><br />
Isomover обязательно должен быть подобъектом [[isomap]]. <br><br />
В проекте с картой ([[isomap]]) и движущимися по ней объектами (isomover) часто используют [[economics]] и [[eitems]] потому, что для завершения процессов часто требуется применить предмет или ресурс.<br />
==Общие параметры==<br />
*Память - всегда должно быть значение 1, обязательное условие корректной работы.<br />
==Основные параметры==<br />
*Старт - <br />
*Финиш - <br />
*Скорость (макс) - <br />
*Скорость - не использовать, вычисляется по формуле автоматически, позже будет скрыто.<br />
*Жизнь (макс) - <br />
*Жизнь - <br />
*Коэффициент скорости - <br />
*Менять угол - <br />
*Тип - <br />
*Радиус - <br />
*Время появления - <br />
*Графический ресурс:<br />
**анимации направлений - <br />
**деятельность - <br />
**иконка персонажа - <br />
**смещение иконки - <br />
*Таймер:<br />
**подложка - <br />
**цифры - <br />
**двоеточие - <br />
**dx - <br />
**dy - <br />
**dx между цифрами - <br />
**dx от - <br />
*eitems - <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 />
**состояние - <br />
==Состояния==<br />
'''idle''' - дефолтное состояние, в которое isomover переходит после всех манипуляций. Недвижимым объектам следует передавать idle, чтобы они появились (нарисовались) на карте. Для движущихся объектов его практически не используют, объект сам рисуется с началом движения.<br><br />
'''acting_wait''' - первое состояние взаимодействия (запускается первый таймер, анимация взаимодействия и ожидается старт).<br><br />
'''acting''' - второе состояние взаимодействия (вызывается после применения предмета или клика, запускает второй таймер).<br><br />
'''being_acted''' - в этом состоянии пребывает тот объект, над которым идет действие. Объект в этом состоянии невидим.<br><br />
'''move''' - состояние движения от старта к финишу.<br><br />
'''move_to_smooth''' - состояние движения от текущей ноды (или следующей, если объект идет) к финишу.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=System&diff=5639System2014-04-14T10:36:51Z<p>Odyadina: </p>
<hr />
<div>'''System''' - объект, предоставляющий интерфейс доступа к системным настройкам.<br />
<br />
==Описание==<br />
Пока используется только для включения (выключения) режима "'''скрывать android-меню'''". При включенном режиме android-меню будет прятаться, пока игрок его не вызовет или не выйдет из приложения.<br/><br />
<pre>Работает, начиная с версии Android 4.4.</pre><br />
Чтобы установить режим включенным по умолчанию необходимо в app.icf прописать:<br/><br />
'''[s3eAndroidSystemUI]'''<br/><br />
'''immersive_mode=1''',<br/><br />
а так же в объекте [[Options]] в поле ''immersive_mode'' поставить ''1''.<br/><br />
Параметр в опциях не влияет на то, включен режим или выключен. Параметр в опциях используется лишь для сохранения настроек, измененных пользователем или по умолчанию. Включить и выключить режим можно лишь передав объекту System соответствующее состояние.<br />
<br />
==Состояния==<br />
'''and_imm_mode_on''' - включить режим "скрывать android-меню";<br/><br />
'''and_imm_mode_off''' - выключить режим "скрывать android-меню", в этом случае с края экрана всегда будут видны кнопки android-меню.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=System&diff=5638System2014-04-14T10:34:10Z<p>Odyadina: </p>
<hr />
<div>'''System''' - объект, предоставляющий интерфейс доступа к системным настройкам.<br />
<br />
==Описание==<br />
Пока используется только для включения (выключения) режима "'''скрывать android-меню'''". При включенном режиме android-меню будет прятаться, пока игрок его не вызовет или не выйдет из приложения.<br/><br />
<pre>Работает, начиная с версии Android 4.4.</pre><br />
Чтобы установить режим включенным по умолчанию необходимо в app.icf прописать:<br/><br />
'''[s3eAndroidSystemUI]'''<br/><br />
'''immersive_mode=1''',<br/><br />
а так же в объекте ''Options'' в поле ''immersive_mode'' поставить ''1''.<br/><br />
Параметр в опциях не влияет на то, включен режим или выключен. Параметр в опциях используется лишь для сохранения настроек, измененных пользователем или по умолчанию. Включить и выключить режим можно лишь передав объекту ''System'' соответствующее состояние.<br />
<br />
==Состояния==<br />
'''and_imm_mode_on''' - включить режим "скрывать android-меню";<br/><br />
'''and_imm_mode_off''' - выключить режим "скрывать android-меню", в этом случае с края экрана всегда будут видны кнопки android-меню.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=System&diff=5637System2014-04-14T10:32:59Z<p>Odyadina: /* Описание */</p>
<hr />
<div>'''System''' - объект, предоставляющий интерфейс доступа к системным настройкам.<br />
<br />
==Описание==<br />
Пока используется только для включения (выключения) режима "скрывать android-меню". При включенном режиме android-меню будет прятаться, пока игрок его не вызовет или не выйдет из приложения.<br/><br />
<pre>Работает, начиная с версии Android 4.4.</pre><br />
Чтобы установить режим включенным по умолчанию необходимо в app.icf прописать:<br/><br />
'''[s3eAndroidSystemUI]'''<br/><br />
'''immersive_mode=1''',<br/><br />
а так же в объекте ''Options'' в поле ''immersive_mode'' поставить ''1''.<br/><br />
Параметр в опциях не влияет на то, включен режим или выключен. Параметр в опциях используется лишь для сохранения настроек, измененных пользователем или по умолчанию. Включить и выключить режим можно лишь передав объекту ''System'' соответствующее состояние.<br />
<br />
==Состояния==<br />
'''and_imm_mode_on''' - включить режим "скрывать android-меню";<br/><br />
'''and_imm_mode_off''' - выключить режим "скрывать android-меню", в этом случае с краю экрана всегда будут видны кнопки android-меню.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=System&diff=5636System2014-04-14T10:30:49Z<p>Odyadina: </p>
<hr />
<div>'''System''' - объект, предоставляющий интерфейс доступа к системным настройкам.<br />
<br />
==Описание==<br />
Пока используется только для включения (выключения) режима "скрывать android-меню". При включенном режиме android-меню будет прятаться, пока игрок его не вызовет или не выйдет из приложения.<br/><br />
Работает, начиная с версии Android 4.4.<br/><br />
Чтобы установить режим включенным по умолчанию необходимо в app.icf прописать<br/><br />
'''[s3eAndroidSystemUI]'''<br/><br />
'''immersive_mode=1''',<br/><br />
а так же в объекте ''Options'' в поле ''immersive_mode'' поставить ''1''.<br/><br />
Параметр в опциях не влияет на то, включен режим или выключен. Параметр в опциях используется лишь для сохранения настроек, измененных пользователем или по умолчанию. Включить и выключить режим можно лишь передав объекту ''System'' соответствующее состояние.<br />
<br />
==Состояния==<br />
'''and_imm_mode_on''' - включить режим "скрывать android-меню";<br/><br />
'''and_imm_mode_off''' - выключить режим "скрывать android-меню", в этом случае с краю экрана всегда будут видны кнопки android-меню.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=System&diff=5635System2014-04-14T07:51:21Z<p>Odyadina: Новая страница: «System - объект, предоставляющий интерфейс доступа к системным настройкам.»</p>
<hr />
<div>System - объект, предоставляющий интерфейс доступа к системным настройкам.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&diff=5634Absolutist Framework2014-04-14T07:43:11Z<p>Odyadina: </p>
<hr />
<div><br />
{{TOC right}}<br />
<br />
== Новости ==<br />
Вышла новая игра HOG созданная с помощью AppSalute Game Сreator. Созданы новые уникальные эффекты и механики для обеспечения незабываемых впечатлений.<br />
Описание и видео:<br />
http://time-gap.com/<br />
<br />
== AppSalute Game Сreator ==<br />
* [[Примеры приложений]]<br />
* [[Введение в AppSalute Game Сreator]]<br />
* [[Установка и настройка]]<br />
* [[Интерфейс ScenceEditor ]]<br />
* [[Интерфейс ResourceEditor ]]<br />
* [[Интерфейс TextEditor ]]<br />
*[[Интерфейс Viewer ]]<br />
* [[Книга жалоб и пожеланий]]<br />
* [[Roadmap]]<br />
<br />
== Обучение ==<br />
<br />
* [[Learning|Уроки по освоению фреймворка]]<br />
* [[Примеры реализации в играх]]<br />
* [[Основные понятия объектов физического мира]]<br />
* [[FAQ]]<br />
== Подготовка проекта ==<br />
* [[Проектирование экранов игры]]<br />
* [[Подготовка и форматы графики]]<br />
* [[Подготовка и форматы шрифтов]]<br />
* [[Подготовка и форматы звуков]]<br />
* [[Подготовка и форматы видео]]<br />
* [[Создание проекта]]<br />
* [[Загрузка проекта по частям]]<br />
* [[Конфигурация проекта для сборки]]<br />
* [[Подготовка для загрузки на маркеты]]<br />
* [[Сборка проекта]]<br />
<br />
== Встроенные объекты редактора==<br />
<br />
=== Common objects ===<br />
<br />
''[[Файл:Screen.png]] - [[Screen]]'' - экран<br />
<br />
''[[Файл:Scene.png]] - [[Scene]]'' - сцена<br />
<br />
=== Main objects ===<br />
<br />
''[[Файл:Objects.png]] - [[Object]]'' - общие параметры для всех игровых объектов<br />
<br />
* [[Файл:Picture.png]] - [[Image]] - картинка<br />
* [[Файл:Button.png]] - [[Button]] - кнопка<br />
* [[Файл:Text.png]] - [[Text]] - текст<br />
* [[Файл:Machine.png]] - [[Machine]] - машина состояний<br />
* [[Файл:Tableicon.png]] - [[Table]] - таблица<br />
* [[Файл:Checkbox.png]] - [[Checkbox]] - чекбокс (кнопка в 2-х состояниях)<br />
* [[Файл:Checkgroup.png]] - [[Groupbox]] - группа, содержащая несколько чекбоксов<br />
* [[Файл:Timer.png]] - [[Timer]] - цифровой таймер<br />
* [[Файл:Counter2.png]] - [[Counter]] - счетчик сделанных кликов в игре и т.п.<br />
* [[Файл:Progressbar.png]] - [[Progress]] - прогресс прохождения игры (эчивмент)<br />
* [[Файл:Particle.png]] - [[Flyer]] - флаер (патиклы)<br />
* [[Файл:Rectangle.png]] - [[Rectangle]] - прямоугольник<br />
* [[Файл:Kub.png]] - [[Isomover]] - объект движения в изометрической карте<br />
* [[Файл:Group.png]] - [[Group]] - группа<br />
* [[Файл:Groupset.png]] - [[Groupset]] - группа<br />
* [[Файл:Effect.jpg|20px]] - [[Effect]] - Создание различных эффектов<br />
* [[Файл:Graphprogress.png]] - [[Graphprogress]] - создание мини-карты для отображения прогресса прохождения игры.<br />
<br />
=== Game mechanic ===<br />
<br />
* [[Файл:Puzzle.png]] - [[Puzzle]] - игра пазл<br />
* [[Файл:Memory.png]] - [[Memory]] - класс игр с memory-механикой<br />
* [[Файл:Patchwork.png]] - [[Patchwork]] - класс игр с Patchwork-механикой<br />
* [[Файл:Match3.png]] - [[Match]] - класс match-подобных игр<br />
* [[Файл:Collaps.png]] - [[Collapse]] - класс match-подобных игр<br />
* [[Файл:Bejewelled.png]] - [[Bejewelled]] - класс match-подобных игр<br />
* [[Файл:BubbleShooter.png]] - [[Bubble Shooter]] - класс Bubble игр включая механику Снукер<br />
* [[Файл:Tapthebubble.png]] - [[TapTheBubble]] - механика игры Tap The Bubble<br />
* [[Файл:Matchbattle.png]] - [[Match Battle]] - настройка глобальных параметров для мини-игр<br />
* [[Файл:Move box.png]] - [[DragBox]] - класс игр с dragbox-механикой<br />
* [[Файл:Labyrinth.png]] - [[Labyrinth]] - класс игр лабиринт<br />
* [[Файл:Pipes.png]] - [[Pipes]] - класс игр трубы<br />
* [[Файл:Search object.png]] - [[HiddenObject]] - поисковый объект в хидден играх<br />
* [[Файл:Object list.png]] - [[HiddenList]] - список поисковых объектов в хидден играх<br />
* [[Файл:Hint.png]] - [[HiddenHint]] - подсказка (указатель на спрятанный объект)<br />
* [[Файл:Collection.png]] - [[Collection]] - "коллекция" поисковых объектов для хидден игр<br />
* [[Файл:Inventory.png]] - [[Invetory]] - "инвентарь" список применяемых объектов для игр<br />
* [[Файл:Tool.png]] - [[Tool]] - "применение" - объект, который можно применить для игр<br />
* [[Файл:Kub.png]] - [[Isomap]] - изометрическая карта<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
** [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря/магазина и экономики <br />
** [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина <br />
** [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря <br />
** [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий <br />
** [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания<br />
** [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции<br />
* [[Файл:Paint.png]] - [[Paint]] - объект для рисования <br />
* [[Файл:Physicsworld.png]] - [[Physicsworld]] - физический мир Box2D<br />
** [[Файл:Physicsobject.png]] - [[Physicsobject]] - физические объекты<br />
** [[Файл:Physics links.png]] - [[Physicsjoint]] - физические соединения<br />
<br />
=== Global score ===<br />
* [[Файл:Gamecenter.png]] - [[Gamecenter]] - объект для отправки данных на GameCenter iTunse<br />
* [[Файл:Gamecircle.jpg]] - [[Amazon GameCircle]] - объект для отправки данных Amazon GameCircle<br />
* [[Файл:Google-play-games-android.jpg]] - [[Google Play services]] - объект для отправки данных на Google Play services<br />
* [[Файл:Localtoplist.png]] - [[Localtoplist]] - настройки для отображения результатов прохождения игры<br />
* [[Файл:Globaltoplist.png]] - [[Globaltoplist]] - настройки для отображения результатов прохождения игры<br />
* [[Файл:Globaltopsender.png]] - [[Globaltopsender]] - настройки для отображения результатов прохождения игры<br />
<br />
=== Options ===<br />
* [[Файл:Options.png]] - [[Options]] - общие настройки игры<br />
* [[Файл:Gamedata.png]] - [[Gamedata]] - <br />
* [[Файл:Editicon.png]] - [[Edit]] - ввод текста<br />
* [[Файл:Store.png]] - [[Store]] - настройки InApp покупок в игре<br />
* [[Файл:Notification.png]] - [[Notification]] - push-уведомления<br />
* [[Файл:Imagepicker.png]] - [[Imagepiker]] - объект для загрузки фото из галереи<br />
* [[Файл:Video.png]] - [[Video]] - объект для просмотра видео<br />
* [[Файл:Webview.png]] - [[Webview]] - объект для просмотра интернет страниц в приложении<br />
* [[Файл:Flurryobject.png]] - [[Flurry]] - настройки системы статистики для приложений https://dev.flurry.com<br />
* [[Файл:Moregames.png]] - [[MoreGamesList]] - запрос банеров рекламируемых игр<br />
* [[Файл:Advertisement.png]] - [[Advertisement]] - банерная система flurry, amazon<br />
* [[Файл:Splitmanager.png]] - [[Splitmanager or A\B Testing]] - менеджер сплитов<br />
* [[Файл:Tapjoy.png]] - [[Tapjoy]] - система рекламы игр<br />
* [[Файл:Playhaven.png|24px]] - [[Playhaven]] - система рекламы игр с внутренними up-sale<br />
* [[Файл:Mobileapptracker.png|24px]] - [[Mobileapptracking]] -<br />
* [[Файл:Chartboost-logo-new.jpeg]] - [[Chartboost]] - Chartboost-logo-new.jpeg<br />
* [[Файл:Kub.png]] - [[System]] - объект для доступа к системным настройкам<br />
<br />
=== Social ===<br />
* [[Файл:Facebook.png]] - [[Facebook]] - настройки расшаривания Facebook<br />
** [[Файл:Esocialfrienditem.png]] - [[Esocialitem]] - Шаблон для ячейки списка друзей<br />
** [[Файл:Kub.png]] - [[Esocialgiftitem]] - Шаблон для ячейки с предметом, который можно подарить другу<br />
** [[Файл:Esocial.png]] - [[Esocial]] - объект для взаимодействия с Facebook'ом<br />
* [[Файл:Twitter.png]] - [[Twitter]] - настройки расшаривания Twitter<br />
* [[Файл:Odnoklassniki.png]] - [[Odnoklassniki]] - настройки для социальной сети Одноклассники<br />
* [[Файл:Googleplus.png]] - [[GooglePlus]] - настройки для социальной сети GooglePlus<br />
<br />
=== Functions ===<br />
* [[Файл:Forward.png]] - [[SendMail]] - отправка письма через почтовый клиент<br />
* [[Файл:footer-icon-rate.png]] - [[Rate]] - вызов окна оценки приложения<br />
----<br />
<gallery widths="50px" heights="50px" ><br />
Изображение:Who.png<br />
Изображение:AnimalHideSeek.png<br />
Изображение:travel.png<br />
Изображение:Game_Adventure_Train.png<br />
Изображение:Gmae_Match_MoveTheDolly.png<br />
Изображение:Game_Patchwork_BigEyes.png<br />
Изображение:Game_Patchwork_Chameleon.png<br />
Изображение:Game_Patchwork_Logicly.png<br />
Изображение:Game_Patchwork_Stickers.png<br />
Изображение:Elephant.png<br />
Изображение:Elephant2.png<br />
Изображение:Cinderella.png<br />
Изображение:Pigs.png<br />
Изображение:Bremenskye.png<br />
Изображение:Book_SnowWhite.png<br />
Изображение:Book_PussInBoots.png<br />
Изображение:Call.png<br />
Изображение:GreatestArtists.png<br />
Изображение:Game_Puzzle_Kids.png<br />
Изображение:Game_Puzzle_Architect.png<br />
Изображение:Game_Puzzle_Science.png<br />
Изображение:Ico_1_114_Full.png<br />
Изображение:Game_Adventure_Dreams.png<br />
Изображение:Abc.png<br />
Изображение:Ico_114_Full.png<br />
Изображение:Ico_114_Paints.png<br />
Изображение:Ico_114_Puzzle.png<br />
</gallery></div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Absolutist_Framework&diff=5245Absolutist Framework2013-11-08T08:55:35Z<p>Odyadina: /* Встроенные объекты редактора */</p>
<hr />
<div><br />
{{TOC right}}<br />
<br />
== Новости ==<br />
Вышла новая игра HOG созданная с помощью AppSalute Game Сreator. Созданы новые уникальные эффекты и механики для обеспечения незабываемых впечатлений.<br />
Описание и видео:<br />
http://time-gap.com/<br />
<br />
== AppSalute Game Сreator ==<br />
* [[Примеры приложений]]<br />
* [[Введение в AppSalute Game Сreator]]<br />
* [[Установка и настройка]]<br />
* [[Интерфейс ScenceEditor ]]<br />
* [[Интерфейс ResourceEditor ]]<br />
* [[Интерфейс TextEditor ]]<br />
*[[Интерфейс Viewer ]]<br />
* [[Книга жалоб и пожеланий]]<br />
* [[Roadmap]]<br />
<br />
== Обучение ==<br />
<br />
* [[Learning|Уроки по освоению фреймворка]]<br />
* [[Примеры реализации в играх]]<br />
* [[Основные понятия объектов физического мира]]<br />
* [[FAQ]]<br />
== Подготовка проекта ==<br />
* [[Проектирование экранов игры]]<br />
* [[Подготовка и форматы графики]]<br />
* [[Подготовка и форматы шрифтов]]<br />
* [[Подготовка и форматы звуков]]<br />
* [[Подготовка и форматы видео]]<br />
* [[Создание проекта]]<br />
* [[Загрузка проекта по частям]]<br />
* [[Конфигурация проекта для сборки]]<br />
* [[Подготовка для загрузки на маркеты]]<br />
* [[Сборка проекта]]<br />
<br />
== Встроенные объекты редактора==<br />
<br />
=== Common objects ===<br />
<br />
''[[Файл:Screen.png]] - [[Screen]]'' - экран<br />
<br />
''[[Файл:Scene.png]] - [[Scene]]'' - сцена<br />
<br />
=== Main objects ===<br />
<br />
''[[Файл:Objects.png]] - [[Object]]'' - общие параметры для всех игровых объектов<br />
<br />
* [[Файл:Picture.png]] - [[Image]] - картинка<br />
* [[Файл:Button.png]] - [[Button]] - кнопка<br />
* [[Файл:Text.png]] - [[Text]] - текст<br />
* [[Файл:Machine.png]] - [[Machine]] - машина состояний<br />
* [[Файл:Tableicon.png]] - [[Table]] - таблица<br />
* [[Файл:Checkbox.png]] - [[Checkbox]] - чекбокс (кнопка в 2-х состояниях)<br />
* [[Файл:Checkgroup.png]] - [[Groupbox]] - группа, содержащая несколько чекбоксов<br />
* [[Файл:Timer.png]] - [[Timer]] - цифровой таймер<br />
* [[Файл:Counter2.png]] - [[Counter]] - счетчик сделанных кликов в игре и т.п.<br />
* [[Файл:Progressbar.png]] - [[Progress]] - прогресс прохождения игры (эчивмент)<br />
* [[Файл:Particle.png]] - [[Flyer]] - флаер (патиклы)<br />
* [[Файл:Rectangle.png]] - [[Rectangle]] - прямоугольник<br />
* [[Файл:Kub.png]] - [[Isomover]] - объект движения в изометрической карте<br />
* [[Файл:Group.png]] - [[Group]] - группа<br />
* [[Файл:Groupse3.png]] - [[Groupset]] - группа<br />
* [[Файл:Effect.jpg|20px]] - [[Effect]] - Создание различных эффектов<br />
<br />
=== Game mechanic ===<br />
<br />
* [[Файл:Puzzle.png]] - [[Puzzle]] - игра пазл<br />
* [[Файл:Memory.png]] - [[Memory]] - класс игр с memory-механикой<br />
* [[Файл:Patchwork.png]] - [[Patchwork]] - класс игр с Patchwork-механикой<br />
* [[Файл:Match3.png]] - [[Match]] - класс match-подобных игр<br />
* [[Файл:Move box.png]] - [[DragBox]] - класс игр с dragbox-механикой<br />
* [[Файл:Labyrinth.png]] - [[Labyrinth]] - класс игр лабиринт<br />
* [[Файл:Pipes.png]] - [[Pipes]] - класс игр трубы<br />
* [[Файл:Search object.png]] - [[HiddenObject]] - поисковый объект в хидден играх<br />
* [[Файл:Object list.png]] - [[HiddenList]] - список поисковых объектов в хидден играх<br />
* [[Файл:Hint.png]] - [[HiddenHint]] - подсказка (указатель на спрятанный объект)<br />
* [[Файл:Collection.png]] - [[Collection]] - "коллекция" поисковых объектов для хидден игр<br />
* [[Файл:Inventory.png]] - [[Invetory]] - "инвентарь" список применяемых объектов для игр<br />
* [[Файл:Tool.png]] - [[Tool]] - "применение" - объект, который можно применить для игр<br />
* [[Файл:Kub.png]] - [[Isomap]] - изометрическая карта<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер<br />
** [[Файл:E_items.png]] - [[Eitems]] - объект, служащий для связи инвентаря/магазина и экономики <br />
** [[Файл:E_store_item.png]] - [[Estoreitem]] - шаблон для ячейки магазина <br />
** [[Файл:E_inventory_item.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря <br />
** [[Файл:Taskorganizer.png]] - [[Taskorganizer]] - органайзер заданий <br />
** [[Файл:E_task_item.png]] - [[Etaskitem]] - шаблон для ячейки задания<br />
** [[Файл:E_collection.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции<br />
* [[Файл:Paint.png]] - [[Paint]] - объект для рисования <br />
* [[Файл:Physicsworld.png]] - [[Physicsworld]] - физический мир<br />
** [[Файл:Physicsobject.png]] - [[Physicsobject]] - физические объекты<br />
** [[Файл:Physics links.png]] - [[Physicsjoint]] - физические соединения<br />
<br />
=== Global score ===<br />
* [[Файл:Gamecenter.png]] - [[Gamecenter]] - объект для отправки данных на GameCenter iTunse<br />
* [[Файл:Gamecircle.jpg]] - [[Amazon GameCircle]] - объект для отправки данных Amazon GameCircle<br />
* [[Файл:Google-play-games-android.jpg]] - [[Google Play services]] - объект для отправки данных на Google Play services<br />
* [[Файл:Localtoplist.png]] - [[Localtoplist]] - настройки для отображения результатов прохождения игры<br />
* [[Файл:Globaltoplist.png]] - [[Globaltoplist]] - настройки для отображения результатов прохождения игры<br />
* [[Файл:Globaltopsender.png]] - [[Globaltopsender]] - настройки для отображения результатов прохождения игры<br />
<br />
=== Options ===<br />
* [[Файл:Options.png]] - [[Options]] - общие настройки игры<br />
* [[Файл:Gamedata.png]] - [[Gamedata]] - <br />
* [[Файл:Editicon.png]] - [[Edit]] - ввод текста<br />
* [[Файл:Store.png]] - [[Store]] - настройки InApp покупок в игре<br />
* [[Файл:Notification.png]] - [[Notification]] - push-уведомления<br />
* [[Файл:Imagepicker.png]] - [[Imagepiker]] - объект для загрузки фото из галереи<br />
* [[Файл:Video.png]] - [[Video]] - объект для просмотра видео<br />
* [[Файл:Webview.png]] - [[Webview]] - объект для просмотра интернет страниц в приложении<br />
* [[Файл:Flurryobject.png]] - [[Flurry]] - настройки системы статистики для приложений https://dev.flurry.com<br />
* [[Файл:Moregames.png]] - [[MoreGamesList]] - запрос банеров рекламируемых игр<br />
* [[Файл:Kub.png]] - [[Advertisement]] - банерная система flurry, amazon<br />
* [[Файл:Tapjoy.png]] - [[Tapjoy]] - система рекламы игр<br />
* [[Файл:Playhaven.png|24px]] - [[Playhaven]] -<br />
* [[Файл:Mobileapptracking.png|24px]] - [[Mobileapptracking]] -<br />
* [[Файл:Chartboost-logo-new.jpeg]] - [[Chartboost]] - Chartboost-logo-new.jpeg<br />
<br />
=== Social ===<br />
* [[Файл:Facebook.png]] - [[Facebook]] - настройки расшаривания Facebook<br />
* [[Файл:Twitter.png]] - [[Twitter]] - настройки расшаривания Twitter<br />
* [[Файл:Odru.png]] - [[Odnoklassniki]] - настройки для социальной сети Одноклассники<br />
* [[Файл:GooglePlus-Logo-02.png]] - [[GooglePlus]] - настройки для социальной сети GooglePlus<br />
<br />
=== Functions ===<br />
* [[Файл:Forward.png]] - [[SendMail]] - отправка письма через почтовый клиент<br />
* [[Файл:footer-icon-rate.png]] - [[Rate]] - вызов окна оценки приложения<br />
----<br />
<gallery widths="50px" heights="50px" ><br />
Изображение:Who.png<br />
Изображение:AnimalHideSeek.png<br />
Изображение:travel.png<br />
Изображение:Game_Adventure_Train.png<br />
Изображение:Gmae_Match_MoveTheDolly.png<br />
Изображение:Game_Patchwork_BigEyes.png<br />
Изображение:Game_Patchwork_Chameleon.png<br />
Изображение:Game_Patchwork_Logicly.png<br />
Изображение:Game_Patchwork_Stickers.png<br />
Изображение:Elephant.png<br />
Изображение:Elephant2.png<br />
Изображение:Cinderella.png<br />
Изображение:Pigs.png<br />
Изображение:Bremenskye.png<br />
Изображение:Book_SnowWhite.png<br />
Изображение:Book_PussInBoots.png<br />
Изображение:Call.png<br />
Изображение:GreatestArtists.png<br />
Изображение:Game_Puzzle_Kids.png<br />
Изображение:Game_Puzzle_Architect.png<br />
Изображение:Game_Puzzle_Science.png<br />
Изображение:Ico_1_114_Full.png<br />
Изображение:Game_Adventure_Dreams.png<br />
Изображение:Abc.png<br />
Изображение:Ico_114_Full.png<br />
Изображение:Ico_114_Paints.png<br />
Изображение:Ico_114_Puzzle.png<br />
</gallery></div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Advertisement&diff=5216Advertisement2013-10-16T07:28:22Z<p>Odyadina: /* новые */</p>
<hr />
<div>Объект '''ad''' позволяет отображать банеры банерных систем. Объект должен находиться на экране на котором необходимо показать банер, объект-провайдер рекламы может находиться на другом экране, но в области видимости объекта.<br />
<br />
==Параметры==<br />
<br />
===новые===<br />
<br />
*'''тип экрана''' (''scrType'') - тип банера, more games или ad. MoreGames=0,Ad=1<br />
<br />
*'''дни''' (''days'') - Количество дней с первого запуска<br />
<br />
*'''запуски''' (''launches'') - Количество запусков<br />
<br />
*'''время сессии''' (''sesTm'') - Время сессии (мс). '''''0''''' - показывать мгновенно, '''''-1''''' - не показывать по времени сессии.<br />
<br />
*'''часы''' (''hours'') - Время между показами<br />
<br />
*'''события''' (''events'') - Количество событий, после которого показывается реклама<br />
<br />
*'''место в опциях''' - Имя группы параметров которой содержатся параметры объекта<br />
<br />
*'''тестовый режим''' - значения параметров дни, время сессии, часы будут отсчитываться в минутах, то есть например вместо 10 дней - 10 минут<br />
<br />
группа '''дополнительные данные'''<br />
<br />
*'''тип рекламы''' - полноэкранный, банер сверху, банер снизу. fullscreen=0,banner top=1, banner bottom=2<br />
<br />
*'''имя рекламы''' - ключ банера рекламы (ad)<br />
<br />
*'''имя more games''' - ключ банера more games<br />
<br />
группа '''провайдер рекламы'''<br />
<br />
*'''объект''' - Объект, обладающий рекламной функциональностью.<br />
<br />
Если добавлено несколько объектов обладающих рекламной функциональностью будет выбираться один из них равновероятностно.<br />
<br />
Объект сам показывает рекламу если выполняются условия(текущее значение больше либо равно заданному). Условия '''дни''', '''запуски''', '''время сессии''', '''часы''' проверяются через логическое "и", то есть все 4 должны выполняться одновременно. '''события''' и временные условия проверяются через логическое "или". То есть банер покажется когда или выполняются временные условия, или когда количество событий совпадает с заданным значением или больше. После показа банера при совпадении количества событий - счётчик событий сбрасывается.<br />
<br />
===старые===<br />
<br />
*'''тип'''''(adtype)'' - тип банерной системы(flurry, amazon, chartboost)<br />
<br />
*'''space'''''(adspace)'' - имя рекламной кампании для flurry. Это имя будет отображаться в списке рекламных кампаний на портале flurry.<br />
<br />
*'''size'''''(adsize)'' - размер и положение банера(top - 1, bottom - 2, fullscreen - 3)<br />
<br />
==Состояния==<br />
<br />
*'''show''' - показать рекламу<br />
<br />
*'''hide''' - спрятать рекламу<br />
<br />
*'''event''' - увеличить счётчик событий на 1<br />
<br />
=Настройки для flurry=<br />
<br />
Должны быть указаны '''тип''', '''space''', '''size'''.<br />
<br />
Также в [[app.icf]] или [[viewer.xml]] должен быть указан flurry id приложения, согласно ему идет работа банерной системы.<br />
<br />
Кроме этого в итоговый ''AndroidManifest.xml'' должны быть добавлены следующие строки:<br />
<br />
<pre><br />
<br />
<activity android:name="com.flurry.android.FlurryFullscreenTakeoverActivity"<br />
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode" <br />
android:hardwareAccelerated="true" ><br />
</activity><br />
<br />
</pre><br />
<br />
Также должно быть следующее разрешение:<br />
<br />
<pre><br />
<br />
<uses-permission android:name="android.permission.INTERNET"/><br />
<br />
</pre><br />
<br />
=Настройки Amazon=<br />
<br />
Для работы рекламы от Amazon должен быть указан соответствующий тип рекламы, а также указаны следующие настройки в [[app.icf]]:<br />
<br />
<pre><br />
<br />
[s3eAmazonAds]<br />
app_key="sample-app-v1_pub-2"<br />
logging=1<br />
testing=1<br />
<br />
</pre><br />
<br />
'''app_key''' - ключ для рекламы<br />
<br />
'''logging''' - вести логи показа, полезно для отладки<br />
<br />
'''testing''' - режим тестирования<br />
<br />
По умолчанию logging и testing равны 1, поэтому при релизе значение обоих параметров необходимо принудительно устанавливать в 0.<br />
<br />
В итоговый ''AndroidManifest.xml'' должны быть добавлены следующие строки:<br />
<br />
<pre><br />
<br />
<activity android:name="com.amazon.device.ads.MraidBrowser" android:configChanges="keyboardHidden|orientation"/><br />
<activity android:name="com.amazon.device.ads.VideoActionHandler" android:configChanges="keyboardHidden|orientation|screenSize"/><br />
<br />
</pre><br />
<br />
Также должны быть следующие разрешения:<br />
<br />
<pre><br />
<br />
<uses-permission android:name="android.permission.INTERNET" /><br />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><br />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><br />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><br />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><br />
<br />
</pre><br />
<br />
более подробно про рекламу от amazon: https://developer.amazon.com/sdk/mobileads/quick-start.html<br />
<br />
=Настройки ChartBoost=<br />
<br />
<span style="background-color:yellow">Для работы Chartboost на ios необходима версия ос не ниже 6-й</span><br />
<br />
настройки в app.icf:<br />
<br />
<pre><br />
[ISCHARTBOOST]<br />
DisableChartboost = 0<br />
AndroidAppID = ""<br />
AndroidAppSecret = ""<br />
IOSAppID = ""<br />
IOSAppSecret = ""<br />
</pre><br />
<br />
DisableChartboost = 0 - использовать, 1 - не использовать, должно стоять по умолчанию.<br />
<br />
<br />
=Дополнительные сведения=<br />
<br />
* ''AndroidManifest.xml'' находится обычно в каталоге ''%s3e_dir%\deploy\plugins\android''<br />
<br />
* Также можно вместо ''AndroidManifest.xml'' вносить соответствующие настройки в ''android-extra-application-manifest.xml'' и ''android-extra-manifest.xml'', которые находятся в каталоге<br />
''%каталог_редактора%\system\marmalade\conf\%марект%(к примеру android)''<br />
<br />
* Объект при загрузке экрана не переводится автоматически в состояние show, в это состояние его надо переводить машиной или другим объектом.<br />
<br />
* Если выбран режим банера '''fullscreen''', то при показе банера все действия в приложении "ставятся на паузу", возврат в игру возможен только при закрытии банера, если выбран другой режим отображения - приложение во время показа "на паузу" не ставится, то есть все действия продолжают выполняться.<br />
<br />
* <span style="background-color:yellow">Для работы Chartboost на ios необходима версия ос не ниже 6-й</span></div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Scene&diff=5203Scene2013-09-24T14:59:40Z<p>Odyadina: /* Параметры Сцены */</p>
<hr />
<div>== Параметры Сцены ==<br />
[[Файл:Screen.jpg|500px|right]]<br />
'''Группа - Инициализация '''<br />
<br />
*'''Выравнивание''' - выравнивание границ сцены относительно границ экрана. Заметно, если размеры сцены и размеры экрана отличаются. Значения от 0 до 3.<br/> <br />
0 и 2 - сцена пропорционально сжимается, чтобы полностью поместиться в границы экрана, или пропорционально растягивается, пока не достигнет границ экрана по горизонтали или вертикали.<br/> <br />
1 и 3 - сцена сжимается таким образом, чтобы ее границы полностью совпали с границами экрана, при этом пропорции сцены не сохраняются.<br/> <br />
2 и 3 - срабатывает сразу при инициализации сцены и при анимировании ХидденХинтом (если используется скалирование).<br/> <br />
0 и 1 - срабатывает только при анимировании ХидденХинтом. В таком сдучае при ините сцены она отображается без выравнивания, такой как мы видим ее в редакторе сцен, а выравнивание происходить только при анимировании.<br/> <br />
*'''Левый бордюр''' - левый бордюр сцены (значение в пикселях на сколько мы может оттянуть левый край сцены от левого края экрана)<br />
*'''Правый бордюр''' - правый бордюр сцены (значение в пикселях на сколько мы может оттянуть правый край сцены от правого края экрана)<br />
*'''Верхний бордюр''' - верхний бордюр сцены (значение в пикселях на сколько мы может оттянуть верхний край сцены от верхнего края экрана)<br />
*'''Нижний бордюр''' - нижний бордюр сцены (значение в пикселях на сколько мы может оттянуть нижний край сцены от нижнего края экрана)<br />
*'''Смещение по горизонтали''' - допустимое смещение сцены по горизонтали при перетаскивании<br />
*'''Смещение по вертикал'''и - допустимое смещение сцены по вертикали при перетаскивании<br />
<br />
После смещения когда мы отпускаем сцену она возвращается в свое крайнее (левое, правое, верхнее, нижнее) положение, заданное бордюрами.<br />
<br />
'''''Если мы в бордюре укажем к примеру 100 пикселей и в смещении еще 50, то сцену мы сможем оттянуть на 150 пикселей, но при отпускании она вернется в положение оттянутое на 100 пикселей от края экрана.'''''<br />
<br />
*'''Время восстановления''' - время анимации востановления начальных размеров(при скейле) и положении(при смещении) сцены.<br />
<br />
'''''Чтоб работало необходимо вкл. таскаемость см. ниже'''''<br />
<br />
''' Положение ''' <br />
*'''х''' - Горизонтальная координата центра объекта (его точки пивота) в пикселях. Отсчитывается от точки пивота сцены<br />
*'''у''' - Вертикальная координата центра объекта (его точки пивота) в пикселях. Отсчитывается от точки пивота сцены<br />
<br />
'''''Обычно для того чтоб сцена расположилась в центре экрана нужно координаты сцены задать в два раза меньше размера экрана. (Если размер экрана 960*640 то сцена с координатами 480*320)'''''<br />
<br />
''' Группа - Размер '''<br />
*'''w''' - ширина сцены в пикселях<br />
*'''h''' - высота сцены в пикселях<br />
<br />
''' Группа - Модификаторы '''<br />
*'''alpha''' - прозрачность: от 0 (прозрачен) до 1 (не прозрачен)<br />
*'''angle''' - угол поворота в градусах (0 - не повёрнут). Отсчитывается от оси x вниз. Вверх - идут отрицательные углы<br />
*'''scale x''' - масштаб по оси x (1 - не изменен, 1.5 - увеличен в полтора раза, и т.д.)<br />
*'''scale y''' - масштаб по оси y (1 - не изменен, 1.5 - увеличен в полтора раза, и т.д.)<br />
'''z''' - параметр порядка рисования объекта. Сначала рисуются объекты с большим z, затем, поверх них - с меньшим<br />
'''память''' - если 1, то при повторном открытии экрана объект не обновляет свои параметры (помнит текущие параметры, оставшиеся от предыдущего посещения экрана)<br />
<br />
''' Группа - Показ сцены ''' <br />
*'''Время''' - время в ms показа сцены в рабочем состоянии (если определено поле переход)<br />
*'''Переход''' - экран к которому нужно перейти после окончания времени показа сцены<br />
*'''Растягиваемая''' - если 1, то сцена может быть растянута '''''(должно быть 1 если используем утку)'''''<br />
*'''Таскаемая''' - если 1, то сцену можно таскать мышкой, если 2, то ее можно таскать даже за объекты. (если 1 то объекты должны быть прокликиваемые)<br />
*'''Границы''' - если 1, то сцена, при таскании упирается в границы экрана (если она больше, то снаружи, если меньше, то изнутри)<br />
*'''Двойной''' тач - если 1, то сцена обрабатывает двойной тач<br />
<br />
''' Группа - Утка''' - (Масштабирование мультитачем)<br />
*'''min scale''' - Минимальный коэффициент масштабирования (0.1)<br />
*'''max scal'''e - Максимальный коэффициент масштабирования (4)<br />
<br />
'''Открытие''' <br />
Сцена может открыться (появится) не сразу, а выполнив определенные действия (выехать, проявиться по прозрачности и т.п.)<br />
*'''пауза''' - время в ms перед началом появления сцены<br />
*'''время''' - время в ms процесса открытия сцены<br />
*'''x''' - начальная координата x из которой сцена будет выезжать при открытии<br />
*'''y''' - начальная координата y из которой сцена будет выезжать при открытии<br />
*'''alpha''' - начальная прозрачность сцены (0-прозрачна, 1-непрозрачна) при старте анимирования открытия <br />
сцены<br />
*'''angle''' - начальный угол (в градусах) от которого сцена будет вращаться при появлении до рабочего угла<br />
*'''scale x''' - начальный масштаб по оси x от которого сцена начнет открываться к масштабу, указанному в общем списке параметров<br />
*'''scale y''' - начальный масштаб по оси y от которого сцена начнет открываться к масштабу, указанному в общем списке параметров<br />
<br />
''' Закрытие '''<br />
Сцена может закрыться (исчезнуть) не сразу, а выполнив определенные действия (уехать, растять по прозрачности и т.п.)<br />
*'''время''' - время в ms процесса закрытия сцены<br />
*'''x''' - конечная координата x куда сцена будет уезжать при закрытии<br />
*'''y''' - конечная координата y куда сцена будет уезжать при закрытии<br />
*'''alpha''' - Финальная прозрачность сцены (0-прозрачна, 1-непрозрачна) при её закрытии<br />
*'''angle''' - конечный угол (в градусах) к которому сцена будет вращаться при закрытии от рабочего угла<br />
*'''scale x''' - конечный масштаб по оси x к которому сцена будет закрываться<br />
*'''scale y''' - конечный масштаб по оси y к которому сцена будет закрываться<br />
<br />
'''Прокликиваемая''' - как и любому объекту сцене можно задавать этот параметр<br />
<br />
'''Фокус''' - группа параметрво, отвечаючая за возможность фокусировки на объекте. Сцена может фокусироваться на объекты, которые находятся в ней.<br />
*'''x''' ''(focX)'' - координата фокуса по х<br />
*'''y''' ''(focY)'' - координата фокуса по y<br />
*'''объект''' ''(focObj)'' - объект, который будет помещён в фокус<br />
*'''скорость''' ''(focVel)'' - скорость перемещения объекта в фокус<br />
*'''начало замедления''' ''(focAccTm)'' - расстояние с которого начинается замедление<br />
<br />
Отсчёт координат начинается с левого верхнего угла. Координата (0;0) - левый верхний угол сцены, центр для сцены (960х640) будет в точке с координатами (480;320).<br />
<br />
=== Добавляемые параметры ===<br />
<br />
*'''слушатель начала таскания сцены''' - машина, которая переводится в состояние ''beg'' в момент начала таскания сцены. Кроме состояния машине передается вектор направления таскания ввиде параметров ''dirx'' и ''diry'' (конец вектора). Таким образом можно узнать направление таскания.<br />
*'''слушатель конца таскания сцены''' - машина, которая переводится в состояние ''end'' в момент когда сцена прекращает движение.<br />
<br />
== Состояния Сцены ==<br />
<br />
'''focus''' - перемещает объект указанный в поле '''объект''' группы '''фокус''' в фокус сцены</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Table&diff=5202Table2013-09-24T14:31:53Z<p>Odyadina: /* Состояния таблицы */</p>
<hr />
<div>{{TOC right}}<br />
'''Общие параметры'''<br />
<br />
Таблица имеет набор стандартных параметров (см. описание параметров [[Object|Object]]).<br />
<br />
[[Файл:Tabletext.png]]<br />
<br />
Таблица (Тable) является универсальным объектом. Она может использоваться как:<br />
<br />
- самостоятельный элемент включая в себя различные элементы ([[Image|Image]], [[Text|Text]], [[Button|Button]], [[Machine|Machine]] и пр.);<br />
<br />
- дополнение к таким объектам как [[Patchwork|Patchwork]], [[HiddenList|HiddenList]], [[Invetory|Invetory]] и др. Выступая в роли «поля» для отображения их элементов.<br />
<br />
[[Файл:Table4.png|right]]<br />
<br />
[[Файл:Table5.png]]<br />
<br />
[[Файл:Table6.png]]<br />
<br />
Для того чтобы поместить объекты в таблицу, необходимо внести их в группу таблицы в дереве проекта.<br />
Заполнение таблицы происходит по столбцам. Если в таблице число видимых колонок/строчек меньше общего количества колонок/строчек, то, в таком случае, таблицу можно листать в нужном направлении.<br />
<br />
== Основные параметры таблицы ==<br />
<br />
[[Файл:Table new1.png|300px|right]]<br />
'''Группа - таблица'''<br />
<br />
*'''колонок''' - Максимальное число колонок (ячейки должны поместиться).<br />
*'''колонок видно''' - Колличество колонок, видимых в области вывода таблицы (если включен флаг: ширина фиксированная).<br />
*'''строчек''' - Максимальное число строчек (ячейки должны поместиться).<br />
*'''строчек видно''' - Колличество строчек, видимых в области вывода таблицы (если включен флаг: высота фиксированная).<br />
*'''скорость листания''' - Cкорость листания страниц (точек/секунду).<br />
*'''отсечение''' - 1 - обрезать графику таблицы по ширине и высоте; 0 - не обрезать.<br />
*'''добавлять по строкам''' - 1 - добавлять по строкам; 0 - добавлять по столбцам.<br />
<br />
'''Группа - бордюры таблицы'''<br />
<br />
*'''бордюр X''' - Ширина бордюра по x (отступ во внутрь слева и справа) от подложки или от ширины объекта для отображения видимых ячеек.<br />
*'''бордюр Y''' - Ширина бордюра по y (отступ во внутрь сверху и снизу) от подложки или от выстоты объекта для отображения видимых ячеек.<br />
*'''отступ X''' - Отступ по x во внутрь (слева и справа) в ячеки, чтобы содержимое соседних ячеек не сливалось.<br />
*'''отступ Y''' - Отступ по y во внутрь (сверху и снизу) в ячеки, чтобы содержимое соседних ячеек не сливалось.<br />
<br />
'''Группа - смещение'''<br />
<br />
*'''смещ. X''' - Смещение по x объекта в ячейке.<br />
*'''смещ. Y''' - Смещение по y объекта в ячейке.<br />
<br />
'''Группа - размеры ячеек'''<br />
<br />
*'''фон''' - Графический ресурс фона ячейки. Перетаскивается мышкой из редактора ресурсов. Может отсутствовать.<br />
*'''ширина фиксированная''' - Если равно 1, то ширины колонок будут фиксированные и определяются полем: колонок видно.<br />
*'''высота фиксированная''' - Если равно 1, то высоты строчек будут фиксированные и определяются полем: строчек видно.<br />
*'''сжимать''' - Если равно 1, то будет сжимать картинки без искажения пропорций, чтобы они помещались в ячейке.<br />
*'''текущая колонка''' - Номер первой видимой колонки, начиная с 0-ля.<br />
*'''текущая строка''' - Номер первой видимой строки, начиная с 0-ля.<br />
<br />
'''Группа - параметры текста'''<br />
<br />
*'''текстID''' - Текст (id из редактора текста), отображаемый построчно в таблице.<br />
*'''текст''' - Cтрока, отображаемая в таблице.<br />
*'''имя''' - Номер шрифта - целое число, начиная с 0 (порядковый номер шрифта).<br />
*'''размер''' - Размер шрифта в поинтах. <br />
*'''цвет 1''' - Цвет текста обычного вида.<br />
*'''цвет 2''' - Цвет текста помеченной ячейки.<br />
*'''alpha2''' - Прозрачность картинки в помеченной ячейке.<br />
*'''поз. гориз.''' - Горизонтальное выравнивание текста (0 - нет выравнивания; 1 - прижать к левому краю; 2 - центр; 3 - к правому).<br />
*'''поз. верт.''' - Вертикальное выравнивание текста (0 - нет выравнивания; 1 - прижать к верхнему краю; 2 - центр; 3 - к нижнему).<br />
*'''цвет зачеркивания 1''' - Цвет зачеркивания текста обычного вида.<br />
*'''цвет зачеркивания 2''' - Цвет зачеркивания текста помеченной ячейки.<br />
*'''толщина зачеркивания''' - Толщина зачеркивания в пикселях.<br />
*'''отступ''' - Вертикальное расстояние в пикселях в одной ячейке между словами в словосочетании (например в словосочетании Морская звезда, если оно не помещается горизонтально в одну ячейку - это вертикальное расстояние между Морская и звезда).<br />
<br />
== Дополнительные параметры ==<br />
'''Группа - Управлениe''' <br />
<br />
[[Файл:Table new2.png|300px|right]]<br />
<br />
Когда таблица листаемая, можно отображать индикаторы страниц. У каждого индикатора два состояния: вкл - если соответствующая страница видна на экране и выкл в противоположном случае. Нажав на соответствующий индикатор, таблица перемещается со скоростью, указанной в параметре "скорость листания" <br />
на необходимую страницу.<br />
<br />
*'''индикатор ВКЛ''' - Картинка включенного индикатора.<br />
*'''индикатор ВЫКЛ''' - Картинка выключенного индикатора.<br />
*'''левая кнопка''' - Кнопка для листания списка влево.<br />
*'''правая кнопка''' - Кнопка для листания списка вправо.<br />
*'''верхняя кнопка'''- Кнопка для листания списка вверх. <br />
*'''нижняя кнопка''' - Кнопка для листания списка вниз. <br />
*'''отступ X''' - Отступ по x от таблицы.<br />
*'''отступ Y''' - Отступ по y от таблицы.<br />
*'''отступ W''' - Отступ между ячейками таблицы индексов.<br />
<br />
'''Группа - листание'''<br />
<br />
*'''тип листания''' - Тип листания таблицы: 0 - по страницам; 1 - в зависимости от скорости (IOS).<br />
*'''старт листания''' - Смещение в точках, начиная с которого скролим таблицу.<br />
*'''гориз. листание''' - Горизонтальное листание таблицы: 0 - выключено; 1 - включено.<br />
*'''вертик. листание''' - Вертикальное листание таблицы: 0 - выключено; 1 - включено.<br />
*'''цикл. листание''' - Циклическое листание таблицы: 0 - выключено; 1 - включено.<br />
*'''листание 360 градусов''' - Разрешено листание в двух направлениях: 0 - выключено; 1 - включено.<br />
*'''затухание''' - Затухание скорости листания таблицы: 0 - выключено; 1 - включено.<br />
<br />
== Добавляемые параметры ==<br />
[[Файл:Table new3.png|right]]<br />
Открывается при нажатии правой кнопки мыши в поле параметров таблицы.<br />
<br />
[[Файл:+.png]] '''ширина настраиваемая'''<br />
*'''ширина колонок''' - Через точку с запятой указываем ширину колонок по-порядку.<br />
[[Файл:+.png]] '''высота настраиваемая'''<br />
*'''высота строчек''' - Через точку с запятой указываем высоту строчек по-порядку.<br />
[[Файл:+.png]] '''добавить ячейку в таблицу'''<br />
*'''текстID''' - Cтрока (id из редактора строк), отображаемая в ячейке.<br />
*'''текст''' - Cтрока, отображаемая в ячейке.<br />
*'''картинка''' - Картинка, рисуемая в ячейке (строки игнорируются).<br />
<br />
[[Файл:+.png]] '''изменить состояние объекта''' - при тапе<br />
*'''объект''' - Cостояние которого мы меняем.<br />
*'''состояние''' - Значение нового состояния.<br />
<br />
[[Файл:+.png]] '''при листании влево - изменить состояние объекта'''<br />
*'''объект''' - При смене текущей страницы в таблице перевести объект в состояние из следующего поля.<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля.<br />
<br />
[[Файл:+.png]] '''при листании влево - изменить параметр (свойство) объекта'''<br />
*'''объект''' - При смене текущей страницы в таблице этот объект меняет свой параметр.<br />
*'''свойство''' - Параметр, который мы изменяем.<br />
*'''значение''' - Новое значение параметра.<br />
<br />
[[Файл:+.png]] '''при листании вправо - изменить состояние объекта''' <br />
*'''объект''' - При смене текущей страницы в таблице перевести объект в состояние из следующего поля.<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля.<br />
<br />
[[Файл:+.png]] '''при листании вправо - изменить параметр (свойство) объекта'''<br />
*'''объект''' - При смене текущей страницы в таблице этот объект меняет свой параметр.<br />
*'''свойство''' - Параметр, который мы изменяем.<br />
*'''значение''' - Новое значение параметра.<br />
<br />
== Состояния таблицы ==<br />
Так же мы можем управлять таблицей изменяя ее состояния.<br />
<br />
*'''first''' - Перелистнуть на первую страницу таблицы.<br />
*'''last''' - Перелистнуть на последнюю страницу таблицы.<br />
*'''prev''' - Перелистнуть на предыдущую страницу таблицы (влево по горизонтали).<br />
*'''next''' - Перелистнуть на следующую страницу таблицы (вправо по горизонтали).<br />
*'''up''' - Перелистнуть на следующую страницу таблицы (вверх по вертикали).<br />
*'''down''' - Перелистнуть на предыдущую страницу таблицы (вниз по вертикали).<br />
*'''refresh''' - Обновить таблицу.<br />
*'''flyto''' - Таблица плавно приедет к значению curRow и curCol, если они были изменены.<br />
<br />
Если изменить таблице значение параметра (текущего рядка или столбика), то после необходимо передать таблице состояние refresh или flyto, чтобы увидеть изменения. При refresh рядок или столбец поменяется мгновенно, при flyto таблица "приплывет" к нужному рядку или столбцу.<br />
<br />
== Пример ==<br />
<br />
[http://fs5.absolutist.com/files/wikisample/Table.rar Download]</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Options&diff=5188Options2013-09-20T08:42:19Z<p>Odyadina: /* Добавляемые параметры */</p>
<hr />
<div>'''Options''' - тип объекта, который используется для хранения и управления глобальными параметрами приложения. Так же '''Options''' позволяет хранить и использовать параметры записанные в него другими объектами.<br />
<br />
== Общие параметры ==<br />
Смотреть описание [[Object|Object]].<br />
<br />
== Основные параметры ==<br />
[[Файл:options_1.png|right]]<br />
*'''sound''' - Громкость звука 1 - максимальный; 0 - отключен.<br />
*'''music''' - Громкость музыки 1 - максимальная; 0 - отключена.<br />
*'''voice''' - Голос рассказчика 0 - отключен; не 0 - включен.<br />
*'''page''' - Номер страницы для книги.<br />
*'''fullScreen''' - Полноэкранный режим, используется в приложениях для PC: 1 - на весь экран, 0 - в окне.<br />
*'''activity''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''first loading bg''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''first loading bar''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''show progress''' - 1 - Отображать не только крутилку activity, но и прогрессбар (кастомный или беленький програмный).<br />
*'''loading bg''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''loading bar''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''поле ввода''' - Объект, типа edit из которого будет браться имя при добавлении/редактировании профилей (состояние add у опций).<br />
*'''таблица''' - Объект, типа table в который мы будем складывать все профиля (состояние update у опций).<br />
<br />
== Добавляемые параметры ==<br />
[[Файл:options_2.png|right]]<br />
Меню выбора ''Добавляемые параметры'' к объектам активируется по нажатию правой кнопки мыши.<br />
<br />
<br />
[[Файл:+.png]] '''ввод пустого имени''' - При попытке добавить пустое имя состоянием add будет изменено состояние заданного объекта.<br />
*'''объект''' - При попытке добавить пустое имя перевести объект в состояние из следующего поля.<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля.<br />
<br />
[[Файл:+.png]] '''Android - кнопка Back''' - При нажатии на кнопку перевести объект в новое состояние.<br />
*'''объект''' - При клике на кнопку перевести объект в состояние из следующего поля.<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля.<br />
<br />
[[Файл:+.png]] '''Android - кнопка Menu''' - При нажатии на кнопку перевести объект в новое состояние.<br />
*'''объект''' - При клике на кнопку перевести объект в состояние из следующего поля.<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля.<br />
<pre><br />
!!! Если в машине, которая вызывается по нажатию на Android-кнопку, есть обращение к опциям, то это обращение нужно писать в другом состоянии, через команду '''wait'''<br />
</pre><br />
<pre><br />
!!! Машину, которая вызывается по нажатию на Android-кнопку, нужно размещать на расшариной сцене, если в ней есть команда '''wait''' потому, что эта команда работает, если прописана на текущем экране, а не на фоновом (глобальном, не текущем).<br />
</pre><br />
<br />
== Дополнительные стандартные параметры ==<br />
<br />
* '''rlang''' - Текущий язык устройства.<br />
* '''r_install''' - Дата и время установки в секундах.<br />
* '''r_hours''' - Время прошедшее с момента установки в часах.<br />
* '''r_playtime''' - Время нахождения в игре в минутах.<br />
* '''r_launches''' - Количество запусков игры.<br />
* '''r_days''' - Сколько дней подряд запускалась игра, если пропускается хотя бы день, то сбрасывается. <br />
* '''r_lastlaunch''' - Дата и время последнего запуска в секундах.<br />
<br />
== Состояния ==<br />
Объект '''Options''' обладает рядом состояний:<br />
*'''init''' - Инициализация опций.<br />
*'''add''' - Добавить новый профиль из заданного поля ввода, и сделать его текущим.<br />
*'''update''' - Заполнить заданную таблицу списком профилей.<br />
*'''change''' - Сменить профиль на выбранный на данный момент в таблице.<br />
*'''delete''' - Удалить выбранный профиль.<br />
*'''generate''' - Генерирует имя профиля по умолчанию при создании нового профиля.<br />
*'''save''' - Сохранение всех параметров в опции.<br />
*'''edit''' - С текущего поля ввода считывает имя и устанавливает его для текущего профиля.<br />
*'''reset''' - Заменяет файл Options файлом Options_default, то есть сбрасываются все параметры и устанавливаются все параметры по умолчанию<br />
*'''clear_cur_player''' - Удаляет весь текущий прогресс по выбранному профилю, таким образом можно организовать прохождение игры заново для одного и того же профиля.<br />
*'''delete_node''' - Удаляет ''ноду'' в опциях, вычитав ее название из поля ''param''.<br />
<br />
== Пример ==</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Options&diff=5187Options2013-09-20T08:31:11Z<p>Odyadina: /* Добавляемые параметры */</p>
<hr />
<div>'''Options''' - тип объекта, который используется для хранения и управления глобальными параметрами приложения. Так же '''Options''' позволяет хранить и использовать параметры записанные в него другими объектами.<br />
<br />
== Общие параметры ==<br />
Смотреть описание [[Object|Object]].<br />
<br />
== Основные параметры ==<br />
[[Файл:options_1.png|right]]<br />
*'''sound''' - Громкость звука 1 - максимальный; 0 - отключен.<br />
*'''music''' - Громкость музыки 1 - максимальная; 0 - отключена.<br />
*'''voice''' - Голос рассказчика 0 - отключен; не 0 - включен.<br />
*'''page''' - Номер страницы для книги.<br />
*'''fullScreen''' - Полноэкранный режим, используется в приложениях для PC: 1 - на весь экран, 0 - в окне.<br />
*'''activity''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''first loading bg''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''first loading bar''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''show progress''' - 1 - Отображать не только крутилку activity, но и прогрессбар (кастомный или беленький програмный).<br />
*'''loading bg''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''loading bar''' - Графический ресурс для индикатора загрузки. Перетаскивается мышкой из редактора ресурсов (поле должно находится в состоянии редактирования).<br />
*'''поле ввода''' - Объект, типа edit из которого будет браться имя при добавлении/редактировании профилей (состояние add у опций).<br />
*'''таблица''' - Объект, типа table в который мы будем складывать все профиля (состояние update у опций).<br />
<br />
== Добавляемые параметры ==<br />
[[Файл:options_2.png|right]]<br />
Меню выбора ''Добавляемые параметры'' к объектам активируется по нажатию правой кнопки мыши.<br />
<br />
<br />
[[Файл:+.png]] '''ввод пустого имени''' - При попытке добавить пустое имя состоянием add будет изменено состояние заданного объекта.<br />
*'''объект''' - При попытке добавить пустое имя перевести объект в состояние из следующего поля.<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля.<br />
<br />
[[Файл:+.png]] '''Android - кнопка Back''' - При нажатии на кнопку перевести объект в новое состояние.<br />
*'''объект''' - При клике на кнопку перевести объект в состояние из следующего поля.<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля.<br />
<br />
[[Файл:+.png]] '''Android - кнопка Menu''' - При нажатии на кнопку перевести объект в новое состояние.<br />
*'''объект''' - При клике на кнопку перевести объект в состояние из следующего поля.<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля.<br />
<pre><br />
!!! Если в машине, которая вызывается по нажатию на Android-кнопку, есть обращение к опциям, то это обращение нужно писать в другом состоянии, через команду wait<br />
</pre><br />
<br />
== Дополнительные стандартные параметры ==<br />
<br />
* '''rlang''' - Текущий язык устройства.<br />
* '''r_install''' - Дата и время установки в секундах.<br />
* '''r_hours''' - Время прошедшее с момента установки в часах.<br />
* '''r_playtime''' - Время нахождения в игре в минутах.<br />
* '''r_launches''' - Количество запусков игры.<br />
* '''r_days''' - Сколько дней подряд запускалась игра, если пропускается хотя бы день, то сбрасывается. <br />
* '''r_lastlaunch''' - Дата и время последнего запуска в секундах.<br />
<br />
== Состояния ==<br />
Объект '''Options''' обладает рядом состояний:<br />
*'''init''' - Инициализация опций.<br />
*'''add''' - Добавить новый профиль из заданного поля ввода, и сделать его текущим.<br />
*'''update''' - Заполнить заданную таблицу списком профилей.<br />
*'''change''' - Сменить профиль на выбранный на данный момент в таблице.<br />
*'''delete''' - Удалить выбранный профиль.<br />
*'''generate''' - Генерирует имя профиля по умолчанию при создании нового профиля.<br />
*'''save''' - Сохранение всех параметров в опции.<br />
*'''edit''' - С текущего поля ввода считывает имя и устанавливает его для текущего профиля.<br />
*'''reset''' - Заменяет файл Options файлом Options_default, то есть сбрасываются все параметры и устанавливаются все параметры по умолчанию<br />
*'''clear_cur_player''' - Удаляет весь текущий прогресс по выбранному профилю, таким образом можно организовать прохождение игры заново для одного и того же профиля.<br />
*'''delete_node''' - Удаляет ''ноду'' в опциях, вычитав ее название из поля ''param''.<br />
<br />
== Пример ==</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0_%D0%BF%D0%BE_%D1%87%D0%B0%D1%81%D1%82%D1%8F%D0%BC&diff=5186Загрузка проекта по частям2013-09-20T08:21:34Z<p>Odyadina: /* Разбивка проекта по экранам */</p>
<hr />
<div>Загрузка проекта по частям необходима в тех случаях, когда размер проекта (его установочный файл: *.ipa, *.apk и т.д.)становится выше определенного значения. Предположим, что установочный файл нашей игры занимает место в 120 мб, что является не очень хорошо для пользователя, так как ему придется потратить больше времени и трафика на загрузку. Для того, чтобы уменьшить размер первоначального установочного файла, необходимо разбить проект по пакам или по определенно взятым экранам! В случае применения разбивки по экранам или по пакам, при экпорте проекта будет формироваться один *.sirx файл (файл в котором идет описание графики, используемой в проекте), и несколько разных *.DAT файлов, в которых хранится сама графика. Далее выделяем *.sirx файл и основной *.DAT файл, которые будут использоваться в установочном файле, а остальные *.DAT файлы запакуем в *.zip архив. После того, как запаковали в zip нужно выложить эти файлы на какой-то внешний ресурс и сохранить url по которым эти файлы находятся. В результате, размер исходного установочного файла будет зависить от размера основного DAT файла, а остальные графические ресурсы будут подгружаться в самой игре из интернета.<br />
<br />
<br />
==Разбивка проекта по экранам==<br />
<br />
[[Файл:Принадлежит_паку.JPG|right]]<br />
Для того, чтобы разбить проект по частям, необходимо определить, какой экран к какому паку относится, для этого, нужно выделить экран, зайти в его свойства и найти параметр '''принадлежит паку'''. Этот параметр по умолчанию равен '''0'''. Значение '''0''' означает, что графика данного экрана при экспорте будет запакована в основной *.DAT файл. Чтобы поменять это значение, нужно нажать на это поле, после чего появится выпадающий список, в этом списке выбрать то значение, которому вы хотите присвоить данный экран. В данный момент параметр '''принадлежит паку''' имеет значение от 0 до 7, что означает, что существует возможность разбить проект на 8 разных *.DAT файлов. После того, как было выбрано какое-то значение параметра, отличное 0, было определено, что экран '''screen_1''' принадлежит другому паку, и его графика будет паковаться в другой *.DAT файл.<br />
<br>Естественно существует возможность присваивать одному и тому же значению параметра несколько экранов, чья графика будет принадлежать одному и тому же *.DAT файлу.<br />
<br />
Все экраны, на которых воспроизводится видео, должны принадлежать паку '''0'''.<br />
<br />
==Настройка Project Options==<br />
<br />
[[Файл:Downloadable_packages.JPG|right]]<br />
<br />
После того, как было определенно, какой экран, какому значению принадлежит, нужно настроить Project Options. Это нужно для того, чтобы в *.sirx файле указать, какое изображение на каких экранах используется. Для этого в меню редактора выбираем '''Project - > Project Options'''. Появится окно в котором нужно выбрать вкладку '''Downloadable Packages'''. В этой вкладке будут отображаться значения параметра '''принадлежит паку''', которые были использованы в проекте. В данный момент в использованном проекте было присвоено по одному экрану одному из значений параметра. В результате имеем 5 разных экранов разбитых на паки. В поле '''Link for download''' должна указываться ссылка на место, где лежит *.zip архив с запакованным *.DAT файлом внутри.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
==Подкачка графики==<br />
Подкачка графики в проекте происходит по нажатию на кнопку. Это устроено следующим образом:<br />
* Создаем кнопку<br />
* Правой кнопкой мыши кликаем на свойства кнопки и добавляем свойство '''скачать загружаемый контент'''<br />
* Настраиваем добавленное свойство<br />
** '''url''' - сюда вписывается ссылка на *.zip архив с запакованным DAT файлом<br />
** '''объект (успех)''' - объект, который вызывается в случае успешной закачки<br />
** '''состояние (успех)''' - состояние, которое вызывается в случае успешной закачки<br />
** '''объект (провал)''' - объект, который вызывается в случае неуспешной закачки<br />
** '''состояние (провал)''' - состояние, которое вызывается в случае неуспешной закачки<br />
** '''счетчик прогресса''' - из выпадающего списка выбирается объект типа counter, который будет показывать на сколько процентов закончена загрузка<br />
Также существует возможность отменять текущую закачку и перезапускать ее, этому соответствуют параметры: отменить текущие закачки, перезапустить текущие закачки, которые находятся в самой кнопке и принимают значения либо 0, либо 1<br />
==Экспорт проекта==<br />
После того, как разбили проект по частям и настроили опции проекта, его можно экспортировать. В результате экспорта проекта, в папке '''common''' можно наблюдать разные папки с именами: imgs, imgs1, imgs2, imgs3, imgs4, imgs5. Имя папки соответствуют значению параметра, которому присваивали экран. То есть, значение параметра '''принадлежит паку''' соответствует папке:<br />
<br>'''0''' - imgs<br />
<br>'''1''' - imgs1<br />
<br>'''2''' - imgs2<br />
<br>'''3''' - imgs3<br />
<br>'''4''' - imgs4<br />
<br>'''5''' - imgs5<br />
<br> Папка imgs содержит файлы: imgs.sirx, res.DAT. Эти файлы следует использовать в сборке проекта. В остальных же папках содержаться *.DAT файлы, которые следует запаковать в *.zip архивы и выложить на сеть в доступном всем месте. Ссылки, которые указываются в опциях проекта и по которым находятся zip архивы, должны совпадать!!! Вид ссылки: http://www.mysite.com/imgs1.zip</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Button&diff=5185Button2013-09-20T08:18:37Z<p>Odyadina: </p>
<hr />
<div>{{TOC right}}<br />
'''Общие параметры'''<br />
(см. описание [[Object|Object]])<br />
<br />
*'''[[прокликиваемая]]''' - Если 1, то кнопка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то кнопка сама обрабатывает клик, но и пропускает его дальше<br />
*'''память''' - Если 1, то при повторном открытии экрана объект не обновляет свои параметры (помнит текущие параметры, оставшиеся от предыдущего посещения экрана)<br />
<br />
== Основные параметры ==<br />
'''Группа - внешний вид'''<br />
[[Файл:But.png|250px|right]]<br />
<br />
*'''up''' - Графический ресурс для отображения отжатой кнопки. <br />
*'''down''' - Графический ресурс для отображения нажатой кнопки. Может отсутствовать.<br />
*'''over''' - Графический ресурс для отображения кнопки с мышкой над ней. Может отсутствовать.<br />
*'''disable''' - Графический ресурс для отображения неактивной кнопки. Может отсутствовать. <br />
*'''накладывать''' - Если "1", то графика из параметра '''down''' будет накладываться на графику из параметра '''up''' при нажатии на кнопу, если "0", то не накладывается.<br />
*'''down scale''' - Изменяет размеры графического ресурса для отображения нажатой кнопки. Может отсутствовать.<br />
*'''over scale''' - Изменяет размеры графического ресурса для отображения кнопки с мышкой над ней. Может отсутствовать.<br />
<br />
'''Группа - звуки'''<br />
<br />
*'''up''' - Звуковой ресурс для проигрывания отжатой кнопки. Может отсутствовать.<br />
*'''down''' - Звуковой ресурс для проигрывания нажатой кнопки. Может отсутствовать.<br />
*'''over''' - Звуковой ресурс для проигрывания кнопки с мышкой над ней. Может отсутствовать.<br />
<br />
'''Группа - время'''<br />
<br />
*'''невидимости''' - Время невидимости перед открытием.<br />
*'''открытия''' - Время проявления кнопки от полной прозрачности к прозрачности, заданной в модификаторах.<br />
*'''закрытия''' - Время исчезания кнопки до полной прозрачности.<br />
<br />
'''надпись ID''' - Надпись на кнопке, перетаскивается из редактора строк.<br />
<br />
'''надпись''' - Надпись на кнопке. Используется только, если нет графики. <br />
<br />
'''Группа - [[шрифт]]'''<br />
<br />
*'''имя''' - Номер шрифта - целое число, начиная с 0 (порядковый номер шрифта).<br />
*'''размер''' - Размер шрифта в пикселях.<br />
<br />
== Дополнительные параметры ==<br />
<br />
*'''вернуться назад''' - 1 - кнопка служит для возврата на предыдущий экран, id экрана для перехода игнорируется.<br />
*'''перейти на''' - Экран для перехода после клика на кнопку, если условные переходы (ниже) не сработали<br />
*'''задержка перехода''' - Задержка перед переходом на следующий экран в ms.<br />
*'''рейтинг''' - Открывает системное окно с предложением проголосовать, данные берёт из rating.xml<br />
*'''перезагрузить лэйаут''' - 1 - по нажатию на кнопку перезагружает лэйаут<br />
*'''отменить текущие закачки''' - 1 - по нажатию на кнопку отменяет все текущие закачки<br />
*'''перезапустить текущие закачки''' - 1 - по нажатию на кнопку перезапускает все текущие закачки<br />
*'''не предзагружать''' - Не загружает в фоновой загрузке графику экрана на которую ведёт кнопка.<br />
*'''закрыть приложение''' - По нажатию закрывает приложение.<br />
*'''восстановить покупки''' - 1 - по нажатию на кнопку попытаться восстановить покупки.<br />
<br />
'''Группа - [[позиционирование]]'''<br />
*'''горизонтальное''' - 0 - нет выравнивания; 1 - прижать к левому краю; 2 - центр; 3 - к правому<br />
*'''вертикальное''' - 0 - нет выравнивания; 1 - прижать к верхнему краю; 2 - центр; 3 - к нижнему<br />
<br />
== Добавляемые параметры ==<br />
<br />
<br />
[[Файл:Menadd.png|300px|right]]<br />
Меню выбора ''Добавляемые параметры'' к объектам активируется по правой кнопки мыши. <br />
<br />
[[Файл:+.png]] '''если был экран''' - Переходим на определенный экран, если некоторый экран был уже хотя бы раз посещен.<br />
*'''был экран'''- Проверяемый экран, который мы проверяем на то, был ли он уже открыт хотя бы один раз.<br />
*'''перейти на''' - Переходим на этот экран, если экран из предыдущего поля уже открывался.<br />
<br />
[[Файл:+.png]] '''изменить состояние объекта''' - При клике на кнопку перевести объект в новое состояние.<br />
*'''объект''' - Изменить состояние у выбранного объекта<br />
*'''состояние''' - Новое состояние для объекта из предыдущего поля. <br />
<br />
[[Файл:+.png]] '''изменить параметр объекта''' - Изменить параметр (свойство) объекта при клике на кнопку.<br />
*'''объект''' - Изменить параметр у выбранного объекта<br />
*'''параметр''' - Параметр, который мы изменяем. <br />
*'''значение''' - Новое значение параметра.<br />
<br />
[[Файл:+.png]] '''изменить графику объекта''' - При клике на кнопку изменить графический ресурс объекта.<br />
*'''объект''' - Изменить параметр у выбранного объекта<br />
*'''параметр''' - Параметр, который мы изменяем.<br />
*'''значение''' - Новое значение графического ресурса (перетаскивается из редактора ресурсов). <br />
<br />
[[Файл:+.png]] '''изменить id текста''' - При клике на кнопку меняет id текста на выбранный у другого объекта.<br />
*'''объект''' - Объект у которого меняется id текста. <br />
*'''свойство''' - Свойство, в которое записывается новый id текста.<br />
*'''значение''' - Новое значение текстового ресурса (перетаскивается из редактора текстов). <br />
<br />
[[Файл:+.png]] '''изменить id объекта''' - При клике на кнопку меняет id объекта на выбранный у другого объекта(на пример у инвентаря таким образом указывается id объекта помещаемого в инвентарь).<br />
*'''объект''' - Объект у которого меняется id объекта. <br />
*'''свойство''' - Свойство, в которое записывается новый id объекта.<br />
*'''значение''' - Объект, id которого будет записан. <br />
<br />
[[Файл:+.png]] '''изменить id экрана объекта''' - При клике на кнопку меняет id экрана на выбранный у другого объекта(на пример можно использовать для изменения id экрана для перехода у кнопки).<br />
*'''объект''' - Объект у которого меняется id экрана. <br />
*'''свойство''' - Свойство, в которое записывается новый id экрана.<br />
*'''значение''' - Экран, id которого будет записан. <br />
<br />
[[Файл:+.png]] '''совершить in-app покупку''' - При клике на кнопку открывается системное окно с предложением совершить in-app покупку.<br />
*'''id покупки''' - Внутренний id покупки для приложения, указывается в объекте store<br />
*'''объект(успех)''' - Объект, которому сообщается об удачной покупке<br />
*'''состояние(успех)''' - Состояние в которое переводится выбранный объект в случае успешной покупки<br />
*'''объект(провал)''' - Объект, которому сообщается о неудачной покупке<br />
*'''состояние(провал)''' - Состояние в которое переводится объект в случае неудачной покупки<br />
<br />
[[Файл:+.png]] '''скачать загружаемый контент''' - При клике на кнопку будет совершена попытка скачать контент. <br />
*'''url''' - Ссылка на zip архив с контентом в интернете.<br />
*'''объект (успех)''' - Этому объекту будет сообщено об успехе закачки.<br />
*'''состояние (успех)''' - Это состояние будет установлено объекту при успешной закачке.<br />
*'''объект (провал)''' - Этому объекту будет сообщено о неудаче закачки.<br />
*'''состояние (провал)''' - Это состояние будет установлено объекту при ошибке/отмене закачки.<br />
*'''счетчик прогресса''' - Объект типа счетчик, который будет отображать прогресс загрузки. Крайне желательно, чтобы он имел диапазон 0..100.<br />
<br />
[[Файл:+.png]] '''открыть внешнюю ссылку''' - При клике на кнопку открыть ссылку в браузере.<br />
*'''id cсылки''' - Если в опциях не будет найдено ссылки, то сам айдишник будет интерпретироваться как ссылка.<br />
*'''id cсылки (iOS)''' - Если задано, то на iOS устройствах будет использоваться ВМЕСТО основного линка. Ссылка которая открывается на iOS устройствах(может быть в виде itms://.. itms-apps://.. http://...).<br />
*'''id cсылки (Android)''' - Если задано, то на Android устройствах будет использоваться ВМЕСТО основного линка.<br />
*'''id cсылки (текстовая база)''' - Если задано, то будет использоваться ссылка из записи текстовой базы(перетаскивается запись из текстовой базы) ВМЕСТО основного линка. Какая ссылка будет использоваться задаётся при сборке.<br />
<br />
==Примечания и дополнения==<br />
<br />
'''Важно помнить:''' <br />
<br />
*Кнопка реагирует только на отпускание. (В отличии от машины, которая может реагировать как на нажатие, команда click, так и на отпускание, команда touch_up.)<br/><br />
Часто для простых похожих действий используют как кнопки, так и машины. Важно учитывать, на каком этапе тапа они срабатывают (нажатие, удерживание, отпускание) потому, что игрок может очень длительное время удерживать палец на экране. <br/><br />
Можно сделать так, что один тап будет приводить в действие два объекта. Например, тапнуть на машину, которая реагирует на нажатие, а затем перетащить палец на кнопку (или поместить кнопку поверх машины) и отпустить. В таком случае на один тап откликнется и машина, и кнопка.<br />
<br />
*Следует аккуратно использовать кнопки, если у них или их родителей прокликиваемость = 2. В таком случае, если кнопку двигать (например, анимация колыхания), то она потеряет фокус и не будет реагировать на тап.</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=Eitems&diff=4338Eitems2013-06-21T11:38:40Z<p>Odyadina: /* Параметры и состояния */</p>
<hr />
<div>объект, служащий для связи инвентаря(магазина) и экономики<br />
<br />
=Свойства=<br />
<br />
*'''иконка ресурса 1''' - Графический ресурс иконки монет.<br />
*'''иконка ресурса 2''' - Графический ресурс иконки кристаллов<br />
<br />
==Ссылки на объекты==<br />
<br />
[[Файл:Eitems.jpg|right]]<br />
*'''economics''' - ссылка на объект economics<br />
<br />
*'''таблица''' - ссылка на таблицу, где будут размещаться шаблоны<br />
<br />
*'''шаблон магазина''' - ссылка на шаблон магазина<br />
<br />
*'''шаблон инвентаря''' - ссылка на шаблон инвентаря<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br clear /br><br />
==Окно подтверждения покупки==<br />
<br />
[[Файл:Eitems2.jpg|right]]<br />
*'''окно''' - Некая машина, олицетворяющая собой само окно предмета. Должна иметь состояние open.<br />
*'''иконка''' - Иконка предмета.<br />
*'''текст (объект)''' - Текстовый объект в окошке.<br />
*'''описание (объект)''' - Текстовый объект в окошке, в который сложим описание предмета.<br />
*'''иконка цены''' - Объект отображающий иконку цены (кристаллы, золото и т.п.).<br />
*'''цена''' - Счетчик отображающий непосредственно цену.<br />
*'''купить''' - Кнопка купить. Вызывает объекту eitems состояние ''buy''.<br />
*'''использовать''' - Кнопка использовать. Вызывает объекту eitems состояние ''use''.<br />
*'''количество''' - Счетчик отображающий количество премдметов на данный момент.<br />
<br />
Пример:<br />
<br />
[[Файл:Eitems3.jpg|300px]]<br />
<br />
==Добавляемые параметры==<br />
<br />
[[Файл:+.png]] '''нехватка ресурсов''' - при попытке купить предмет, когда не хватает средств, будет передаваться соответствующее состояние объекту указанному в следующем поле.<br />
<br />
==Параметры и состояния==<br />
<br />
[[Файл:Eitems1.jpg|right]]<br />
Есть возможность применять фильтры к предметам, чтобы отображать только предметы нужной нам категории. Категория указывается в настройках предметов в объекте economics. Для этого есть параметр '''filter'''. Этот параметр является текстовым и перетаскивается из текстовой базы.<br />
<br />
*После определения параметра фильтрации переводим объект eitems в состояние '''filter'''.<br />
<br />
*'''Store''' - состояние, передаваемое объекту eitems, для отображение шаблонов магазина.<br />
<br />
*'''Inventory''' - состояние, передаваемое объекту eitems, для отображение шаблонов инвентаря.<br />
<br />
Состояния Eitems:<br />
<br />
*hide_param - спрятать объект (итемс пропадает и из магазина, и из инвентаря)<br />
*use_param - использовать объект<br />
*add_param - добавляет объект из магазина в инвентарь, но не вычитает ресурс (пассивное добавление итемса)<br />
*buy_param - добавляет объект из магазина в инвентарь и вычитает ресурс (осуществляет покупку итемса)<br />
<br />
Перед тем, как переводить еитемс в соответствующее состояние нужно его параметру param присвоить текстовый ИД соответствующего предмета.<br />
<br />
=Сопутствующие объекты=<br />
<br />
Объекты, которые используются вместе с объектом economics и имеют с ним непосредственную связь:<br />
<br />
* [[Файл:Kub.png]] - [[Eitems]] - объект, служащий для связи инвентаря(магазина) и экономики. <br />
* [[Файл:Kub.png]] - [[Estoreitem]] - шаблон для ячейки магазина. <br />
* [[Файл:Kub.png]] - [[Einventoryitem]] - шаблон для ячейки инвентаря. <br />
* [[Файл:Kub.png]] - [[Taskorganizer]] - органайзер заданий.<br />
* [[Файл:Kub.png]] - [[Etaskitem]] - шаблон для ячейки задания.<br />
* [[Файл:Kub.png]] - [[Ecollection]] - шаблон для строки в таблице коллекции.<br />
* [[Файл:Economics.png]] - [[Economics]] - глобальная настройка игр типа ферма\билдер</div>Odyadinahttps://wiki.appsalutecreator.com/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Pipes_1.jpg&diff=4047Файл:Pipes 1.jpg2013-05-28T14:54:18Z<p>Odyadina: </p>
<hr />
<div></div>Odyadina