<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.appsalutecreator.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Imarunenko</id>
	<title>wiki.appsalutecreator.com - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.appsalutecreator.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Imarunenko"/>
	<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Imarunenko"/>
	<updated>2026-10-17T04:34:38Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.31.15</generator>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&amp;diff=3358</id>
		<title>Настройка миниигр</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&amp;diff=3358"/>
		<updated>2013-03-05T11:59:45Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Настройка объектов, создание машин состояний */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание игры «Hidden Object Game»|Урок 6]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Работа с эффектами|Урок 8]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' изучить настройки объектов, реализующих различные минигры.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* создать уровень игры с объектом, содержащим тип механики Puzzle&lt;br /&gt;
* создать уровень игры с объектом, содержащим тип механики Patchwork &lt;br /&gt;
&lt;br /&gt;
== Puzzle ==&lt;br /&gt;
&lt;br /&gt;
=== Создание экрана и сцены в игровом проекте ===&lt;br /&gt;
&lt;br /&gt;
1. Запустить SceneEditor.&lt;br /&gt;
&lt;br /&gt;
2. В меню Проект → Загрузить → Learning.seproj. &lt;br /&gt;
&lt;br /&gt;
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_07.1, создать экран Lesson_08.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 1.png]]&lt;br /&gt;
&lt;br /&gt;
4. В экране Lesson_08 создать новые сцены 08 и Buttons, в которую (через ResourcesEditor) добавить графические ресурсы (Level_01, hint_normal в папку 05 и hint_normal, ico_R_normal2 в папку Buttons) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»).&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 2.png]]  [[Файл:08 3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Настройка объектов, создание машин состояний ===&lt;br /&gt;
	&lt;br /&gt;
1. В сцене 08 изменить название графического ресурса hint_normal на applause и в общих настройках элемента удалить саму графику через модификаторы → res.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 4.png]]&lt;br /&gt;
&lt;br /&gt;
2. Графическое изображение level_01 перевести в тип puzzle и установить такие настройки:&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 5.png]]&lt;br /&gt;
&lt;br /&gt;
3. Объект applause перевести в тип машина и прописать ему состояния on и off.&lt;br /&gt;
&lt;br /&gt;
4. В состоянии on добавить команду play (проиграть звук) и в списке команды выбрать snd (короткий звук), подгружаемый с помощью ResourcesEditor из папки ресурсов Level_08; &lt;br /&gt;
&lt;br /&gt;
[[Файл:08 6.png]]&lt;br /&gt;
&lt;br /&gt;
5. Создать новое состояние с именем off. В общих настройка свойства элемента изначально установить состояние off.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 7.png]]  [[Файл:08 8.png]]&lt;br /&gt;
&lt;br /&gt;
6. Далее перейти к сцене Buttons, перевести графические объекты hint_normal, ico_R_normal2 в тип button, в свойстве элемента установить такие настройки:&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 9.png]]  [[Файл:08 10.png]]&lt;br /&gt;
&lt;br /&gt;
''Кнопка R (переиграть)'' — кнопка, запускающая игру Puzzle сначала. В общих настройках свойства элемента устанавливаем, в какое начало должна возвращать кнопка (в нашем случае перейти на экран Lesson_08).Для данной игры, мы сделали переход на экран &amp;lt;tt&amp;gt;Lesson_08&amp;lt;/tt&amp;gt;, который запускает игру сначала. Но в дальнейшем, чтобы не переводить все объекты в начальное состояние  правильнее будет, в графе '''«изменить состояние»''' выбрать объект &amp;lt;tt&amp;gt;Level_01&amp;lt;/tt&amp;gt; и указать ему состояние &amp;lt;tt&amp;gt;mix&amp;lt;/tt&amp;gt;, которое означает, что игра возвращается в состояние перемешивания картинок, а не запускает всю игру заново.&lt;br /&gt;
	&lt;br /&gt;
7. В объекте (кнопке) hint_normal нажать правой кнопкой и выбрать изменить состояние объекта → потом выбрать объект level_01 и вписать состояние hint, которое означает, что при нажатии кнопки, в качестве подсказки, игра покажет картинку в собранном виде.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 11.png]]  [[Файл:08 12.png]]&lt;br /&gt;
&lt;br /&gt;
''hint'' – кнопка, реализующая подсказку на экране поиска.&lt;br /&gt;
&lt;br /&gt;
8. Вернуться на сцену 08 к объекту  level_01 и в общих настройках свойства элемента изменить состояние объекта → выбрать объект applause и вписать состояние on.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 13.png]]&lt;br /&gt;
&lt;br /&gt;
9. Проверить выполнение задачи с помощью проигрывателя сцен Viewer.&lt;br /&gt;
&lt;br /&gt;
=== Упражнения ===&lt;br /&gt;
&lt;br /&gt;
1. Щелкнув правой кнопкой мыши по экрану Lesson_08, создать новый экран Lesson_08.1&lt;br /&gt;
&lt;br /&gt;
2. Создать новые сцены (с названием 08.1 и Buttons).&lt;br /&gt;
&lt;br /&gt;
3. Скопировать все объекты из сцены 08 (экрана Lesson_08) и Buttons (экрана Lesson_08).&lt;br /&gt;
&lt;br /&gt;
4. Вставить скопированые объекты в новую сцену 08.1 и Buttons (экрана Lesson_08.1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 15.png]]&lt;br /&gt;
&lt;br /&gt;
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:&lt;br /&gt;
&lt;br /&gt;
a) заменить звук аплодисментов другим аудиофайлом, имеющимся в базе ресурсов;&lt;br /&gt;
 &lt;br /&gt;
b) в пазле изменить количество разбиваемых частей на шесть (3х2), добавить сетку, изменить перестановку ячеек на смешивание по alpha, изменить время смешивания на 500 миллисекунд;&lt;br /&gt;
 &lt;br /&gt;
c) при нажатии hint (подсказки) изменить время показа подсказки на 2 секунды, изменить время финального показа пазла на 3 секунды, установить время закрытия пазла 500 миллисекунд.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patchwork ==&lt;br /&gt;
&lt;br /&gt;
=== Создание экрана и сцены в игровом проекте ===&lt;br /&gt;
&lt;br /&gt;
1. Запустить SceneEditor.&lt;br /&gt;
&lt;br /&gt;
2. В меню Проект → Загрузить → Learning.seproj. &lt;br /&gt;
&lt;br /&gt;
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_08.1, создать экран Lesson_08.2.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_1.jpg|right]]&lt;br /&gt;
4. В экране Lesson_08.2 создать новую сцену 08, в которую (через ResourcesEditor) добавить графические ресурсы (bg_game, panel_down, btb_replay_normal) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»). В редактор ресурсов добавить графику нашего будущего Patchwork: level_17, level_17_mask.&lt;br /&gt;
&lt;br /&gt;
=== Настройка объектов ===&lt;br /&gt;
&lt;br /&gt;
1. Создадим на сцене 08 еще два объекта. Для этого нажмем правой кнопкой мыши по сцене и выберем &amp;quot;Создать объект в текущем элементе&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
2. Переименуем один из созданных объектов в Patchwork, а другой в table.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_4.jpg|right]]&lt;br /&gt;
3. Теперь будем изменять тип объектов на сцене, чтобы получить нужные нам элементы. Графические ресурсы bg_game и panel_down оставляем без изменений. Ресурсу btb_replay_normal изменяем тип на button. Объекту Patchwork меняем тип на patchwork, table изменяем на тип table.&lt;br /&gt;
&lt;br /&gt;
4. Теперь объекты нужно разместить на сцене. Обратим внимание на то, что два последних объекта которые мы добавили без графического ресурса. По умолчанию, создаваемые на сцене объекты имеют размер 100х100 пикселей. Увеличим размер таблицы по высоте до 450 пикселей и перетащим ее влево, поместив над объектом panel_down.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Кнопку поместим в левый нижний угол. Добиваемся такого расположения объектов, как показанно на рисунке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_6.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Настроим наши объекты. Для кнопки btb_replay_normal в поле &amp;quot;перейти на&amp;quot; укажите текущий экран Lesson_8.2.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_7.jpg]]&lt;br /&gt;
&lt;br /&gt;
Для таблицы измените следующие параметры&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_8.jpg]]&lt;br /&gt;
&lt;br /&gt;
Для Patchwork устанавливаем следующие настройки. Обратите внимание, что поля &amp;quot;карт.спереди&amp;quot; и &amp;quot;шаблон&amp;quot; заполняются перетаскиванием графического ресурса из редактора ресурсов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_9.jpg]]&lt;br /&gt;
&lt;br /&gt;
6. Для корректной работы вашего Patchwork необходимо, чтобы таблица находилась выше Patchwork по дереву объектов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_10.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Проверьте выполнение задачи с помощью проигрывателя сцен Viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Упражнения ===&lt;br /&gt;
&lt;br /&gt;
1. Щелкнув правой кнопкой мыши по экрану Lesson_08.2, создать новый экран Lesson_08.3&lt;br /&gt;
&lt;br /&gt;
2. Создать новую сцену с названием game.&lt;br /&gt;
&lt;br /&gt;
3. Скопировать все объекты из сцены 08 (экрана Lesson_08.2).&lt;br /&gt;
&lt;br /&gt;
4. Вставить скопированые объекты в новую сцену game (экрана Lesson_08.3).&lt;br /&gt;
&lt;br /&gt;
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:&lt;br /&gt;
&lt;br /&gt;
a) заменить картинку пэчворка и маски на другую, имеющуюся в базе ресурсов;&lt;br /&gt;
&lt;br /&gt;
b) изменить настройки кнопки рестарта таким образом, чтобы не переходить на экран Lesson_08.3, а сразу передавать пэчворку состояние mix.&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание игры «Hidden Object Game»|Урок 6]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Работа с эффектами|Урок 8]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&amp;diff=3357</id>
		<title>Настройка миниигр</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&amp;diff=3357"/>
		<updated>2013-03-05T11:58:07Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Настройка объектов, создание машин состояний */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание игры «Hidden Object Game»|Урок 6]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Работа с эффектами|Урок 8]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' изучить настройки объектов, реализующих различные минигры.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* создать уровень игры с объектом, содержащим тип механики Puzzle&lt;br /&gt;
* создать уровень игры с объектом, содержащим тип механики Patchwork &lt;br /&gt;
&lt;br /&gt;
== Puzzle ==&lt;br /&gt;
&lt;br /&gt;
=== Создание экрана и сцены в игровом проекте ===&lt;br /&gt;
&lt;br /&gt;
1. Запустить SceneEditor.&lt;br /&gt;
&lt;br /&gt;
2. В меню Проект → Загрузить → Learning.seproj. &lt;br /&gt;
&lt;br /&gt;
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_07.1, создать экран Lesson_08.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 1.png]]&lt;br /&gt;
&lt;br /&gt;
4. В экране Lesson_08 создать новые сцены 08 и Buttons, в которую (через ResourcesEditor) добавить графические ресурсы (Level_01, hint_normal в папку 05 и hint_normal, ico_R_normal2 в папку Buttons) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»).&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 2.png]]  [[Файл:08 3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Настройка объектов, создание машин состояний ===&lt;br /&gt;
	&lt;br /&gt;
1. В сцене 08 изменить название графического ресурса hint_normal на applause и в общих настройках элемента удалить саму графику через модификаторы → res.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 4.png]]&lt;br /&gt;
&lt;br /&gt;
2. Графическое изображение level_01 перевести в тип puzzle и установить такие настройки:&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 5.png]]&lt;br /&gt;
&lt;br /&gt;
3. Объект applause перевести в тип машина и прописать ему состояния on и off.&lt;br /&gt;
&lt;br /&gt;
4. В состоянии on добавить команду play (проиграть звук) и в списке команды выбрать snd (короткий звук), подгружаемый с помощью ResourcesEditor из папки ресурсов Level_08; &lt;br /&gt;
&lt;br /&gt;
[[Файл:08 6.png]]&lt;br /&gt;
&lt;br /&gt;
5. Создать новое состояние с именем off. В общих настройка свойства элемента изначально установить состояние off.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 7.png]]  [[Файл:08 8.png]]&lt;br /&gt;
&lt;br /&gt;
6. Далее перейти к сцене Buttons, перевести графические объекты hint_normal, ico_R_normal2 в тип button, в свойстве элемента установить такие настройки:&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 9.png]]  [[Файл:08 10.png]]&lt;br /&gt;
&lt;br /&gt;
''Кнопка R (переиграть)'' — кнопка, запускающая игру Puzzle сначала. В общих настройках свойства элемента устанавливаем, в какое начало должна возвращать кнопка (в нашем случае перейти на экран Lesson_08).Для данной игры, мы сделали переход на экран &amp;lt;tt&amp;gt;Lesson_08&amp;lt;/tt&amp;gt;, который запускает игру сначала. Но в дальнейшем, чтобы не переводить все объекты в начальное состояние  правильнее будет, в графе '''«изменить состояние»''' выбрать объект &amp;lt;tt&amp;gt;Level_01&amp;lt;/tt&amp;gt; и указать ему состояние &amp;lt;tt&amp;gt;mix&amp;lt;/tt&amp;gt;, которое означает, что игра возвращается в состояние перемешивания картинок, а не запускает всю игру заново.&lt;br /&gt;
	&lt;br /&gt;
7. В объекте (кнопке) hint_normal нажать правой кнопкой и выбрать изменить состояние объекта → потом выбрать объект level_01 и вписать состояние hint которое означает, что при нажатии кнопки, в качестве подсказки, игра покажет картинку в собранном виде.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 11.png]]  [[Файл:08 12.png]]&lt;br /&gt;
&lt;br /&gt;
''hint'' – кнопка, реализующая подсказку на экране поиска.&lt;br /&gt;
&lt;br /&gt;
8. Вернуться на сцену 08 к объекту  level_01 и в общих настройках свойства элемента изменить состояние объекта → выбрать объект applause и вписать состояние on.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 13.png]]&lt;br /&gt;
&lt;br /&gt;
9. Проверить выполнение задачи с помощью проигрывателя сцен Viewer.&lt;br /&gt;
&lt;br /&gt;
=== Упражнения ===&lt;br /&gt;
&lt;br /&gt;
1. Щелкнув правой кнопкой мыши по экрану Lesson_08, создать новый экран Lesson_08.1&lt;br /&gt;
&lt;br /&gt;
2. Создать новые сцены (с названием 08.1 и Buttons).&lt;br /&gt;
&lt;br /&gt;
3. Скопировать все объекты из сцены 08 (экрана Lesson_08) и Buttons (экрана Lesson_08).&lt;br /&gt;
&lt;br /&gt;
4. Вставить скопированые объекты в новую сцену 08.1 и Buttons (экрана Lesson_08.1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 15.png]]&lt;br /&gt;
&lt;br /&gt;
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:&lt;br /&gt;
&lt;br /&gt;
a) заменить звук аплодисментов другим аудиофайлом, имеющимся в базе ресурсов;&lt;br /&gt;
 &lt;br /&gt;
b) в пазле изменить количество разбиваемых частей на шесть (3х2), добавить сетку, изменить перестановку ячеек на смешивание по alpha, изменить время смешивания на 500 миллисекунд;&lt;br /&gt;
 &lt;br /&gt;
c) при нажатии hint (подсказки) изменить время показа подсказки на 2 секунды, изменить время финального показа пазла на 3 секунды, установить время закрытия пазла 500 миллисекунд.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patchwork ==&lt;br /&gt;
&lt;br /&gt;
=== Создание экрана и сцены в игровом проекте ===&lt;br /&gt;
&lt;br /&gt;
1. Запустить SceneEditor.&lt;br /&gt;
&lt;br /&gt;
2. В меню Проект → Загрузить → Learning.seproj. &lt;br /&gt;
&lt;br /&gt;
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_08.1, создать экран Lesson_08.2.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_1.jpg|right]]&lt;br /&gt;
4. В экране Lesson_08.2 создать новую сцену 08, в которую (через ResourcesEditor) добавить графические ресурсы (bg_game, panel_down, btb_replay_normal) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»). В редактор ресурсов добавить графику нашего будущего Patchwork: level_17, level_17_mask.&lt;br /&gt;
&lt;br /&gt;
=== Настройка объектов ===&lt;br /&gt;
&lt;br /&gt;
1. Создадим на сцене 08 еще два объекта. Для этого нажмем правой кнопкой мыши по сцене и выберем &amp;quot;Создать объект в текущем элементе&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
2. Переименуем один из созданных объектов в Patchwork, а другой в table.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_4.jpg|right]]&lt;br /&gt;
3. Теперь будем изменять тип объектов на сцене, чтобы получить нужные нам элементы. Графические ресурсы bg_game и panel_down оставляем без изменений. Ресурсу btb_replay_normal изменяем тип на button. Объекту Patchwork меняем тип на patchwork, table изменяем на тип table.&lt;br /&gt;
&lt;br /&gt;
4. Теперь объекты нужно разместить на сцене. Обратим внимание на то, что два последних объекта которые мы добавили без графического ресурса. По умолчанию, создаваемые на сцене объекты имеют размер 100х100 пикселей. Увеличим размер таблицы по высоте до 450 пикселей и перетащим ее влево, поместив над объектом panel_down.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Кнопку поместим в левый нижний угол. Добиваемся такого расположения объектов, как показанно на рисунке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_6.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Настроим наши объекты. Для кнопки btb_replay_normal в поле &amp;quot;перейти на&amp;quot; укажите текущий экран Lesson_8.2.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_7.jpg]]&lt;br /&gt;
&lt;br /&gt;
Для таблицы измените следующие параметры&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_8.jpg]]&lt;br /&gt;
&lt;br /&gt;
Для Patchwork устанавливаем следующие настройки. Обратите внимание, что поля &amp;quot;карт.спереди&amp;quot; и &amp;quot;шаблон&amp;quot; заполняются перетаскиванием графического ресурса из редактора ресурсов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_9.jpg]]&lt;br /&gt;
&lt;br /&gt;
6. Для корректной работы вашего Patchwork необходимо, чтобы таблица находилась выше Patchwork по дереву объектов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_10.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Проверьте выполнение задачи с помощью проигрывателя сцен Viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Упражнения ===&lt;br /&gt;
&lt;br /&gt;
1. Щелкнув правой кнопкой мыши по экрану Lesson_08.2, создать новый экран Lesson_08.3&lt;br /&gt;
&lt;br /&gt;
2. Создать новую сцену с названием game.&lt;br /&gt;
&lt;br /&gt;
3. Скопировать все объекты из сцены 08 (экрана Lesson_08.2).&lt;br /&gt;
&lt;br /&gt;
4. Вставить скопированые объекты в новую сцену game (экрана Lesson_08.3).&lt;br /&gt;
&lt;br /&gt;
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:&lt;br /&gt;
&lt;br /&gt;
a) заменить картинку пэчворка и маски на другую, имеющуюся в базе ресурсов;&lt;br /&gt;
&lt;br /&gt;
b) изменить настройки кнопки рестарта таким образом, чтобы не переходить на экран Lesson_08.3, а сразу передавать пэчворку состояние mix.&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание игры «Hidden Object Game»|Урок 6]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Работа с эффектами|Урок 8]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&amp;diff=3356</id>
		<title>Настройка миниигр</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&amp;diff=3356"/>
		<updated>2013-03-05T11:54:34Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Настройка объектов, создание машин состояний */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание игры «Hidden Object Game»|Урок 6]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Работа с эффектами|Урок 8]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' изучить настройки объектов, реализующих различные минигры.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* создать уровень игры с объектом, содержащим тип механики Puzzle&lt;br /&gt;
* создать уровень игры с объектом, содержащим тип механики Patchwork &lt;br /&gt;
&lt;br /&gt;
== Puzzle ==&lt;br /&gt;
&lt;br /&gt;
=== Создание экрана и сцены в игровом проекте ===&lt;br /&gt;
&lt;br /&gt;
1. Запустить SceneEditor.&lt;br /&gt;
&lt;br /&gt;
2. В меню Проект → Загрузить → Learning.seproj. &lt;br /&gt;
&lt;br /&gt;
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_07.1, создать экран Lesson_08.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 1.png]]&lt;br /&gt;
&lt;br /&gt;
4. В экране Lesson_08 создать новые сцены 08 и Buttons, в которую (через ResourcesEditor) добавить графические ресурсы (Level_01, hint_normal в папку 05 и hint_normal, ico_R_normal2 в папку Buttons) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»).&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 2.png]]  [[Файл:08 3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Настройка объектов, создание машин состояний ===&lt;br /&gt;
	&lt;br /&gt;
1. В сцене 08 изменить название графического ресурса hint_normal на applause и в общих настройках элемента удалить саму графику через модификаторы → res.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 4.png]]&lt;br /&gt;
&lt;br /&gt;
2. Графическое изображение level_01 перевести в тип puzzle и установить такие настройки:&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 5.png]]&lt;br /&gt;
&lt;br /&gt;
3. Объект applause перевести в тип машина и прописать ему состояния on и off.&lt;br /&gt;
&lt;br /&gt;
4. В состоянии on добавить команду play (проиграть звук) и в списке команды выбрать snd (короткий звук), подгружаемый с помощью ResourcesEditor из папки ресурсов Level_08; &lt;br /&gt;
&lt;br /&gt;
[[Файл:08 6.png]]&lt;br /&gt;
&lt;br /&gt;
5. Создать новое состояние с именем off. В общих настройка свойства элемента изначально установить состояние off.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 7.png]]  [[Файл:08 8.png]]&lt;br /&gt;
&lt;br /&gt;
6. Далее перейти к сцене Buttons, перевести графические объекты hint_normal, ico_R_normal2 в тип button, в свойстве элемента установить такие настройки:&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 9.png]]  [[Файл:08 10.png]]&lt;br /&gt;
&lt;br /&gt;
''Кнопка R (переиграть)'' — кнопка, запускающая игру Puzzle сначала. В общих настройках свойства элемента устанавливаем, в какое начало должна возвращать кнопка (в нашем случае перейти на экран Lesson_08).Для данной игры, мы сделали переход на экран &amp;lt;tt&amp;gt;Lesson_08&amp;lt;/tt&amp;gt;, который запускает игру сначала. Но в дальнейшем, когда проекты будут содержать несколько игр, правильнее будет в графе '''«изменить состояние»''' объекта &amp;lt;tt&amp;gt;Level_01&amp;lt;/tt&amp;gt; поставить состояние &amp;lt;tt&amp;gt;mix&amp;lt;/tt&amp;gt;, которое означает, что игра возвращается в состояние перемешивания картинок, а не запускает всю игру заново.&lt;br /&gt;
	&lt;br /&gt;
7. В объекте (кнопке) hint_normal нажать правой кнопкой и выбрать изменить состояние объекта → потом выбрать объект level_01 и вписать состояние hint которое означает, что при нажатии кнопки, в качестве подсказки, игра покажет картинку в собранном виде.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 11.png]]  [[Файл:08 12.png]]&lt;br /&gt;
&lt;br /&gt;
''hint'' – кнопка, реализующая подсказку на экране поиска.&lt;br /&gt;
&lt;br /&gt;
8. Вернуться на сцену 08 к объекту  level_01 и в общих настройках свойства элемента изменить состояние объекта → выбрать объект applause и вписать состояние on.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 13.png]]&lt;br /&gt;
&lt;br /&gt;
9. Проверить выполнение задачи с помощью проигрывателя сцен Viewer.&lt;br /&gt;
&lt;br /&gt;
=== Упражнения ===&lt;br /&gt;
&lt;br /&gt;
1. Щелкнув правой кнопкой мыши по экрану Lesson_08, создать новый экран Lesson_08.1&lt;br /&gt;
&lt;br /&gt;
2. Создать новые сцены (с названием 08.1 и Buttons).&lt;br /&gt;
&lt;br /&gt;
3. Скопировать все объекты из сцены 08 (экрана Lesson_08) и Buttons (экрана Lesson_08).&lt;br /&gt;
&lt;br /&gt;
4. Вставить скопированые объекты в новую сцену 08.1 и Buttons (экрана Lesson_08.1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 15.png]]&lt;br /&gt;
&lt;br /&gt;
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:&lt;br /&gt;
&lt;br /&gt;
a) заменить звук аплодисментов другим аудиофайлом, имеющимся в базе ресурсов;&lt;br /&gt;
 &lt;br /&gt;
b) в пазле изменить количество разбиваемых частей на шесть (3х2), добавить сетку, изменить перестановку ячеек на смешивание по alpha, изменить время смешивания на 500 миллисекунд;&lt;br /&gt;
 &lt;br /&gt;
c) при нажатии hint (подсказки) изменить время показа подсказки на 2 секунды, изменить время финального показа пазла на 3 секунды, установить время закрытия пазла 500 миллисекунд.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patchwork ==&lt;br /&gt;
&lt;br /&gt;
=== Создание экрана и сцены в игровом проекте ===&lt;br /&gt;
&lt;br /&gt;
1. Запустить SceneEditor.&lt;br /&gt;
&lt;br /&gt;
2. В меню Проект → Загрузить → Learning.seproj. &lt;br /&gt;
&lt;br /&gt;
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_08.1, создать экран Lesson_08.2.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_1.jpg|right]]&lt;br /&gt;
4. В экране Lesson_08.2 создать новую сцену 08, в которую (через ResourcesEditor) добавить графические ресурсы (bg_game, panel_down, btb_replay_normal) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»). В редактор ресурсов добавить графику нашего будущего Patchwork: level_17, level_17_mask.&lt;br /&gt;
&lt;br /&gt;
=== Настройка объектов ===&lt;br /&gt;
&lt;br /&gt;
1. Создадим на сцене 08 еще два объекта. Для этого нажмем правой кнопкой мыши по сцене и выберем &amp;quot;Создать объект в текущем элементе&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
2. Переименуем один из созданных объектов в Patchwork, а другой в table.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_4.jpg|right]]&lt;br /&gt;
3. Теперь будем изменять тип объектов на сцене, чтобы получить нужные нам элементы. Графические ресурсы bg_game и panel_down оставляем без изменений. Ресурсу btb_replay_normal изменяем тип на button. Объекту Patchwork меняем тип на patchwork, table изменяем на тип table.&lt;br /&gt;
&lt;br /&gt;
4. Теперь объекты нужно разместить на сцене. Обратим внимание на то, что два последних объекта которые мы добавили без графического ресурса. По умолчанию, создаваемые на сцене объекты имеют размер 100х100 пикселей. Увеличим размер таблицы по высоте до 450 пикселей и перетащим ее влево, поместив над объектом panel_down.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Кнопку поместим в левый нижний угол. Добиваемся такого расположения объектов, как показанно на рисунке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_6.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Настроим наши объекты. Для кнопки btb_replay_normal в поле &amp;quot;перейти на&amp;quot; укажите текущий экран Lesson_8.2.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_7.jpg]]&lt;br /&gt;
&lt;br /&gt;
Для таблицы измените следующие параметры&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_8.jpg]]&lt;br /&gt;
&lt;br /&gt;
Для Patchwork устанавливаем следующие настройки. Обратите внимание, что поля &amp;quot;карт.спереди&amp;quot; и &amp;quot;шаблон&amp;quot; заполняются перетаскиванием графического ресурса из редактора ресурсов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_9.jpg]]&lt;br /&gt;
&lt;br /&gt;
6. Для корректной работы вашего Patchwork необходимо, чтобы таблица находилась выше Patchwork по дереву объектов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_10.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Проверьте выполнение задачи с помощью проигрывателя сцен Viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Упражнения ===&lt;br /&gt;
&lt;br /&gt;
1. Щелкнув правой кнопкой мыши по экрану Lesson_08.2, создать новый экран Lesson_08.3&lt;br /&gt;
&lt;br /&gt;
2. Создать новую сцену с названием game.&lt;br /&gt;
&lt;br /&gt;
3. Скопировать все объекты из сцены 08 (экрана Lesson_08.2).&lt;br /&gt;
&lt;br /&gt;
4. Вставить скопированые объекты в новую сцену game (экрана Lesson_08.3).&lt;br /&gt;
&lt;br /&gt;
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:&lt;br /&gt;
&lt;br /&gt;
a) заменить картинку пэчворка и маски на другую, имеющуюся в базе ресурсов;&lt;br /&gt;
&lt;br /&gt;
b) изменить настройки кнопки рестарта таким образом, чтобы не переходить на экран Lesson_08.3, а сразу передавать пэчворку состояние mix.&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание игры «Hidden Object Game»|Урок 6]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Работа с эффектами|Урок 8]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&amp;diff=3355</id>
		<title>Настройка миниигр</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%B8%D0%B3%D1%80&amp;diff=3355"/>
		<updated>2013-03-05T11:24:17Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Настройка объектов, создание машин состояний */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание игры «Hidden Object Game»|Урок 6]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Работа с эффектами|Урок 8]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' изучить настройки объектов, реализующих различные минигры.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* создать уровень игры с объектом, содержащим тип механики Puzzle&lt;br /&gt;
* создать уровень игры с объектом, содержащим тип механики Patchwork &lt;br /&gt;
&lt;br /&gt;
== Puzzle ==&lt;br /&gt;
&lt;br /&gt;
=== Создание экрана и сцены в игровом проекте ===&lt;br /&gt;
&lt;br /&gt;
1. Запустить SceneEditor.&lt;br /&gt;
&lt;br /&gt;
2. В меню Проект → Загрузить → Learning.seproj. &lt;br /&gt;
&lt;br /&gt;
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_07.1, создать экран Lesson_08.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 1.png]]&lt;br /&gt;
&lt;br /&gt;
4. В экране Lesson_08 создать новые сцены 08 и Buttons, в которую (через ResourcesEditor) добавить графические ресурсы (Level_01, hint_normal в папку 05 и hint_normal, ico_R_normal2 в папку Buttons) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»).&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 2.png]]  [[Файл:08 3.png]]&lt;br /&gt;
&lt;br /&gt;
=== Настройка объектов, создание машин состояний ===&lt;br /&gt;
	&lt;br /&gt;
1. В сцене 08 изменить название графического ресурса hint_normal на applause и в общих настройках элемента удалить саму графику через модификаторы → res.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 4.png]]&lt;br /&gt;
&lt;br /&gt;
2. Графическое изображение level_01 перевести в тип puzzle и установить такие настройки:&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 5.png]]&lt;br /&gt;
&lt;br /&gt;
3. Объект applause перевести в тип машина и прописать ему состояния on и off.&lt;br /&gt;
&lt;br /&gt;
4. В состоянии on добавить команду play (проиграть звук) и в списке команды выбрать snd (короткий звук), подгружаемый с помощью ResourcesEditor из папки ресурсов Level_08; &lt;br /&gt;
&lt;br /&gt;
[[Файл:08 6.png]]&lt;br /&gt;
&lt;br /&gt;
5. Создать новое состояние с именем off. В общих настройка свойства элемента изначально установить состояние off.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 7.png]]  [[Файл:08 8.png]]&lt;br /&gt;
&lt;br /&gt;
6. Далее перейти к сцене Buttons, перевести графические объекты hint_normal, ico_R_normal2 в тип button, в свойстве элемента установить такие настройки:&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 9.png]]  [[Файл:08 10.png]]&lt;br /&gt;
&lt;br /&gt;
''Кнопка R (переиграть)'' — кнопка, запускающая игру Puzzle сначала. В общих настройках свойства элемента устанавливаем, в какое начало должна возвращать кнопка (в нашем случае перейти на экран Lesson_08).Для данной игры, мы сделали переход на экран &amp;lt;tt&amp;gt;Lesson_08&amp;lt;/tt&amp;gt;, который запускает игру сначала. Но в дальнейшем, когда проекты будут содержать несколько игр, правильнее будет в графе '''«изменить состояние»''' объекта &amp;lt;tt&amp;gt;Level_01&amp;lt;/tt&amp;gt; поставить состояние &amp;lt;tt&amp;gt;mix&amp;lt;/tt&amp;gt;, которое означает, что игра возвращается в состояние перемешивания картинок, а не запускает всю игру заново.&lt;br /&gt;
	&lt;br /&gt;
7. В объекте (кнопке) hint_normal нажать правой кнопкой и выбрать изменить состояние объекта → потом выбрать объект level_01 и вписать состояние hint.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 11.png]]  [[Файл:08 12.png]]&lt;br /&gt;
&lt;br /&gt;
''hint'' – кнопка, реализующая подсказку на экране поиска.&lt;br /&gt;
&lt;br /&gt;
8. Вернуться на сцену 08 к объекту  level_01 и в общих настройках свойства элемента изменить состояние объекта → выбрать объект applause и вписать состояние on.&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 13.png]]&lt;br /&gt;
&lt;br /&gt;
9. Проверить выполнение задачи с помощью проигрывателя сцен Viewer.&lt;br /&gt;
&lt;br /&gt;
=== Упражнения ===&lt;br /&gt;
&lt;br /&gt;
1. Щелкнув правой кнопкой мыши по экрану Lesson_08, создать новый экран Lesson_08.1&lt;br /&gt;
&lt;br /&gt;
2. Создать новые сцены (с названием 08.1 и Buttons).&lt;br /&gt;
&lt;br /&gt;
3. Скопировать все объекты из сцены 08 (экрана Lesson_08) и Buttons (экрана Lesson_08).&lt;br /&gt;
&lt;br /&gt;
4. Вставить скопированые объекты в новую сцену 08.1 и Buttons (экрана Lesson_08.1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:08 15.png]]&lt;br /&gt;
&lt;br /&gt;
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:&lt;br /&gt;
&lt;br /&gt;
a) заменить звук аплодисментов другим аудиофайлом, имеющимся в базе ресурсов;&lt;br /&gt;
 &lt;br /&gt;
b) в пазле изменить количество разбиваемых частей на шесть (3х2), добавить сетку, изменить перестановку ячеек на смешивание по alpha, изменить время смешивания на 500 миллисекунд;&lt;br /&gt;
 &lt;br /&gt;
c) при нажатии hint (подсказки) изменить время показа подсказки на 2 секунды, изменить время финального показа пазла на 3 секунды, установить время закрытия пазла 500 миллисекунд.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patchwork ==&lt;br /&gt;
&lt;br /&gt;
=== Создание экрана и сцены в игровом проекте ===&lt;br /&gt;
&lt;br /&gt;
1. Запустить SceneEditor.&lt;br /&gt;
&lt;br /&gt;
2. В меню Проект → Загрузить → Learning.seproj. &lt;br /&gt;
&lt;br /&gt;
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_08.1, создать экран Lesson_08.2.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_1.jpg|right]]&lt;br /&gt;
4. В экране Lesson_08.2 создать новую сцену 08, в которую (через ResourcesEditor) добавить графические ресурсы (bg_game, panel_down, btb_replay_normal) из папки Sources\Lesson_08 (см. подготовка к работе «Создание проекта»). В редактор ресурсов добавить графику нашего будущего Patchwork: level_17, level_17_mask.&lt;br /&gt;
&lt;br /&gt;
=== Настройка объектов ===&lt;br /&gt;
&lt;br /&gt;
1. Создадим на сцене 08 еще два объекта. Для этого нажмем правой кнопкой мыши по сцене и выберем &amp;quot;Создать объект в текущем элементе&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_2.jpg]]&lt;br /&gt;
&lt;br /&gt;
2. Переименуем один из созданных объектов в Patchwork, а другой в table.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_3.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_4.jpg|right]]&lt;br /&gt;
3. Теперь будем изменять тип объектов на сцене, чтобы получить нужные нам элементы. Графические ресурсы bg_game и panel_down оставляем без изменений. Ресурсу btb_replay_normal изменяем тип на button. Объекту Patchwork меняем тип на patchwork, table изменяем на тип table.&lt;br /&gt;
&lt;br /&gt;
4. Теперь объекты нужно разместить на сцене. Обратим внимание на то, что два последних объекта которые мы добавили без графического ресурса. По умолчанию, создаваемые на сцене объекты имеют размер 100х100 пикселей. Увеличим размер таблицы по высоте до 450 пикселей и перетащим ее влево, поместив над объектом panel_down.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Кнопку поместим в левый нижний угол. Добиваемся такого расположения объектов, как показанно на рисунке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_6.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Настроим наши объекты. Для кнопки btb_replay_normal в поле &amp;quot;перейти на&amp;quot; укажите текущий экран Lesson_8.2.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_7.jpg]]&lt;br /&gt;
&lt;br /&gt;
Для таблицы измените следующие параметры&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_8.jpg]]&lt;br /&gt;
&lt;br /&gt;
Для Patchwork устанавливаем следующие настройки. Обратите внимание, что поля &amp;quot;карт.спереди&amp;quot; и &amp;quot;шаблон&amp;quot; заполняются перетаскиванием графического ресурса из редактора ресурсов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_9.jpg]]&lt;br /&gt;
&lt;br /&gt;
6. Для корректной работы вашего Patchwork необходимо, чтобы таблица находилась выше Patchwork по дереву объектов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Lesson8_10.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. Проверьте выполнение задачи с помощью проигрывателя сцен Viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Упражнения ===&lt;br /&gt;
&lt;br /&gt;
1. Щелкнув правой кнопкой мыши по экрану Lesson_08.2, создать новый экран Lesson_08.3&lt;br /&gt;
&lt;br /&gt;
2. Создать новую сцену с названием game.&lt;br /&gt;
&lt;br /&gt;
3. Скопировать все объекты из сцены 08 (экрана Lesson_08.2).&lt;br /&gt;
&lt;br /&gt;
4. Вставить скопированые объекты в новую сцену game (экрана Lesson_08.3).&lt;br /&gt;
&lt;br /&gt;
5. В новой сцене постарайтесь сами прописать состояния и команды в измененную задачу. Сделайте так, чтобы:&lt;br /&gt;
&lt;br /&gt;
a) заменить картинку пэчворка и маски на другую, имеющуюся в базе ресурсов;&lt;br /&gt;
&lt;br /&gt;
b) изменить настройки кнопки рестарта таким образом, чтобы не переходить на экран Lesson_08.3, а сразу передавать пэчворку состояние mix.&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание игры «Hidden Object Game»|Урок 6]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Работа с эффектами|Урок 8]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%94%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD:_%D0%B6%D1%83%D1%87%D0%BA%D0%B8,_%D0%BA%D0%BB%D1%8E%D1%87%D0%B8_%D0%B8_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%B5_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B5&amp;diff=3354</id>
		<title>Движение машин: жучки, ключи и многое другое</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%94%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD:_%D0%B6%D1%83%D1%87%D0%BA%D0%B8,_%D0%BA%D0%BB%D1%8E%D1%87%D0%B8_%D0%B8_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%B5_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B5&amp;diff=3354"/>
		<updated>2013-03-05T11:05:15Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Вращение вокруг пивота */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Редактор текстовых ресурсов|Урок 6]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' изучить процессы движения и способы взаимодействия машин.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* реализовать разными методами &amp;quot;ход конем&amp;quot;;&lt;br /&gt;
* организовать циклическое движение по квадрату;&lt;br /&gt;
* разобраться с понятием точки пивота;&lt;br /&gt;
* научиться согласовывать поступательное и вращательное движение;&lt;br /&gt;
* рассмотреть способ применения одного предмета на другой.&lt;br /&gt;
&lt;br /&gt;
== Процессы и движение ==&lt;br /&gt;
&lt;br /&gt;
До сих пор мы ограничивались только одной командой процессов - '''wait''' (ожидание).&lt;br /&gt;
В этом уроке мы рассмотрим другие процессы. Существуют следующие команды движения (изменения объекта):&lt;br /&gt;
* '''move''' - движение по прямой&lt;br /&gt;
* '''rot'''  - вращение &lt;br /&gt;
* '''scale''' - изменение размера&lt;br /&gt;
* '''alpha''' - изменение прозрачности&lt;br /&gt;
* '''phys''' - движение в силовом поле.&lt;br /&gt;
 &lt;br /&gt;
В каждой команде достаточно много параметров. Например, можно сдвинуться (move)&lt;br /&gt;
по горизонтали на '''dx''' пикселей за время '''t'''. Вместо времени можно указать скорость  '''v''' в пикселях в секунду.&lt;br /&gt;
Можно двигаться в определенную целевую точку с координатами ('''tx''', '''ty''') и т.д.&lt;br /&gt;
&lt;br /&gt;
=== Ход конем ===&lt;br /&gt;
&lt;br /&gt;
[[файл:lady_bug_64.png|right]]&lt;br /&gt;
Рассмотрим простой пример в котором объект движется сначала вверх на 100 пикселей, а затем вправо на 200.&lt;br /&gt;
В качестве такого объекта будем использовать ladybug (божья коровка или для краткости жучок), &lt;br /&gt;
картинку которой можно найти в редакторе ресурсов в папке этого урока.&lt;br /&gt;
Как обычно, перетаскиваем её на сцену, переименовываем и превращаем в машину состояний.&lt;br /&gt;
Организуем сначала движние нашего жучка при помощи трёх состояний:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_bug1.png]] &lt;br /&gt;
&lt;br /&gt;
Первое, стартовое состояние является запускающим. Если кликнуть на жучка, то он начнет своё движение.&lt;br /&gt;
Когда перемещение по вертикали заканчивается (состояние up), жучок переходит в третье состояние (right), в котором движется вправо.&lt;br /&gt;
Закончив движение, он возвращается в стартовое состояние и ждет очередного клика.&lt;br /&gt;
&lt;br /&gt;
Координатная ось Y (вертикальная) на сцене направлена вниз, а ось X (горизонтальная) -- вправо.&lt;br /&gt;
Поэтому, чтобы жучок начал двигаться вверх, его смещение должно быть отрицательным.&lt;br /&gt;
В нашем случае это dy=-100. Эти 100 пикселей объект должен пройти за одну секунду (t=1000).&lt;br /&gt;
В конце выполнения команды move происходит переход в следующее состояние, имя которого задается в поле &amp;quot;'''go'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
При движении вправо, происходит смещение на 200 пикселей.&lt;br /&gt;
Чтобы скорость движения вверх и вправо была постоянной, необходимо соответственно увеличить&lt;br /&gt;
время движения (t=2000).&lt;br /&gt;
&lt;br /&gt;
Точно такое же движение можно организовать в рамках одного, а не двух состояний.&lt;br /&gt;
Поместите на сцену еще одного жучка, дайте ему другое имя и задайте следующую машину состояний:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_bug2.png]]&lt;br /&gt;
&lt;br /&gt;
Команды move в состоянии way выполняются последовательно.&lt;br /&gt;
Сначала отрабатывает нулевой move, а затем первый.&lt;br /&gt;
&lt;br /&gt;
Протестируйте получившийся результат. Оба жучка должны двигаться одинаковым образом.&lt;br /&gt;
Не забывайте при тестировании включать отладочную информацию о текущих состояниях.&lt;br /&gt;
&lt;br /&gt;
=== Последовательно и параллельно ===&lt;br /&gt;
&lt;br /&gt;
И так, в рамках данного состояния все команды процессов с одинаковым названием выполняются '''последовательно'''.&lt;br /&gt;
При этом команды с разными именами выполняются '''параллельно'''.&lt;br /&gt;
&lt;br /&gt;
[[файл:Def_procesess1.png|right]]&lt;br /&gt;
Пусть в состянии есть несколько команд move и несколько команд rot (вращения):&lt;br /&gt;
* move0 move1 rot0 move2 rot1 rot2&lt;br /&gt;
Независимо от их чередования, они выстраиваются в параллельные списки процессов:&lt;br /&gt;
* move0   rot0&lt;br /&gt;
* move1   rot1&lt;br /&gt;
* move2   rot2&lt;br /&gt;
Эти списки начинают одновременно выполняться сверху вниз: &lt;br /&gt;
отрабатывают команды move и одновременно с ними комананды rot.&lt;br /&gt;
&lt;br /&gt;
Заставим нашего жучка при совершении хода конем поворачиваться на 360 градусов.&lt;br /&gt;
Для этого поместим третью машину со следующими состояниями:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_bug3.png]]&lt;br /&gt;
&lt;br /&gt;
Запустите проект во вьювере. &lt;br /&gt;
Одновременно с выполнением двух команд move будет выполняться одна команда rot.&lt;br /&gt;
Время выполнения rot равно суммарному времени двух команд move (t=3000=1000+2000).&lt;br /&gt;
В результате, к концу движения, жучок поворачивается на da=360 градусов ('''da''' - изменение угла).&lt;br /&gt;
&lt;br /&gt;
Переход в следующее состояние '''go''' в данном случае можно было бы поставить не в команду '''rot''',&lt;br /&gt;
а в последнюю команду '''move'''. Однако приведенное решение лучше, так как&lt;br /&gt;
гарантирует, что переход произойдет только, когда жучок полностью развернется.&lt;br /&gt;
Хотя суммарное время move совпадает с временем rot, реальное компьютерное время&lt;br /&gt;
выполнения этих команд может немного отличаться. В результате, если выйти из&lt;br /&gt;
состояния по окончанию движения, можно получить не до конца развернувшегося жучка.&lt;br /&gt;
&lt;br /&gt;
=== Циклическое движение ===&lt;br /&gt;
&lt;br /&gt;
С командами движения, также как и с командой ожидания, можно использовать циклы.&lt;br /&gt;
Например, заставим (уже четвертого) жучка при клике два раз оббегать стороны квадрата.&lt;br /&gt;
Это можно сделать при помощи следующей машины:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_bug4.png]]&lt;br /&gt;
&lt;br /&gt;
Четыре команды move выполняются одна за одной.&lt;br /&gt;
Затем вьювер натыкается на параметр loop=1 и еще раз выполняет&lt;br /&gt;
это движение с самого начала. Последняя команда move служит для перехода в стартовое состояние&lt;br /&gt;
ожидания клика. &lt;br /&gt;
&lt;br /&gt;
Заметим, что нельзя было для перехода использовать '''wait'''.&lt;br /&gt;
Она, как и остальные команды процессов, запустилась бы параллельно с командами&lt;br /&gt;
и сработала бы сразу. В результате ни какого движения не получилось бы!&lt;br /&gt;
&lt;br /&gt;
Если параметр loop=-1, то движение будет бесконечным. &lt;br /&gt;
Этого же можно было добиться, поставив вместо loop=-1 параметр go с переходом в это же состояние (перезапустить состояние). &lt;br /&gt;
&lt;br /&gt;
=== Управление командами ===&lt;br /&gt;
&lt;br /&gt;
Кроме команды зацикливания данного процесса, можно из одних команд запускать другие (начинать процессы другого типа). Например, пусть жучок движется вправо в течении 1 секунды и вращается 2 секунды.&lt;br /&gt;
Команда move закончится раньше команды rot.&lt;br /&gt;
Пусть затем, закончив полный оборот (на уже остановившемся объекте), он начинает снова двигаться вправо. Реализуется это так:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_move_rot.png]]&lt;br /&gt;
&lt;br /&gt;
Команда '''rot''' зациклена (loop=-1). Кроме этого, она имеет параметр move=0&lt;br /&gt;
в котором задается номер команды move которую надо запустить на выполнение после окончания вращения.&lt;br /&gt;
&lt;br /&gt;
Вызов одних команд процессов из других очень мощный, но одновременно и опасный инструмент. &lt;br /&gt;
Множественные вызовы различных команд превращают состояние в спагетти переходов,&lt;br /&gt;
логику которого часто сложно понять. Более того, иногда можно получить зависание вьювера&lt;br /&gt;
при неудачной перекрестной ссылке двух команд друг на друга.&lt;br /&gt;
По этой причине запрещено вызывать из данной команды другие команды этого же типа&lt;br /&gt;
(из rot вызывать rot и т.д.). Однако это, к сожалению, не снимает полностью проблему зависания.&lt;br /&gt;
Так, что готовьтесь...&lt;br /&gt;
&lt;br /&gt;
=== Вращение вокруг пивота ===&lt;br /&gt;
&lt;br /&gt;
При вращении (команда '''rot''') машина вращается вокруг, так называемой,&lt;br /&gt;
'''точки пивота''' (''pivot'' - штырь, болт; опорная точка).&lt;br /&gt;
В примерах выше эта точка находилась в центре картинки.&lt;br /&gt;
Изменим теперь её положение и посмотрим к какому эффекту это приведет.&lt;br /&gt;
&lt;br /&gt;
Откроем редактор ресурсов и в папке этого урока найдем солнышко. &lt;br /&gt;
Сделаем четыре действия:&lt;br /&gt;
# Кликнем на имя солнышка (sun_1) в дереве на левой панели&lt;br /&gt;
# Под этой панелью поставим галочку в чекбоксе ''Edit pivot''.&lt;br /&gt;
# Схватимся мышкой за красный крестик в центре солнышка на правой панели и перетащим этот крестик влево.&lt;br /&gt;
# Уберем галочку в чекбоксе ''Edit pivot'':&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_pivot.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Теперь перетащим солнышко на сцену этого урока (лучше для него создать отдельный экран).&lt;br /&gt;
Уменьшим его размеры модификаторами scale x и scale y, поставив там значение 0.5.&lt;br /&gt;
Превратим солнышко в такую машину:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_pivot2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сохранив проект и запустив вьювер, мы увидим, что солнышко начало вращаться &lt;br /&gt;
по окружности. Машина по прежнему вращается вокруг точки пивота.&lt;br /&gt;
Однако теперь эта точка смещена в центр окружности.&lt;br /&gt;
&lt;br /&gt;
В качестве упражнения попробуйте организовать вращение, подобное вращению Земли и Луны&lt;br /&gt;
(Земля вращается по окружности, а Луна вращается по окружности меньшего радиуса вокруг Земли).&lt;br /&gt;
Для этого Вам потребуется &amp;quot;Луну&amp;quot; сделать подобъектом &amp;quot;Земли&amp;quot; и правильно выставить&lt;br /&gt;
положение &amp;quot;Луны&amp;quot; относительно &amp;quot;Земли&amp;quot;. &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
[[файл:Ok.png|right|32px]]&lt;br /&gt;
'''Внимание!''' Если объект помещен в группу, то координаты его пивота изменяются относительно точки пивота того объекта, чьим подобъектом он является. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Поэкспериментируйте. Можно использовать следующие картинки:&lt;br /&gt;
&lt;br /&gt;
[[файл:eath.png]]  [[файл:moon.png]]&lt;br /&gt;
&lt;br /&gt;
== Как ездят кареты ==&lt;br /&gt;
&lt;br /&gt;
=== Подготовка ===&lt;br /&gt;
&lt;br /&gt;
Если Вы уже организовали движение Земли и Луны, то сложное движение,&lt;br /&gt;
возникающие при наличие подобъектов, не должно вызывать затруднений.&lt;br /&gt;
В этом примере мы покажем как согласовывать поступательное и &lt;br /&gt;
вращательное движение на примере кареты с двумя колёсами.&lt;br /&gt;
Разместим все три объекта (карету и её два колеса) на сцене&lt;br /&gt;
и сделаем колеса подобъектами кареты.&lt;br /&gt;
Превратим их все в машины состояний:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_kareta1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пусть при клике на карету она проезжает некоторое расстояние по горизонтали и останавливается.&lt;br /&gt;
Сделайте самостоятельно такую машину и протестируйте её.&lt;br /&gt;
Карета должна перемещаться, а  колеса, являясь её подобъектами, двигаться вместе с ней.&lt;br /&gt;
Однако, они пока не вращаются. Если в ресурсах не окажется колеса и кареты,&lt;br /&gt;
можно загрузить их непосредственно из этого урока:&lt;br /&gt;
&lt;br /&gt;
[[файл:kareta.png]] [[файл:koleso.png]]&lt;br /&gt;
&lt;br /&gt;
=== Немного математики ===&lt;br /&gt;
&lt;br /&gt;
Разберемся как согласовать ''поступательную'' скорость кареты и ''угловую'' скорость вращения колес. Последняя должна быть подобрана таким образом, чтобы движение &lt;br /&gt;
выглядело естественным (колеса не проскальзывали вперед или назад).&lt;br /&gt;
&lt;br /&gt;
Посмотрите на формулы возле рисунка кареты. В первой из них приводится связь длины окружности L колеса и его радиуса r. Ниже - коэффициент 57.3 перевода числа пи из углов в радианы (пи - это 3.1415.. в радианах или 180 градусов). Во второй колонке даны определения поступательной и угловой скорости (изменение расстояния или угла за некоторое время t).  &lt;br /&gt;
Наконец, в третей колонке дана ключевая для нашей задачи формула, связывающая радиус '''r''', линейную '''v''' и угловую скорости '''w'''. Попробуйте её самостоятельно вывести, из предположения, что за одно и тоже время длина смещения кареты должна совпадать с длиной окружности обода колеса.&lt;br /&gt;
При этом поступательная скорость '''v''' измеряется в пикселях за секунду, а угловая скорость '''w''' в градусах за секунду.&lt;br /&gt;
&lt;br /&gt;
=== Машины ===&lt;br /&gt;
&lt;br /&gt;
Запрограммируем теперь карету и колеса так, что бы после клика начинала двигаться карета&lt;br /&gt;
и вращаться колеса. Когда карета останавливается, то и колеса должны переставать крутится.&lt;br /&gt;
Колеса сделаем одинаковыми простыми машинами с двумя состояниями, которые назовем '''off''' (неподвижны) и '''on''' (крутятся):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_kareta2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Заметим, что в состояниях колес нет команды draw, так как колесо всегда рисуется при помощи одной картинки, она берется по умолчанию, из той, которая была перетащена на сцену (свойство '''res''').&lt;br /&gt;
Угловая скорость '''v''' (в формулах она была обозначена как w) в команде rot измеряется в градусах в секунду. Поэтому v=180 означает, что колесо будет делать полный оборот (360 градусов) за 2 секунды.&lt;br /&gt;
&lt;br /&gt;
Обратим внимание, что раньше вращение мы задавали двумя параметрами: изменением угла '''da''' за время '''t'''. Так как сейчас время вращения колеса не фиксируется (этим занимается карета),&lt;br /&gt;
то указан только один параметр: угловая скорость v.&lt;br /&gt;
&lt;br /&gt;
Так как колеса одинаковые, то имеет смысл создать сначала одно колесо, запрограммировать его, а затем скопировать, получив готовое второе колесо. Его надо будет только затем мышкой перетащить на нужное место.&lt;br /&gt;
Не забываем также переименовать машины (в нашем случае это '''koleso1''' и '''koleso2'''). &lt;br /&gt;
&lt;br /&gt;
Карета должна при клике запускать на вращение колеса (переводя в состояние on),&lt;br /&gt;
а при остановке их останавливать:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_kareta3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверьте что параметр v=66 в команде move состояния run кареты, угловая скорость колес v=180 в команде rot состояния on согласуются с радиусом колеса r=21. Радиус колеса равен половине ширины его картинки (свойство &amp;quot;размер&amp;quot;). Если Ваше колесо имеет другой размер, пересчитайте поступательную скорость по приведенной выше формуле.&lt;br /&gt;
&lt;br /&gt;
== Как открыть замок ключом ==&lt;br /&gt;
&lt;br /&gt;
В адвентюрных играх часто используется прием применения предметов.&lt;br /&gt;
При этом один предмет мышкой перетаскивается на другой, в результате&lt;br /&gt;
чего происходят некоторые изменения (открывается дверь, зажигается огонь и т.п.)&lt;br /&gt;
&lt;br /&gt;
=== Постановка задачи ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим простой пример подобного взаимодействия объектов.&lt;br /&gt;
Создайте новый экран и сцену на нём, так как предыдущий экран должен быть уже&lt;br /&gt;
забит различными насекомыми.&lt;br /&gt;
Перетащите на сцену из редактора ресурсов очередного жука, саквояж и ключ.&lt;br /&gt;
Лучше их перетаскивать именно в таком порядке.&lt;br /&gt;
Если порядок получился другой, мышкой в дереве проекта упорядочите&lt;br /&gt;
эти объекты, так  чтобы последовательность рисования была: жук, затем саквояж, затем ключ.&lt;br /&gt;
Расположите эти объекты примерно в центре сцены и сделайте их машинами состояний.&lt;br /&gt;
Поменяйте их имена на '''ladybug''' (божья коровка), '''bag''' (саквояж) и '''key''' (ключ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_key1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Наша задача состоит в организации взаимодействия ключа, саквояжа и жука при котором,&lt;br /&gt;
работают такие правила:&lt;br /&gt;
* если схватить ключ мышкой, он будет таскаться по сцене в определенных границах;&lt;br /&gt;
* если отпустить ключ над саквояжем, саквояж должен &amp;quot;растаять&amp;quot;, уменьшив свою прозрачность, а ключ уменьшиться в размерах, сжавшись в точку;&lt;br /&gt;
* одновременно с этим, из-под саквояжа начинает вверх бежать жук;&lt;br /&gt;
* когда жук заканчивает движение, саквояж появляется на своем месте, ключ также появляется на исходном месте, увеличившись из точки до начального размера, а жук исчезает, спрятавшись под саквояж.&lt;br /&gt;
&lt;br /&gt;
=== Ключ ===&lt;br /&gt;
&lt;br /&gt;
Запрограммируем сначала машину для ключа:&lt;br /&gt;
 &lt;br /&gt;
[[файл:lesson_5_key3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Три состояния соответствуют трём режимам функционирования ключа:&lt;br /&gt;
* '''drag''' - в этом, стартовом состоянии мы таскаем ключ по экрану &lt;br /&gt;
* '''open''' - открываем саквояж и уменьшаемся до 0&lt;br /&gt;
* '''back''' - восстанавливаем размер и возвращаемся в исходное положение на экране&lt;br /&gt;
&lt;br /&gt;
Второе состояние состояние '''open''' не должно вызвать особых затруднений.&lt;br /&gt;
В команде '''set''' меняется состояние объекта '''bag''' (саквояж) на open.&lt;br /&gt;
В этот момент саквояж должен изобразить своё открытие.&lt;br /&gt;
В команде процессов '''scale''' происходит за время t=500 миллисекунд уменьшение масштаба рисования&lt;br /&gt;
ключа (его размера) до ''целевых значений'' tx, ty которые выбраны близкими к нулю. &lt;br /&gt;
После этого ключ переходит в третье состояние back.&lt;br /&gt;
&lt;br /&gt;
В состоянии back он снова меняет свой масштаб, но уже к исходному значению 1&lt;br /&gt;
по ширине и высоте. &lt;br /&gt;
Кроме этого появилась новая команда '''init'''. Это команда инициализации&lt;br /&gt;
или переустановки свойств данной машины. В нашем случае, мы меняем её координаты&lt;br /&gt;
на значения x=0 и y=250 пикселей. Как и команда '''set''', команда '''init''' выполняется сразу при входе в состояние, поэтому ключ начнет увеличиваться уже с исходной позиции.&lt;br /&gt;
Желательно, на сцене ему сразу задать в свойствах положение x=0, y=250,&lt;br /&gt;
чтобы туда в дальнейшем он и возвращался.&lt;br /&gt;
&lt;br /&gt;
Разберемся теперь с системой координат на сцене. &lt;br /&gt;
&lt;br /&gt;
=== Координаты на сцене ===&lt;br /&gt;
&lt;br /&gt;
Если сцена создавалась по умолчанию, то она имеет ширину 960 пикселей,&lt;br /&gt;
а высоту - 640. Начало отсчёта координат на сцене расположено в её центре.&lt;br /&gt;
Ось x, по которой откладывается горизонтальная координата объекта направлена вправо,&lt;br /&gt;
а ось Y для вертикальной координаты - вниз: &lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_key2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Стоит раскрыть координаты любого объекта (свойство положение) на панели Properties.&lt;br /&gt;
Затем потаскать объект по сцене, наблюдая как эти координаты меняются.&lt;br /&gt;
Если '''x''' стало отрицательным, значит объект находится левее центра сцены.&lt;br /&gt;
Если же отрицательный '''y''', то объект расположен выше центра.&lt;br /&gt;
&lt;br /&gt;
Заметим, что координата объекта определяется его точкой пивота.&lt;br /&gt;
Для трех объектов, находящихся сейчас на сцене точка пивота должна&lt;br /&gt;
совпадать с центрами картинок.&lt;br /&gt;
&lt;br /&gt;
Таким образом, когда мы задали в команде init положение для ключа x=0, y=250,&lt;br /&gt;
мы поместили его по середине, в нижней части сцены.&lt;br /&gt;
&lt;br /&gt;
=== Драг энд дроп ===&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_key3_drag.png|right]]&lt;br /&gt;
Осталось разобраться с ещё двумя новыми командами,&lt;br /&gt;
которые появились в состоянии drag.&lt;br /&gt;
Первая команда '''drag''' (таскать) означает, что данную машину в этом состоянии&lt;br /&gt;
разрешено мышкой таскать по экрану.&lt;br /&gt;
При этом могут быть заданы координаты области за которую объект вытащить нельзя.&lt;br /&gt;
Эта область определяется двумя точками - верхним левым углом с координатами (x1,y1)&lt;br /&gt;
и правым нижним углом с координатами (x2,y2).&lt;br /&gt;
&lt;br /&gt;
В нашем случае эти точки почти совпадают с углами сцены.&lt;br /&gt;
На самом деле область разрешенного таскания чуть меньше размера сцены.&lt;br /&gt;
Сделано это для того, чтобы ключ нельзя было даже краешком вытащить за сцену.&lt;br /&gt;
Правый нижний угол сцены имеет координаты (x2, y2)=(480, 320)=(960/2, 640/2).&lt;br /&gt;
Ширина ключа 128 пикселей (см. свойство размер).&lt;br /&gt;
Поэтому, чтобы правая сторона ключа не выехала за сцену, для координаты y1&lt;br /&gt;
мы берем значение 416 = 480-128/2 (сужаем границу таскания на половину ширины ключа). Аналогично считаются остальные координаты области разрешенного таскания.&lt;br /&gt;
&lt;br /&gt;
Наконец, команда '''drop''' (бросить), регулирует, что должно произойти при бросании ключа&lt;br /&gt;
(отпускания мышки) если оно произошло на объекте '''obj'''.&lt;br /&gt;
В данном случае происходит переход в новое состояние (поле '''go''').&lt;br /&gt;
&lt;br /&gt;
=== Саквояж и жук ===&lt;br /&gt;
&lt;br /&gt;
Создадим теперь машину для саквояжа.&lt;br /&gt;
Она будет иметь два состояния open и close:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_key4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В состоянии close в команде '''init''' саквояж переустанавливает свою прозрачность в единичное значение (непрозрачен) al=1.00. Это необходимо, что бы появиться на экране после исчезновения.&lt;br /&gt;
Сам процесс исчезновения задается командой процесса '''alpha''' в состоянии open.&lt;br /&gt;
Эта команда меняет текущую прозрачность объекта до целевого значения ta=0 (полностью прозрачен) за время t=500 миллисекунд (пол секунды).&lt;br /&gt;
Кроме этого в этом состоянии меняется состояние жука (команда '''set'''), который должен из под саквояжа начать бежать.&lt;br /&gt;
&lt;br /&gt;
Осталось создать два состояния для жука, который будет выбегать из под саквояжа.&lt;br /&gt;
Ничего сложного в его поведении нет:&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[файл:lesson_5_key5.png]]&lt;br /&gt;
&lt;br /&gt;
Теперь самое время протестировать результат наших действий.&lt;br /&gt;
Потаскайте сначала ключ по сцене, убедившись, что он за неё не входит.&lt;br /&gt;
Затем наведите ключом на саквояж и отпустите мышку. &lt;br /&gt;
Всё должно прийти в движение.&lt;br /&gt;
Включите отладку (кнопка S) и понаблюдайте как изменяются состояния объектов.&lt;br /&gt;
В момент выполнения процессов можно несколько раз понажимать на пробел,&lt;br /&gt;
чтобы приостановить их выполнение и запустить снова.&lt;br /&gt;
&lt;br /&gt;
== Что дальше? ==&lt;br /&gt;
&lt;br /&gt;
Мы разобрали много команд и их параметров.&lt;br /&gt;
Однако это далеко не все возможности машин состояний.&lt;br /&gt;
Стоит прочитать документ [[Machine]] в котором описан весь язык машин.&lt;br /&gt;
Чем больше Вы создадите машин с различным поведением, тем увереннее будете с ними работать.&lt;br /&gt;
&lt;br /&gt;
В заключение приведем несколько общих советов:&lt;br /&gt;
* Проектируйте сначала логику поведения машин на бумаге.&lt;br /&gt;
* Давайте осмысленные названия для машин и их состояний.&lt;br /&gt;
* Обязательно документируйте машины, описывая их поведение на естественном языке.&lt;br /&gt;
* Копируйте однотипные машины для сокращения времени по их программированию.&lt;br /&gt;
* При сложном взаимодействии нескольких машин, вводите управляющую машину (возможно невидимую), в которой концентрируйте основную логику поведения.    &lt;br /&gt;
* Не увлекайтесь длинными состояниями с множеством команд процессов. Иногда поведение становится понятнее, если состояние разбить на несколько последовательных состояний. &lt;br /&gt;
* Смело спрашивайте совета у более опытных дизайнеров. Они в своё время поступали именно так.&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
* создайте движение Земли по окружности, а Луны также по окружности, но вокруг Земли;&lt;br /&gt;
* сделайте движение кареты бесконечным так, что после того как она уезжает за правый край экрана, она появлялась из-за левого края; &lt;br /&gt;
* заставьте жука начинать бежать, только когда саквояж полностью уменьшиться (set на выходе из состояния).&lt;br /&gt;
* организуйте так, чтобы при перетаскивании ключа в область саквояжа, жук развернулся на 180 градусов и двигался вниз, обратно под саквояж.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Редактор текстовых ресурсов|Урок 6]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%94%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD:_%D0%B6%D1%83%D1%87%D0%BA%D0%B8,_%D0%BA%D0%BB%D1%8E%D1%87%D0%B8_%D0%B8_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%B5_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B5&amp;diff=3353</id>
		<title>Движение машин: жучки, ключи и многое другое</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%94%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD:_%D0%B6%D1%83%D1%87%D0%BA%D0%B8,_%D0%BA%D0%BB%D1%8E%D1%87%D0%B8_%D0%B8_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%B5_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B5&amp;diff=3353"/>
		<updated>2013-03-05T11:03:44Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Вращение вокруг пивота */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Редактор текстовых ресурсов|Урок 6]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' изучить процессы движения и способы взаимодействия машин.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* реализовать разными методами &amp;quot;ход конем&amp;quot;;&lt;br /&gt;
* организовать циклическое движение по квадрату;&lt;br /&gt;
* разобраться с понятием точки пивота;&lt;br /&gt;
* научиться согласовывать поступательное и вращательное движение;&lt;br /&gt;
* рассмотреть способ применения одного предмета на другой.&lt;br /&gt;
&lt;br /&gt;
== Процессы и движение ==&lt;br /&gt;
&lt;br /&gt;
До сих пор мы ограничивались только одной командой процессов - '''wait''' (ожидание).&lt;br /&gt;
В этом уроке мы рассмотрим другие процессы. Существуют следующие команды движения (изменения объекта):&lt;br /&gt;
* '''move''' - движение по прямой&lt;br /&gt;
* '''rot'''  - вращение &lt;br /&gt;
* '''scale''' - изменение размера&lt;br /&gt;
* '''alpha''' - изменение прозрачности&lt;br /&gt;
* '''phys''' - движение в силовом поле.&lt;br /&gt;
 &lt;br /&gt;
В каждой команде достаточно много параметров. Например, можно сдвинуться (move)&lt;br /&gt;
по горизонтали на '''dx''' пикселей за время '''t'''. Вместо времени можно указать скорость  '''v''' в пикселях в секунду.&lt;br /&gt;
Можно двигаться в определенную целевую точку с координатами ('''tx''', '''ty''') и т.д.&lt;br /&gt;
&lt;br /&gt;
=== Ход конем ===&lt;br /&gt;
&lt;br /&gt;
[[файл:lady_bug_64.png|right]]&lt;br /&gt;
Рассмотрим простой пример в котором объект движется сначала вверх на 100 пикселей, а затем вправо на 200.&lt;br /&gt;
В качестве такого объекта будем использовать ladybug (божья коровка или для краткости жучок), &lt;br /&gt;
картинку которой можно найти в редакторе ресурсов в папке этого урока.&lt;br /&gt;
Как обычно, перетаскиваем её на сцену, переименовываем и превращаем в машину состояний.&lt;br /&gt;
Организуем сначала движние нашего жучка при помощи трёх состояний:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_bug1.png]] &lt;br /&gt;
&lt;br /&gt;
Первое, стартовое состояние является запускающим. Если кликнуть на жучка, то он начнет своё движение.&lt;br /&gt;
Когда перемещение по вертикали заканчивается (состояние up), жучок переходит в третье состояние (right), в котором движется вправо.&lt;br /&gt;
Закончив движение, он возвращается в стартовое состояние и ждет очередного клика.&lt;br /&gt;
&lt;br /&gt;
Координатная ось Y (вертикальная) на сцене направлена вниз, а ось X (горизонтальная) -- вправо.&lt;br /&gt;
Поэтому, чтобы жучок начал двигаться вверх, его смещение должно быть отрицательным.&lt;br /&gt;
В нашем случае это dy=-100. Эти 100 пикселей объект должен пройти за одну секунду (t=1000).&lt;br /&gt;
В конце выполнения команды move происходит переход в следующее состояние, имя которого задается в поле &amp;quot;'''go'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
При движении вправо, происходит смещение на 200 пикселей.&lt;br /&gt;
Чтобы скорость движения вверх и вправо была постоянной, необходимо соответственно увеличить&lt;br /&gt;
время движения (t=2000).&lt;br /&gt;
&lt;br /&gt;
Точно такое же движение можно организовать в рамках одного, а не двух состояний.&lt;br /&gt;
Поместите на сцену еще одного жучка, дайте ему другое имя и задайте следующую машину состояний:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_bug2.png]]&lt;br /&gt;
&lt;br /&gt;
Команды move в состоянии way выполняются последовательно.&lt;br /&gt;
Сначала отрабатывает нулевой move, а затем первый.&lt;br /&gt;
&lt;br /&gt;
Протестируйте получившийся результат. Оба жучка должны двигаться одинаковым образом.&lt;br /&gt;
Не забывайте при тестировании включать отладочную информацию о текущих состояниях.&lt;br /&gt;
&lt;br /&gt;
=== Последовательно и параллельно ===&lt;br /&gt;
&lt;br /&gt;
И так, в рамках данного состояния все команды процессов с одинаковым названием выполняются '''последовательно'''.&lt;br /&gt;
При этом команды с разными именами выполняются '''параллельно'''.&lt;br /&gt;
&lt;br /&gt;
[[файл:Def_procesess1.png|right]]&lt;br /&gt;
Пусть в состянии есть несколько команд move и несколько команд rot (вращения):&lt;br /&gt;
* move0 move1 rot0 move2 rot1 rot2&lt;br /&gt;
Независимо от их чередования, они выстраиваются в параллельные списки процессов:&lt;br /&gt;
* move0   rot0&lt;br /&gt;
* move1   rot1&lt;br /&gt;
* move2   rot2&lt;br /&gt;
Эти списки начинают одновременно выполняться сверху вниз: &lt;br /&gt;
отрабатывают команды move и одновременно с ними комананды rot.&lt;br /&gt;
&lt;br /&gt;
Заставим нашего жучка при совершении хода конем поворачиваться на 360 градусов.&lt;br /&gt;
Для этого поместим третью машину со следующими состояниями:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_bug3.png]]&lt;br /&gt;
&lt;br /&gt;
Запустите проект во вьювере. &lt;br /&gt;
Одновременно с выполнением двух команд move будет выполняться одна команда rot.&lt;br /&gt;
Время выполнения rot равно суммарному времени двух команд move (t=3000=1000+2000).&lt;br /&gt;
В результате, к концу движения, жучок поворачивается на da=360 градусов ('''da''' - изменение угла).&lt;br /&gt;
&lt;br /&gt;
Переход в следующее состояние '''go''' в данном случае можно было бы поставить не в команду '''rot''',&lt;br /&gt;
а в последнюю команду '''move'''. Однако приведенное решение лучше, так как&lt;br /&gt;
гарантирует, что переход произойдет только, когда жучок полностью развернется.&lt;br /&gt;
Хотя суммарное время move совпадает с временем rot, реальное компьютерное время&lt;br /&gt;
выполнения этих команд может немного отличаться. В результате, если выйти из&lt;br /&gt;
состояния по окончанию движения, можно получить не до конца развернувшегося жучка.&lt;br /&gt;
&lt;br /&gt;
=== Циклическое движение ===&lt;br /&gt;
&lt;br /&gt;
С командами движения, также как и с командой ожидания, можно использовать циклы.&lt;br /&gt;
Например, заставим (уже четвертого) жучка при клике два раз оббегать стороны квадрата.&lt;br /&gt;
Это можно сделать при помощи следующей машины:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_bug4.png]]&lt;br /&gt;
&lt;br /&gt;
Четыре команды move выполняются одна за одной.&lt;br /&gt;
Затем вьювер натыкается на параметр loop=1 и еще раз выполняет&lt;br /&gt;
это движение с самого начала. Последняя команда move служит для перехода в стартовое состояние&lt;br /&gt;
ожидания клика. &lt;br /&gt;
&lt;br /&gt;
Заметим, что нельзя было для перехода использовать '''wait'''.&lt;br /&gt;
Она, как и остальные команды процессов, запустилась бы параллельно с командами&lt;br /&gt;
и сработала бы сразу. В результате ни какого движения не получилось бы!&lt;br /&gt;
&lt;br /&gt;
Если параметр loop=-1, то движение будет бесконечным. &lt;br /&gt;
Этого же можно было добиться, поставив вместо loop=-1 параметр go с переходом в это же состояние (перезапустить состояние). &lt;br /&gt;
&lt;br /&gt;
=== Управление командами ===&lt;br /&gt;
&lt;br /&gt;
Кроме команды зацикливания данного процесса, можно из одних команд запускать другие (начинать процессы другого типа). Например, пусть жучок движется вправо в течении 1 секунды и вращается 2 секунды.&lt;br /&gt;
Команда move закончится раньше команды rot.&lt;br /&gt;
Пусть затем, закончив полный оборот (на уже остановившемся объекте), он начинает снова двигаться вправо. Реализуется это так:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_move_rot.png]]&lt;br /&gt;
&lt;br /&gt;
Команда '''rot''' зациклена (loop=-1). Кроме этого, она имеет параметр move=0&lt;br /&gt;
в котором задается номер команды move которую надо запустить на выполнение после окончания вращения.&lt;br /&gt;
&lt;br /&gt;
Вызов одних команд процессов из других очень мощный, но одновременно и опасный инструмент. &lt;br /&gt;
Множественные вызовы различных команд превращают состояние в спагетти переходов,&lt;br /&gt;
логику которого часто сложно понять. Более того, иногда можно получить зависание вьювера&lt;br /&gt;
при неудачной перекрестной ссылке двух команд друг на друга.&lt;br /&gt;
По этой причине запрещено вызывать из данной команды другие команды этого же типа&lt;br /&gt;
(из rot вызывать rot и т.д.). Однако это, к сожалению, не снимает полностью проблему зависания.&lt;br /&gt;
Так, что готовьтесь...&lt;br /&gt;
&lt;br /&gt;
=== Вращение вокруг пивота ===&lt;br /&gt;
&lt;br /&gt;
При вращении (команда '''rot''') машина вращается вокруг, так называемой,&lt;br /&gt;
'''точки пивота''' (''pivot'' - штырь, болт; опорная точка).&lt;br /&gt;
В примерах выше эта точка находилась в центре картинки.&lt;br /&gt;
Изменим теперь её положение и посмотрим к какому эффекту это приведет.&lt;br /&gt;
&lt;br /&gt;
Откроем редактор ресурсов и в папке этого урока найдем солнышко. &lt;br /&gt;
Сделаем четыре действия:&lt;br /&gt;
# Кликнем на имя солнышка (sun_1) в дереве на левой панели&lt;br /&gt;
# Под этой панелью поставим галочку в чекбоксе ''Edit pivot''.&lt;br /&gt;
# Схватимся мышкой за красный крестик в центре солнышка на правой панели и перетащим этот крестик влево.&lt;br /&gt;
# Уберем галочку в чекбоксе ''Edit pivot'':&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_pivot.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Теперь перетащим солнышко на сцену этого урока (лучше для него создать отдельный экран).&lt;br /&gt;
Уменьшим его размеры модификаторами scale x и scale y, поставив там значение 0.5.&lt;br /&gt;
Превратим солнышко в такую машину:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_pivot2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сохранив проект и запустив вьювер, мы увидим, что солнышко начало вращаться &lt;br /&gt;
по окружности. Машина по прежнему вращается вокруг точки пивота.&lt;br /&gt;
Однако теперь эта точка смещена в центр окружности.&lt;br /&gt;
&lt;br /&gt;
В качестве упражнения попробуйте организовать вращение, подобное вращению Земли и Луны&lt;br /&gt;
(Земля вращается по окружности, а Луна вращается по окружности меньшего радиуса вокруг Земли).&lt;br /&gt;
Для этого Вам потребуется &amp;quot;Луну&amp;quot; сделать подобъектом &amp;quot;Земли&amp;quot; и правильно выставить&lt;br /&gt;
положение &amp;quot;Луны&amp;quot; относительно &amp;quot;Земли&amp;quot;. &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
[[файл:wrong.png|right|32px]]&lt;br /&gt;
'''Внимание!''' Если объект помещен в группу, то координаты его пивота изменяются относительно точки пивота того объекта, чьим подобъектом он является. &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Поэкспериментируйте. Можно использовать следующие картинки:&lt;br /&gt;
&lt;br /&gt;
[[файл:eath.png]]  [[файл:moon.png]]&lt;br /&gt;
&lt;br /&gt;
== Как ездят кареты ==&lt;br /&gt;
&lt;br /&gt;
=== Подготовка ===&lt;br /&gt;
&lt;br /&gt;
Если Вы уже организовали движение Земли и Луны, то сложное движение,&lt;br /&gt;
возникающие при наличие подобъектов, не должно вызывать затруднений.&lt;br /&gt;
В этом примере мы покажем как согласовывать поступательное и &lt;br /&gt;
вращательное движение на примере кареты с двумя колёсами.&lt;br /&gt;
Разместим все три объекта (карету и её два колеса) на сцене&lt;br /&gt;
и сделаем колеса подобъектами кареты.&lt;br /&gt;
Превратим их все в машины состояний:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_kareta1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пусть при клике на карету она проезжает некоторое расстояние по горизонтали и останавливается.&lt;br /&gt;
Сделайте самостоятельно такую машину и протестируйте её.&lt;br /&gt;
Карета должна перемещаться, а  колеса, являясь её подобъектами, двигаться вместе с ней.&lt;br /&gt;
Однако, они пока не вращаются. Если в ресурсах не окажется колеса и кареты,&lt;br /&gt;
можно загрузить их непосредственно из этого урока:&lt;br /&gt;
&lt;br /&gt;
[[файл:kareta.png]] [[файл:koleso.png]]&lt;br /&gt;
&lt;br /&gt;
=== Немного математики ===&lt;br /&gt;
&lt;br /&gt;
Разберемся как согласовать ''поступательную'' скорость кареты и ''угловую'' скорость вращения колес. Последняя должна быть подобрана таким образом, чтобы движение &lt;br /&gt;
выглядело естественным (колеса не проскальзывали вперед или назад).&lt;br /&gt;
&lt;br /&gt;
Посмотрите на формулы возле рисунка кареты. В первой из них приводится связь длины окружности L колеса и его радиуса r. Ниже - коэффициент 57.3 перевода числа пи из углов в радианы (пи - это 3.1415.. в радианах или 180 градусов). Во второй колонке даны определения поступательной и угловой скорости (изменение расстояния или угла за некоторое время t).  &lt;br /&gt;
Наконец, в третей колонке дана ключевая для нашей задачи формула, связывающая радиус '''r''', линейную '''v''' и угловую скорости '''w'''. Попробуйте её самостоятельно вывести, из предположения, что за одно и тоже время длина смещения кареты должна совпадать с длиной окружности обода колеса.&lt;br /&gt;
При этом поступательная скорость '''v''' измеряется в пикселях за секунду, а угловая скорость '''w''' в градусах за секунду.&lt;br /&gt;
&lt;br /&gt;
=== Машины ===&lt;br /&gt;
&lt;br /&gt;
Запрограммируем теперь карету и колеса так, что бы после клика начинала двигаться карета&lt;br /&gt;
и вращаться колеса. Когда карета останавливается, то и колеса должны переставать крутится.&lt;br /&gt;
Колеса сделаем одинаковыми простыми машинами с двумя состояниями, которые назовем '''off''' (неподвижны) и '''on''' (крутятся):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_kareta2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Заметим, что в состояниях колес нет команды draw, так как колесо всегда рисуется при помощи одной картинки, она берется по умолчанию, из той, которая была перетащена на сцену (свойство '''res''').&lt;br /&gt;
Угловая скорость '''v''' (в формулах она была обозначена как w) в команде rot измеряется в градусах в секунду. Поэтому v=180 означает, что колесо будет делать полный оборот (360 градусов) за 2 секунды.&lt;br /&gt;
&lt;br /&gt;
Обратим внимание, что раньше вращение мы задавали двумя параметрами: изменением угла '''da''' за время '''t'''. Так как сейчас время вращения колеса не фиксируется (этим занимается карета),&lt;br /&gt;
то указан только один параметр: угловая скорость v.&lt;br /&gt;
&lt;br /&gt;
Так как колеса одинаковые, то имеет смысл создать сначала одно колесо, запрограммировать его, а затем скопировать, получив готовое второе колесо. Его надо будет только затем мышкой перетащить на нужное место.&lt;br /&gt;
Не забываем также переименовать машины (в нашем случае это '''koleso1''' и '''koleso2'''). &lt;br /&gt;
&lt;br /&gt;
Карета должна при клике запускать на вращение колеса (переводя в состояние on),&lt;br /&gt;
а при остановке их останавливать:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_kareta3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверьте что параметр v=66 в команде move состояния run кареты, угловая скорость колес v=180 в команде rot состояния on согласуются с радиусом колеса r=21. Радиус колеса равен половине ширины его картинки (свойство &amp;quot;размер&amp;quot;). Если Ваше колесо имеет другой размер, пересчитайте поступательную скорость по приведенной выше формуле.&lt;br /&gt;
&lt;br /&gt;
== Как открыть замок ключом ==&lt;br /&gt;
&lt;br /&gt;
В адвентюрных играх часто используется прием применения предметов.&lt;br /&gt;
При этом один предмет мышкой перетаскивается на другой, в результате&lt;br /&gt;
чего происходят некоторые изменения (открывается дверь, зажигается огонь и т.п.)&lt;br /&gt;
&lt;br /&gt;
=== Постановка задачи ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим простой пример подобного взаимодействия объектов.&lt;br /&gt;
Создайте новый экран и сцену на нём, так как предыдущий экран должен быть уже&lt;br /&gt;
забит различными насекомыми.&lt;br /&gt;
Перетащите на сцену из редактора ресурсов очередного жука, саквояж и ключ.&lt;br /&gt;
Лучше их перетаскивать именно в таком порядке.&lt;br /&gt;
Если порядок получился другой, мышкой в дереве проекта упорядочите&lt;br /&gt;
эти объекты, так  чтобы последовательность рисования была: жук, затем саквояж, затем ключ.&lt;br /&gt;
Расположите эти объекты примерно в центре сцены и сделайте их машинами состояний.&lt;br /&gt;
Поменяйте их имена на '''ladybug''' (божья коровка), '''bag''' (саквояж) и '''key''' (ключ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_key1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Наша задача состоит в организации взаимодействия ключа, саквояжа и жука при котором,&lt;br /&gt;
работают такие правила:&lt;br /&gt;
* если схватить ключ мышкой, он будет таскаться по сцене в определенных границах;&lt;br /&gt;
* если отпустить ключ над саквояжем, саквояж должен &amp;quot;растаять&amp;quot;, уменьшив свою прозрачность, а ключ уменьшиться в размерах, сжавшись в точку;&lt;br /&gt;
* одновременно с этим, из-под саквояжа начинает вверх бежать жук;&lt;br /&gt;
* когда жук заканчивает движение, саквояж появляется на своем месте, ключ также появляется на исходном месте, увеличившись из точки до начального размера, а жук исчезает, спрятавшись под саквояж.&lt;br /&gt;
&lt;br /&gt;
=== Ключ ===&lt;br /&gt;
&lt;br /&gt;
Запрограммируем сначала машину для ключа:&lt;br /&gt;
 &lt;br /&gt;
[[файл:lesson_5_key3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Три состояния соответствуют трём режимам функционирования ключа:&lt;br /&gt;
* '''drag''' - в этом, стартовом состоянии мы таскаем ключ по экрану &lt;br /&gt;
* '''open''' - открываем саквояж и уменьшаемся до 0&lt;br /&gt;
* '''back''' - восстанавливаем размер и возвращаемся в исходное положение на экране&lt;br /&gt;
&lt;br /&gt;
Второе состояние состояние '''open''' не должно вызвать особых затруднений.&lt;br /&gt;
В команде '''set''' меняется состояние объекта '''bag''' (саквояж) на open.&lt;br /&gt;
В этот момент саквояж должен изобразить своё открытие.&lt;br /&gt;
В команде процессов '''scale''' происходит за время t=500 миллисекунд уменьшение масштаба рисования&lt;br /&gt;
ключа (его размера) до ''целевых значений'' tx, ty которые выбраны близкими к нулю. &lt;br /&gt;
После этого ключ переходит в третье состояние back.&lt;br /&gt;
&lt;br /&gt;
В состоянии back он снова меняет свой масштаб, но уже к исходному значению 1&lt;br /&gt;
по ширине и высоте. &lt;br /&gt;
Кроме этого появилась новая команда '''init'''. Это команда инициализации&lt;br /&gt;
или переустановки свойств данной машины. В нашем случае, мы меняем её координаты&lt;br /&gt;
на значения x=0 и y=250 пикселей. Как и команда '''set''', команда '''init''' выполняется сразу при входе в состояние, поэтому ключ начнет увеличиваться уже с исходной позиции.&lt;br /&gt;
Желательно, на сцене ему сразу задать в свойствах положение x=0, y=250,&lt;br /&gt;
чтобы туда в дальнейшем он и возвращался.&lt;br /&gt;
&lt;br /&gt;
Разберемся теперь с системой координат на сцене. &lt;br /&gt;
&lt;br /&gt;
=== Координаты на сцене ===&lt;br /&gt;
&lt;br /&gt;
Если сцена создавалась по умолчанию, то она имеет ширину 960 пикселей,&lt;br /&gt;
а высоту - 640. Начало отсчёта координат на сцене расположено в её центре.&lt;br /&gt;
Ось x, по которой откладывается горизонтальная координата объекта направлена вправо,&lt;br /&gt;
а ось Y для вертикальной координаты - вниз: &lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_key2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Стоит раскрыть координаты любого объекта (свойство положение) на панели Properties.&lt;br /&gt;
Затем потаскать объект по сцене, наблюдая как эти координаты меняются.&lt;br /&gt;
Если '''x''' стало отрицательным, значит объект находится левее центра сцены.&lt;br /&gt;
Если же отрицательный '''y''', то объект расположен выше центра.&lt;br /&gt;
&lt;br /&gt;
Заметим, что координата объекта определяется его точкой пивота.&lt;br /&gt;
Для трех объектов, находящихся сейчас на сцене точка пивота должна&lt;br /&gt;
совпадать с центрами картинок.&lt;br /&gt;
&lt;br /&gt;
Таким образом, когда мы задали в команде init положение для ключа x=0, y=250,&lt;br /&gt;
мы поместили его по середине, в нижней части сцены.&lt;br /&gt;
&lt;br /&gt;
=== Драг энд дроп ===&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_key3_drag.png|right]]&lt;br /&gt;
Осталось разобраться с ещё двумя новыми командами,&lt;br /&gt;
которые появились в состоянии drag.&lt;br /&gt;
Первая команда '''drag''' (таскать) означает, что данную машину в этом состоянии&lt;br /&gt;
разрешено мышкой таскать по экрану.&lt;br /&gt;
При этом могут быть заданы координаты области за которую объект вытащить нельзя.&lt;br /&gt;
Эта область определяется двумя точками - верхним левым углом с координатами (x1,y1)&lt;br /&gt;
и правым нижним углом с координатами (x2,y2).&lt;br /&gt;
&lt;br /&gt;
В нашем случае эти точки почти совпадают с углами сцены.&lt;br /&gt;
На самом деле область разрешенного таскания чуть меньше размера сцены.&lt;br /&gt;
Сделано это для того, чтобы ключ нельзя было даже краешком вытащить за сцену.&lt;br /&gt;
Правый нижний угол сцены имеет координаты (x2, y2)=(480, 320)=(960/2, 640/2).&lt;br /&gt;
Ширина ключа 128 пикселей (см. свойство размер).&lt;br /&gt;
Поэтому, чтобы правая сторона ключа не выехала за сцену, для координаты y1&lt;br /&gt;
мы берем значение 416 = 480-128/2 (сужаем границу таскания на половину ширины ключа). Аналогично считаются остальные координаты области разрешенного таскания.&lt;br /&gt;
&lt;br /&gt;
Наконец, команда '''drop''' (бросить), регулирует, что должно произойти при бросании ключа&lt;br /&gt;
(отпускания мышки) если оно произошло на объекте '''obj'''.&lt;br /&gt;
В данном случае происходит переход в новое состояние (поле '''go''').&lt;br /&gt;
&lt;br /&gt;
=== Саквояж и жук ===&lt;br /&gt;
&lt;br /&gt;
Создадим теперь машину для саквояжа.&lt;br /&gt;
Она будет иметь два состояния open и close:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_5_key4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В состоянии close в команде '''init''' саквояж переустанавливает свою прозрачность в единичное значение (непрозрачен) al=1.00. Это необходимо, что бы появиться на экране после исчезновения.&lt;br /&gt;
Сам процесс исчезновения задается командой процесса '''alpha''' в состоянии open.&lt;br /&gt;
Эта команда меняет текущую прозрачность объекта до целевого значения ta=0 (полностью прозрачен) за время t=500 миллисекунд (пол секунды).&lt;br /&gt;
Кроме этого в этом состоянии меняется состояние жука (команда '''set'''), который должен из под саквояжа начать бежать.&lt;br /&gt;
&lt;br /&gt;
Осталось создать два состояния для жука, который будет выбегать из под саквояжа.&lt;br /&gt;
Ничего сложного в его поведении нет:&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[файл:lesson_5_key5.png]]&lt;br /&gt;
&lt;br /&gt;
Теперь самое время протестировать результат наших действий.&lt;br /&gt;
Потаскайте сначала ключ по сцене, убедившись, что он за неё не входит.&lt;br /&gt;
Затем наведите ключом на саквояж и отпустите мышку. &lt;br /&gt;
Всё должно прийти в движение.&lt;br /&gt;
Включите отладку (кнопка S) и понаблюдайте как изменяются состояния объектов.&lt;br /&gt;
В момент выполнения процессов можно несколько раз понажимать на пробел,&lt;br /&gt;
чтобы приостановить их выполнение и запустить снова.&lt;br /&gt;
&lt;br /&gt;
== Что дальше? ==&lt;br /&gt;
&lt;br /&gt;
Мы разобрали много команд и их параметров.&lt;br /&gt;
Однако это далеко не все возможности машин состояний.&lt;br /&gt;
Стоит прочитать документ [[Machine]] в котором описан весь язык машин.&lt;br /&gt;
Чем больше Вы создадите машин с различным поведением, тем увереннее будете с ними работать.&lt;br /&gt;
&lt;br /&gt;
В заключение приведем несколько общих советов:&lt;br /&gt;
* Проектируйте сначала логику поведения машин на бумаге.&lt;br /&gt;
* Давайте осмысленные названия для машин и их состояний.&lt;br /&gt;
* Обязательно документируйте машины, описывая их поведение на естественном языке.&lt;br /&gt;
* Копируйте однотипные машины для сокращения времени по их программированию.&lt;br /&gt;
* При сложном взаимодействии нескольких машин, вводите управляющую машину (возможно невидимую), в которой концентрируйте основную логику поведения.    &lt;br /&gt;
* Не увлекайтесь длинными состояниями с множеством команд процессов. Иногда поведение становится понятнее, если состояние разбить на несколько последовательных состояний. &lt;br /&gt;
* Смело спрашивайте совета у более опытных дизайнеров. Они в своё время поступали именно так.&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
* создайте движение Земли по окружности, а Луны также по окружности, но вокруг Земли;&lt;br /&gt;
* сделайте движение кареты бесконечным так, что после того как она уезжает за правый край экрана, она появлялась из-за левого края; &lt;br /&gt;
* заставьте жука начинать бежать, только когда саквояж полностью уменьшиться (set на выходе из состояния).&lt;br /&gt;
* организуйте так, чтобы при перетаскивании ключа в область саквояжа, жук развернулся на 180 градусов и двигался вниз, обратно под саквояж.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Редактор текстовых ресурсов|Урок 6]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82,_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B8_%D1%80%D0%B5%D0%BB%D0%B8%D0%B7_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=3351</id>
		<title>Экспорт, импорт и релиз проекта</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%AD%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82,_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B8_%D1%80%D0%B5%D0%BB%D0%B8%D0%B7_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0&amp;diff=3351"/>
		<updated>2013-03-05T10:49:26Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Лейауты */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Работа с эффектами|Урок 9]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Создание простой адвентюры|Урок 11]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
----&lt;br /&gt;
'''Цель:''' &lt;br /&gt;
создать исполняемый файл для запуска проекта на для поддержки всех устройств Apple.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* проверить параметры созданного проекта;&lt;br /&gt;
* Настроить viever.xml; &lt;br /&gt;
* подготовить проект для финального релиза;&lt;br /&gt;
* определить параметры экспорта проекта;&lt;br /&gt;
* подготовить проект для создания исполняемого файла;&lt;br /&gt;
* запустить проект на устройстве. &lt;br /&gt;
&lt;br /&gt;
== Лейауты ==&lt;br /&gt;
&lt;br /&gt;
Напомним ([[Введение в AppSalute Сreator|урок 1]]), что лейаут (layout) -&lt;br /&gt;
это экран конкретного устройства (телефон, планшетник, десктоп),&lt;br /&gt;
имеющего определенное разрешение в пикселях: &lt;br /&gt;
&lt;br /&gt;
[[Файл:lesson_1_layouts.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Самое неприятное при разработке игрового приложения это то, что &lt;br /&gt;
соотношение ширины и высоты экранов различных устройств отличаются друг от друга.&lt;br /&gt;
Поэтому не достаточно растянуть или сжать изображение, чтобы оно &amp;quot;вписалось&amp;quot; в экран.&lt;br /&gt;
Необходимо верхние или боковые части изображения обрезать или наоборот расширять&lt;br /&gt;
путем добавления полосок, органично вписывающихся в интерфейс (внешний вид) игры.&lt;br /&gt;
&lt;br /&gt;
Некоторые устройства физически являются на столько &amp;quot;мелкими&amp;quot;, что, например, кнопки&lt;br /&gt;
необходимо для него делать более крупными, чем для устройства с большим экраном.&lt;br /&gt;
Кроме этого, иногда требуется поддерживать сразу две ориентации экрана (вертикальную и горизонтальную)&lt;br /&gt;
и т.д., и т.п.&lt;br /&gt;
&lt;br /&gt;
=== Один Layout на разных экранах ===&lt;br /&gt;
[[Файл:L01.png|400px|right]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:L02.png|400px|right]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:L03.png|400px|right]]&lt;br /&gt;
&lt;br /&gt;
===Параметры===&lt;br /&gt;
&lt;br /&gt;
*sx - ручное масштабирование по х&lt;br /&gt;
*sy - ручное масштабирование по y&lt;br /&gt;
*x - сдвиг изображения по x&lt;br /&gt;
*y - сдвиг изображения по y&lt;br /&gt;
*autoPosX - автоматическое позиционирование по х&lt;br /&gt;
*autoPosY - автоматическое позиционирование по y&lt;br /&gt;
*autoScX - автоматическое масштабирование по x&lt;br /&gt;
*autoScY - автоматическое масштабирование по y&lt;br /&gt;
&lt;br /&gt;
===Расшифровка viever.xml===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dev /&amp;gt; - устройство(разрешение экрана полученое из системы) на котором будут применяться параметры&lt;br /&gt;
&lt;br /&gt;
w, h - ширина и высота разрешения экрана устройства для которого будут применены параметры&lt;br /&gt;
&lt;br /&gt;
далее идут параметры масштабирования, сдвига и позиционирования экрана&lt;br /&gt;
&lt;br /&gt;
nm - название лейаута, отображается на экрана в отладочном режиме на экране настроек&lt;br /&gt;
&lt;br /&gt;
===Применение===&lt;br /&gt;
Пусть экран размера 960х640 и необходимо его настроить следующим образом:&lt;br /&gt;
для ipad-ов предусмотрены сверху и снизу поля, которые &amp;quot;отрежутся&amp;quot;, для iphone5 предусмотрена справа и слева графика. Следовательно для ipad надо растянуть изображение по ширине, для iphone 5 по высоте, для iphone 4 - без разницы - родное разрешение.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо составить настройки для всех разрешений экранов.&lt;br /&gt;
&lt;br /&gt;
'''iPad'''&lt;br /&gt;
&lt;br /&gt;
# укажем разрешение экрана w=&amp;quot;1024&amp;quot; h=&amp;quot;768&amp;quot; для ipad 1, 2, mini и w=&amp;quot;2048&amp;quot; h=&amp;quot;1536&amp;quot; для ipad 3&lt;br /&gt;
# автоматически потянем по ширине autoScX=&amp;quot;1&amp;quot; - изображение пропорционально отмасштабируется таким образом, чтобы ширина экрана соответствовала ширине экрана устройства.&lt;br /&gt;
# автоматически отпозиционируем по y - т.к. по ширине тянем autoPosY=&amp;quot;1&amp;quot;&lt;br /&gt;
# можно указать что по y пропорционально не надо тянуть autoScY=&amp;quot;0&amp;quot;, хотя это не обязательно&lt;br /&gt;
# укажем название nm=&amp;quot;ipad 1 2&amp;quot; и nm=&amp;quot;ipad 3&amp;quot; - удобно для проверки&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dev w=&amp;quot;1024&amp;quot; h=&amp;quot;768&amp;quot; autoPosY=&amp;quot;1&amp;quot; autoScX=&amp;quot;1&amp;quot; autoScY=&amp;quot;0&amp;quot; nm=&amp;quot;ipad 1 2&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dev w=&amp;quot;2048&amp;quot; h=&amp;quot;1536&amp;quot; autoPosY=&amp;quot;1&amp;quot; autoScX=&amp;quot;1&amp;quot; autoScY=&amp;quot;0&amp;quot; nm=&amp;quot;ipad 3&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''iPhone 4/4s'''&lt;br /&gt;
&lt;br /&gt;
# укажем разрешение экрана w=&amp;quot;960&amp;quot; h=&amp;quot;640&amp;quot; &lt;br /&gt;
# автоматически потянем по ширине autoScX=&amp;quot;1&amp;quot; - изображение пропорционально отмасштабируется таким образом, чтобы ширина экрана соответствовала ширине экрана устройства. Хотя можно тянуть и по y.&lt;br /&gt;
# автоматически отпозиционируем по y - т.к. по ширине тянем autoPosY=&amp;quot;1&amp;quot;&lt;br /&gt;
# можно указать что по y пропорционально не надо тянуть autoScY=&amp;quot;0&amp;quot;, хотя это не обязательно&lt;br /&gt;
# укажем название nm=&amp;quot;iphone 4&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;dev w=&amp;quot;960&amp;quot; h=&amp;quot;640&amp;quot; autoPosY=&amp;quot;1&amp;quot; autoScX=&amp;quot;1&amp;quot; autoScY=&amp;quot;0&amp;quot; nm=&amp;quot;iphone 4&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''iPhone 5'''&lt;br /&gt;
&lt;br /&gt;
# укажем разрешение экрана w=&amp;quot;1136&amp;quot; h=&amp;quot;640&amp;quot; &lt;br /&gt;
# автоматически потянем по ширине autoScY=&amp;quot;1&amp;quot; - изображение пропорционально отмасштабируется таким образом, чтобы высота экрана соответствовала высоте экрана устройства. &lt;br /&gt;
# автоматически отпозиционируем по x - т.к. по ширине тянем autoPosX=&amp;quot;1&amp;quot;&lt;br /&gt;
# можно указать что по x пропорционально не надо тянуть autoScX=&amp;quot;0&amp;quot;, хотя это не обязательно&lt;br /&gt;
# укажем название nm=&amp;quot;iphone 5&amp;quot; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;dev w=&amp;quot;960&amp;quot; h=&amp;quot;1136&amp;quot; autoPosX=&amp;quot;1&amp;quot; autoScY=&amp;quot;1&amp;quot; autoScX=&amp;quot;0&amp;quot; nm=&amp;quot;iphone 5&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получим такую конфигурацию файла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version='1.0' encoding='UTF-8' standalone='no'?&amp;gt;&lt;br /&gt;
&amp;lt;viewer&amp;gt;&lt;br /&gt;
    &amp;lt;banners platform_id=&amp;quot;2&amp;quot; instal_dir=&amp;quot;assets/games/iphone/&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;globaltop 	 /&amp;gt;&lt;br /&gt;
	&amp;lt;flurry game_id=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;dev w=&amp;quot;1024&amp;quot; h=&amp;quot;768&amp;quot; autoPosY=&amp;quot;1&amp;quot; autoScX=&amp;quot;1&amp;quot; autoScY=&amp;quot;0&amp;quot; nm=&amp;quot;ipad 1 2&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;dev w=&amp;quot;2048&amp;quot; h=&amp;quot;1536&amp;quot; autoPosY=&amp;quot;1&amp;quot; autoScX=&amp;quot;1&amp;quot; autoScY=&amp;quot;0&amp;quot; nm=&amp;quot;ipad 3&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;dev w=&amp;quot;960&amp;quot; h=&amp;quot;640&amp;quot; autoPosY=&amp;quot;1&amp;quot; autoScX=&amp;quot;1&amp;quot; autoScY=&amp;quot;0&amp;quot; nm=&amp;quot;iphone 4&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;dev w=&amp;quot;960&amp;quot; h=&amp;quot;1136&amp;quot; autoPosX=&amp;quot;1&amp;quot; autoScY=&amp;quot;1&amp;quot; autoScX=&amp;quot;0&amp;quot; nm=&amp;quot;iphone 5&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;default prj=&amp;quot;project.seproj&amp;quot; cut=&amp;quot;0&amp;quot; video_memory=&amp;quot;64715200&amp;quot; color_aabbggrr=&amp;quot;ff000000&amp;quot; scr=&amp;quot;0&amp;quot; lay=&amp;quot;0&amp;quot;/&amp;gt; &lt;br /&gt;
&amp;lt;/viewer&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если надо отключить полосу загрузки, которая показывается при переходе между экранами делается это добавлением параметра progressbar=&amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;default prj=&amp;quot;project.seproj&amp;quot; cut=&amp;quot;0&amp;quot; video_memory=&amp;quot;64715200&amp;quot; color_aabbggrr=&amp;quot;ff000000&amp;quot; scr=&amp;quot;0&amp;quot; lay=&amp;quot;0&amp;quot; ''progressbar=&amp;quot;0&amp;quot;'' /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Правила применения===&lt;br /&gt;
&lt;br /&gt;
# следует избегать одновременного масштабирования по x и по y&lt;br /&gt;
# если масштабируется изображение по x, то позиционирование должно быть по y&lt;br /&gt;
# использовать или ручной сдвиг, или позиционирование. Лучше позиционирование.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Plat.png|right]]&lt;br /&gt;
&lt;br /&gt;
== Подготовка проекта ==&lt;br /&gt;
Мы подошли к самому интересному :-), - это запуск проекта на мобильном устройстве и не только.&lt;br /&gt;
&lt;br /&gt;
При экспорте проекта осуществляется поддержка основных платформ:&lt;br /&gt;
&lt;br /&gt;
*iPhone&lt;br /&gt;
*Android&lt;br /&gt;
*Windows&lt;br /&gt;
*MacOS (Для сборки пакета необходима инсталляция на OS Mac)&lt;br /&gt;
*Play Book (Blackberry)&lt;br /&gt;
*Flash                            [[Файл:FlashPlayer.png|30px]]&lt;br /&gt;
&lt;br /&gt;
=== Создание нового проекта ===&lt;br /&gt;
&lt;br /&gt;
Перед  экспортом проекта необходимо проверить настройки проекта.&lt;br /&gt;
*Конфигурацию в файле app.icf&lt;br /&gt;
*Настройки шрифтов&lt;br /&gt;
*Наличие иконок&lt;br /&gt;
&lt;br /&gt;
Общая структура файла конфигурации приложения [[App.icf|app.icf описана здесь]]&lt;br /&gt;
&lt;br /&gt;
Основные параметры которые необходимо проверить &lt;br /&gt;
*'''MemSize'''=32000000 - значение памяти которое выделяем для приложения&lt;br /&gt;
*[Fonts]&lt;br /&gt;
&lt;br /&gt;
font_1=&amp;quot;1_arial_16&amp;quot; - шрифт и его номер который используется в проекте&lt;br /&gt;
&lt;br /&gt;
=== Экспорт ===&lt;br /&gt;
[[Файл:Exp11.png|right]]&lt;br /&gt;
Процедура экспорта с точки зрения пользователя одна из самых простых и требует минимальных настроек, однако скрытые операции достаточно сложны и ресурсоемки.    Экспорт проекта необходимо проводить каждый раз перед созданием исполняемых файлов.&lt;br /&gt;
&lt;br /&gt;
Основные этапы &lt;br /&gt;
*Выполняется сжатие графики при необходимости &lt;br /&gt;
*Очистка базы ресурсов от неиспользуемой графики&lt;br /&gt;
*Запаковка графики в текстуры и контейнер&lt;br /&gt;
&lt;br /&gt;
Итак, перед экспортом проекта необходимо сохранить все изменения сделанные в проекте ранее.&lt;br /&gt;
&lt;br /&gt;
Настройки экспорта состоят из:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Exp12.png|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Параметров сжатия графики''' - Можно указывать значение от 1 до 0 для осей '''x'''(width) '''y'''(height). Указанный параметр '''x'''= 0,75 будет соответствовать 75% по ширине от исходного размера лейаута. Сжатие также возможно и непропорциональное т е с указанием разных значений по осям (не  рекомендуется использовать). &lt;br /&gt;
Пример использования: вы создали проект для iPad retina с размерами лейаута (2024x1536), теперь вы хотите сформировать исполняемый файл для Android планшета с разрешением экрана 1024х768. Для этого необходимо указать в параметрах '''x''' и '''y''' значение равное 0,5 (50%). В результате экспорта получим графику с разрешением 1024х768 и все параметры проекта будут пересчитаны под данное разрешение.&lt;br /&gt;
&lt;br /&gt;
'''Результат:''' значительная экономия в размерах .apk файла и огромная экономия оперативной памяти на устройстве.&lt;br /&gt;
       &lt;br /&gt;
'''Тип экспорта'''  &lt;br /&gt;
*'''One project file''' - формируется один XML файл описывающий проект. Рекомендуется использовать второй тип при значительных размерах проекта.&lt;br /&gt;
     &lt;br /&gt;
*'''Split project on screens, load partly''' - проект будет разбит на отдельные файлы описывающие экраны, загружаться файлы будут в порядке использования (вызова) в проекте. В результате получаем увеличение начальной загрузки проекта и использование меньшего объема оперативной памяти.&lt;br /&gt;
&lt;br /&gt;
'''Параметры запаковки графики'''&lt;br /&gt;
*'''Packege Type''' -  упаковка ресурсов в фаил с типом DAT. Обеспечиваем защиту ресурсов проекта от несанкционированного доступа. Увеличиваем производительность при операциях чтения файлов ресурсов с твердотельного носителя.&lt;br /&gt;
*'''Texture Type''' - упаковка графических файлов в текстуры. Необходимо для уменьшения используемого объема оперативной памяти.&lt;br /&gt;
&lt;br /&gt;
'''Export to folder''' - Путь для экспорта. Для создания папки с экспортом необходимо указать любой путь (папку) на диске. Будет создана папка  [[Файл:Proj_folder.png]]&lt;br /&gt;
&lt;br /&gt;
Структура папки:&lt;br /&gt;
&lt;br /&gt;
[[Файл:TreeFolder.png]]&lt;br /&gt;
&lt;br /&gt;
'''Select platform''' - необходимо выбрать платформу для которой будем собирать проект. &lt;br /&gt;
&lt;br /&gt;
 '''Примечание:''' ''Для сборки под различный платформы необходимо установить Marmalade SDK''   [[Установка и настройка|см. инструкцию]] &lt;br /&gt;
  при этом не нужно указывать путь для экспорта (оставить поле пустым). В результате запустится скрипт сборки исполняемого пакета, &lt;br /&gt;
  это будет видно по черным экранам с ходом выполнения процесса сборки.&lt;br /&gt;
&lt;br /&gt;
'''Итак:''' Сохраняем открытый проект с выполненными уроками &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Export&amp;lt;/tt&amp;gt; настраиваем параметры как показано на картинке&lt;br /&gt;
&lt;br /&gt;
[[Файл:Export_window.png]]&lt;br /&gt;
&lt;br /&gt;
Нажимаем кнопку &amp;lt;tt&amp;gt;Ok&amp;lt;/tt&amp;gt; и ждем несколько минут. &lt;br /&gt;
Процесс экспорта будет отображаться в окне&lt;br /&gt;
&lt;br /&gt;
[[Файл:Export_progres.png]]&lt;br /&gt;
&lt;br /&gt;
В результате экспорта у вас должно открыться приложение iTunes с добавленным проектом Absolutist с иконкой [[Файл:114.png|50px]]&lt;br /&gt;
&lt;br /&gt;
'''Поздравляю Вы это сделали!!'''&lt;br /&gt;
&lt;br /&gt;
Если вы не получили ожидаемого результата необходимо проверить следующее:&lt;br /&gt;
# Для сборки пакетов под iPhone платформу вы должны иметь сертификат разработчика&lt;br /&gt;
# Проверить ход выполнения настройки по [[Установка и настройка|см. инструкцию]]&lt;br /&gt;
# Проверить и\или установить iTunes&lt;br /&gt;
&lt;br /&gt;
Если вы обладатель мобильного устройства на системе Android необходимо  указать ''Android''  в разделе '''Select platform''' и вы получите фаил absolutist.apk&lt;br /&gt;
&lt;br /&gt;
'''Поздравляю Вы это сделали!!'''&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
* Настройте параметры viever.xml для корректной работы на вашем мобильном устройстве (если конечно оно у вас есть)&lt;br /&gt;
* Настройте параметры viever.xml для системы Windows под рабочий монитор&lt;br /&gt;
* Определите какое разрешение для ваших игр наиболее подходящее&lt;br /&gt;
* Создайте проект для вашего мобильного устройства &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Работа с эффектами|Урок 9]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Создание простой адвентюры|Урок 11]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B3%D1%80%D1%8B_%C2%ABHidden_Object_Game%C2%BB&amp;diff=3349</id>
		<title>Создание игры «Hidden Object Game»</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B3%D1%80%D1%8B_%C2%ABHidden_Object_Game%C2%BB&amp;diff=3349"/>
		<updated>2013-03-05T10:42:49Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Детальная настройка объектов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Редактор текстовых ресурсов|Урок 5]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Настройка миниигр|Урок 7]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' Изучить настройки объектов HiddenObjectList, HiddenObject и  Table для типа механики Hidden Object Game на базе создания уровня из игры Travel.&lt;br /&gt;
 &lt;br /&gt;
'''Задача:''' Создать уровень игры содержащей 10 поисковых объектов расположенных на одном бэкграунде (фоне). При инициализации сцены обеспечить размещение 5 объектов для поиска. &lt;br /&gt;
&lt;br /&gt;
== Создание экрана и сцены в игровом проекте ==&lt;br /&gt;
&lt;br /&gt;
1. Запустить SceneEditor.&lt;br /&gt;
&lt;br /&gt;
2. В меню &amp;lt;tt&amp;gt;Проект&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Загрузить&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Learning.seproj&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Кликнув правой кнопкой мыши по ранее созданному экрану Lesson_06.1, создать экран Lesson_07.&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 1.png]]&lt;br /&gt;
&lt;br /&gt;
4. В экране Lesson_07 создать новую сцену* 07 с разрешением 960*640, в которую (через ResourcesEditor) добавить графические ресурсы из папки Sources\Lesson_07 (см. подготовка к работе [[Создание проекта]])&lt;br /&gt;
&lt;br /&gt;
* Для корректной работы на мобильном устройстве необходимо настроить параметр.&lt;br /&gt;
&lt;br /&gt;
* Графические объекты должны разместиться точно на местах предназначенных для их «Прятанья».&lt;br /&gt;
&lt;br /&gt;
5. Создать папку Lesson_07  в базе текстовых описаний с помощью TextEditor.&lt;br /&gt;
&lt;br /&gt;
6. Добавить в папку Lesson_07 10 текстовые записи, соответствующие именам поисковых объектов.&lt;br /&gt;
&lt;br /&gt;
7. Присвоить каждой текстовой записи значение Word, Sentence-En, добавить графическое отображение поискового объекта с типом icon1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 2.png]]  [[Файл:07 3.png]]&lt;br /&gt;
&lt;br /&gt;
== Общая настройка объектов ==&lt;br /&gt;
&lt;br /&gt;
1. Для всех поисковых графических объектов изменить тип с image на HiddenObject.&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 4.png]]&lt;br /&gt;
&lt;br /&gt;
2. Создать специальные объекты Table и HiddenList. Для этого необходимо перенести графическое изображение table с последующим изменением типа с image на Table. Название объекта изменить на HOT**&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 5.png]]&lt;br /&gt;
&lt;br /&gt;
3. Для объекта HiddenList перенести любое графическое изображение с последующим изменением типа с image на HiddenList и удалением графического ресурса из поля настроек (res)*. Название объекта изменить на HOL**&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 6.png]]&lt;br /&gt;
&lt;br /&gt;
*Для данного типа объекта не требуется графический ресурс.&lt;br /&gt;
&lt;br /&gt;
**Имена для специальных объектов могут использоваться любые.&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 10.png]]&lt;br /&gt;
&lt;br /&gt;
== Детальная настройка объектов ==&lt;br /&gt;
&lt;br /&gt;
1. Описание HiddenObject.&lt;br /&gt;
&lt;br /&gt;
''HiddenObject'' поисковый объект, взаимодействующий со списком HiddenList. Каждому поисковому объекту необходимо указать графический ресурс (картинку), идентификатор объекта HiddenList и идентификатор текстового ресурса (строки описания) в HiddenList.&lt;br /&gt;
&lt;br /&gt;
Необходимо выбрать используемый объект с именем HOL (тип HiddenObjectList) в поле list.&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 7.png]]&lt;br /&gt;
&lt;br /&gt;
''текстID'' – выводимый в списке текст - идентификатор из редактора строк (txtid);&lt;br /&gt;
&lt;br /&gt;
''текст'' – обычный текст (аналогично txtID, для быстрых экспериментов) (txtid);&lt;br /&gt;
&lt;br /&gt;
''list'' – необходимо выбрать объект с типом HiddenList для обеспечения связи объектов;&lt;br /&gt;
&lt;br /&gt;
''flyer'' – объект типа flyer, который нуждо запустить на работу при клике на поисковй объект (огонечки). Эти флаеры запускаются при удачном клике (объект нашли). Неудачный клик обрабатывает HiddenList. Если не задан, используется fly_ok объекта HiddenList.(objid);&lt;br /&gt;
&lt;br /&gt;
''actor'' – объект, который должен отобразить анимацию спрятанного объекта после удачного клика на него (обычно это машина состояния); если его нет выполняется предопределенное поведение;&lt;br /&gt;
&lt;br /&gt;
''тип'' – используется для логического разделения объектов при обработке HiddenList.&lt;br /&gt;
&lt;br /&gt;
2. Описание HiddenObjectList.&lt;br /&gt;
&lt;br /&gt;
Список поисковых объектов (Hidden), которые надо найти в хиден-сцене. Каждый поисковый объект на сцене связывают со списком. Объектов может быть больше, чем будет показано в данной игровой сессии (поле &amp;quot;объектов&amp;quot;). В этом случае они выбираются случайным образом. Запоминаются те из них, по которым произошёл клик (увеличивается счетчик их кликов). При следующем заходе на сцену, поисковые слова сортируются по возрастанию числа кликов и снова активизируется количество спрятанных объектов, указанных в поле &amp;quot;количество&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
HiddenList определяет основные параметры для настройки HiddenObject (скорость полета и т.п.). В дальнейшем, при необходимости, эти же параметры можно добавить в HiddenObject, чтобы для данного объекта они &amp;quot;перебивали&amp;quot; общие значения для всех.&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 8.png]]&lt;br /&gt;
&lt;br /&gt;
3. Описание Table&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 9.png]]&lt;br /&gt;
&lt;br /&gt;
4. Подготовка спрятанных объектов: &lt;br /&gt;
&lt;br /&gt;
''num'' – максимальное количество объектов, участвующие в поиске. (int)&lt;br /&gt;
&lt;br /&gt;
''hide'' – если 1, то делать невидимыми объекты, не участвующие в поиске. (int) &lt;br /&gt;
&lt;br /&gt;
5. Визуальные параметры списка: &lt;br /&gt;
&lt;br /&gt;
''table'' – идентификатор объекта Table. (objid)&lt;br /&gt;
&lt;br /&gt;
''txtKn'' – тип отображения (0-слово,1-ассоциация, 2-иконка, 3-иконка). (int)&lt;br /&gt;
&lt;br /&gt;
''cross'' – зачеркивать найденный элемент списка. Eсли 0 (по умолчанию), то найденный элемент исчезает, иначе &amp;quot;зачеркивается&amp;quot;.(int).&lt;br /&gt;
&lt;br /&gt;
Зачеркивание может быть нескольких видов: перечеркнутый текст, иконка другого вида (alpha, цвет, картинка) TODO.&lt;br /&gt;
 &lt;br /&gt;
6. Параметры, общие для всех спрятанных объектов:&lt;br /&gt;
&lt;br /&gt;
''die'' –  тип исчезания при удачном клике на объект (если нет актера) (int): &lt;br /&gt;
&lt;br /&gt;
0: просто исчезает;&lt;br /&gt;
&lt;br /&gt;
1: летит к пункту с описанием в списке HiddenList;&lt;br /&gt;
&lt;br /&gt;
2: улетает в случайном направлении;&lt;br /&gt;
&lt;br /&gt;
3: улетает к заданным координатам (fx, fy).&lt;br /&gt;
&lt;br /&gt;
vm - скорость движения при полете к списку предметов после клика в px/sec (float) &lt;br /&gt;
&lt;br /&gt;
vr - скорость вращения при полете к списку предметов после клик в град/sec (float) &lt;br /&gt;
&lt;br /&gt;
fw - финальная ширина к которой надо уменьшится при подлете к финальной точке (int) &lt;br /&gt;
&lt;br /&gt;
fh - финальная высота к которой надо уменьшится при подлете к финальной точке (int). Объект не должен изменять своих пропорций, поэтому fw или fh (или оба) всегда отрицательны. &lt;br /&gt;
&lt;br /&gt;
fx - финальная координата x, к которой объект должен перелететь, при удачном клике (см. тип исчезания). (int) &lt;br /&gt;
&lt;br /&gt;
fy - финальная координата x, к которой объект должен перелететь, при удачном клике (см. тип исчезания). (int)&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
1. Щелкнув правой кнопкой мыши по экрану Lesson_07, создать новый экран Lesson_07.1&lt;br /&gt;
&lt;br /&gt;
2. Создать новую сцену (с названием 07.1).&lt;br /&gt;
&lt;br /&gt;
3. Скопировать все объекты из сцены 07 (экрана Lesson_07).&lt;br /&gt;
&lt;br /&gt;
4. Вставить скопированые объекты в новую сцену 07.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:07 11.png]]&lt;br /&gt;
&lt;br /&gt;
5. В новой сцене:&lt;br /&gt;
&lt;br /&gt;
a) добавить еще 3 графических ресурса и перевести в тип HiddenObject;&lt;br /&gt;
&lt;br /&gt;
b) разместить на местах предназначенных для их «Прятанья»;&lt;br /&gt;
&lt;br /&gt;
c) добавить текстовое описание в TextEditor;&lt;br /&gt;
&lt;br /&gt;
e) установить время игры 20 секунд, паузу 2 секунды с переходом на экран Lesson_07.1.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Редактор текстовых ресурсов|Урок 5]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Настройка миниигр|Урок 7]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Checkbox_%D0%BA%D0%B0%D0%BA_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B9&amp;diff=3328</id>
		<title>Checkbox как машина состояний</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Checkbox_%D0%BA%D0%B0%D0%BA_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B9&amp;diff=3328"/>
		<updated>2013-03-05T09:58:03Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Создание чекбокса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание экранов, сцен. Работа с кнопками|Урок 2]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' изучить понятие машины состояний на примере объекта Checkbox&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* Cоздать новый экран и сцену для этого урока.&lt;br /&gt;
* При помощи объекта Checkbox заставит слонёнка поворачивать голову.&lt;br /&gt;
* Воспроизвести этого же слонёнка при помощи машины состояний.&lt;br /&gt;
* Добавить разнообразия в поведении слонёнка.&lt;br /&gt;
* Создать эмоциональную рожицу. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Checkbox ==&lt;br /&gt;
&lt;br /&gt;
=== Подготовка ===&lt;br /&gt;
&lt;br /&gt;
Начнём урок, как обычно,  с открытия проекта lessons. В нём добавим новый экран lesson_3&lt;br /&gt;
со сценой stg_main, так как это было описано в предыдущем [[Создание экранов, сцен. Работа с кнопками|уроке]]. Поместим из редактора ресурсов на сцену любой фон из папки этого или предыдущего  урока. Для примера далее используется &amp;quot;лунный пейзаж&amp;quot; (картинка '''bg''').&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_chk1.png|right]]&lt;br /&gt;
Поверх фона перетащите из редактора ресурсов тело слонёнка (ресурс '''body''')&lt;br /&gt;
и затем его голову '''head_1'''. Расположите их так, чтобы получился примерно целый слонёнок.&lt;br /&gt;
Переименуйте эти 2 объекта в '''elephant_body''' и '''elephant_head_chk'''&lt;br /&gt;
(помним о необходимости осмысленности в именах объектов?). Чтобы голова и тело стали &amp;quot;целым&amp;quot; существом, стоит в дереве проекта (Layout) перетащить голову на тело, сделав её подобъектом.&lt;br /&gt;
Теперь, если на сцене начать таскать тело слоненка, то голова будет послушно следовать за ним.&lt;br /&gt;
Хотя, если схватить за голову, то её легко можно оторвать. Так, что будьте со слоненком поласковее.&lt;br /&gt;
&lt;br /&gt;
=== Создание чекбокса ===&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_chk.png|right]]&lt;br /&gt;
Зайдем в свойство головы '''elephant_head_chk''' и изменим её тип на '''checkbox'''.&lt;br /&gt;
Раскроем треугольнички возле свойств &amp;quot;'''не отмечена (внешний вид)'''&amp;quot; и &amp;quot;'''отмечена (внешний вид)'''&amp;quot;. Поля '''не отмечена (внешний вид)''' и '''отмечена (внешний вид)''' содержат по три ресурса (&amp;lt;tt&amp;gt;up, down и over&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Не отмечена (внешний вид):'''&lt;br /&gt;
&amp;lt;tt&amp;gt;up&amp;lt;/tt&amp;gt; - так выглядит чекбокс, пока мы на него не нажали;&lt;br /&gt;
&amp;lt;tt&amp;gt;down&amp;lt;/tt&amp;gt; - так выглядит чекбокс, если мы на него нажмём, но не откликнем в не нажатом состоянии;&lt;br /&gt;
&amp;lt;tt&amp;gt;over&amp;lt;/tt&amp;gt; – так выглядит чекбокс, если мы на него наведём мышкой, в не нажатом состоянии.&lt;br /&gt;
&lt;br /&gt;
'''Отмечена (внешний вид):'''&lt;br /&gt;
&amp;lt;tt&amp;gt;up&amp;lt;/tt&amp;gt; - так выглядит чекбокс, когда мы на него нажали;&lt;br /&gt;
&amp;lt;tt&amp;gt;down&amp;lt;/tt&amp;gt; - так выглядит чекбокс, если мы на него нажмём, но не откликнем в нажатом состоянии;&lt;br /&gt;
&amp;lt;tt&amp;gt;over&amp;lt;/tt&amp;gt; – так выглядит чекбокс, если мы на него наведём мышкой, в нажатом состоянии.&lt;br /&gt;
Разместим поверх окна редактор ресурсов и перетащим в поле '''up''' первой группы (не отмечена) картинку '''head_1''', а в такое же поле второй группы (отмечена) картинку '''head_2'''.&lt;br /&gt;
Делается это также, как и формирование внешнего вида кнопки из предыдущего [[Создание экранов, сцен. Работа с кнопками|урока]].&lt;br /&gt;
&lt;br /&gt;
Сохраняем проект и запускаем вьювер. При клике на голову слонёнка она должна туда-сюда поворачиваться. Вы узнали в этом поведении чекбокс?&lt;br /&gt;
Обычно  чекбоксы (сheckbox) это такие квадратики в которых ставят или убирают галочку.&lt;br /&gt;
Конечно и в игровом приложении может понадобиться подобный чекбокс.&lt;br /&gt;
В этом случае необходимо будет подготовить соответствующие картинки.&lt;br /&gt;
Простые игровые объекты (типа подобной головы) часто могут находиться в двух состояниях (выбран, не выбран). Они не похожи на чекбокс внешним видом, но являются им в силу правил своего поведения.&lt;br /&gt;
&lt;br /&gt;
Теперь наша задача состоит в воспроизведении поведения чекбокса при помощи объекта&lt;br /&gt;
другого типа - '''[[Machine|машины состояний]]'''. Мы не только повторим вращающего головой слоненка,&lt;br /&gt;
но и придадим его поведению новые функции.&lt;br /&gt;
&lt;br /&gt;
== Машины состояний ==&lt;br /&gt;
&lt;br /&gt;
=== Немного теории ===&lt;br /&gt;
&lt;br /&gt;
''Машина состояний (state machine)'' является универсальным инструментом для программирования в редакторе сцен сложного поведения объектов.  Логика поведения машины состояний разбивается на отдельные узлы (состояния). Объект всегда находится строго в одном состоянии. Переход из одного состояния в другое происходит либо в результате внешнего воздействия на объект, либо в результате окончания некоторых процессов протекающих внутри объекта. &lt;br /&gt;
&lt;br /&gt;
Любая машина состояний может быть изображена в виде графа с кружочками и стрелками. Настоятельно рекомендуется рисовать такие графы в процессе проектирования машины, а лишь затем переходить к их описанию в окне редактора состояний. У машины всегда активно строго одно состояние (ниже это изображено на левом рисунке темным кружком):&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Файл:def_states.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Машина состояний не обладает памятью. Это означает, что для анализа того, что произойдет в данном состоянии, неважно как мы в него попали, и какова была предыстория переходов. Важно, только, что мы находимся в этом состоянии. Такое отсутствие памяти упрощает анализ логики машины, так как каждый раз мы концентрируемся на одном конкретном состоянии, а всю логику работы разбиваем на отдельные кирпичики-состояния.&lt;br /&gt;
&lt;br /&gt;
Выше на правом рисунке изображено некоторое состояние. При входе в него, происходит инициализация состояния. Если на объект оказываются внешние воздействия, то он может покинуть состояние. Наконец, внутри состояния могут работать различные процессы.&lt;br /&gt;
&lt;br /&gt;
=== Проектирование машины ===&lt;br /&gt;
&lt;br /&gt;
Перейдем теперь от нудной теории к веселой практике. Посмотрим внимательно на поведение головы слоненка, которая является чекбоксом. На самом деле это типичная машина состояний с двумя состояниями. Назовём их '''left''' и '''right''' по направлению ориентации головы слонёнка. Сначала слоненок находится в состоянии  left (смотрит влево). Когда мы кликаем в голову, машина переходит в новое состояние right (голова поворачивается вправо). Это поведение жестко запрограммированно внутри объекта checkbox. Попробуем добиться того же эффекта, используя универсальный игровой объект &amp;quot;машина состояний&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Прежде всего не поленимся нарисовать весёлый граф состояний и переходов между ними:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states.png|center|300px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда на бумаге всё стало ясно :), необходимо эту машину создать в редакторе.&lt;br /&gt;
&lt;br /&gt;
=== Создание машины ===&lt;br /&gt;
&lt;br /&gt;
Чтобы не тратить время на редактор ресурсов, скопируем уже существующего слонёнка. &lt;br /&gt;
Для этого станем в дереве проекта на его тело (elephant_body) и правой кнопкой мыши вызовем меню.&lt;br /&gt;
В нём выбираем пункт Copy. Затем повторяем операцию, но выбираем уже пункт вставить (&amp;quot;''Paste after curent object''&amp;quot;). В дереве проекта появятся два слоненка. Причем оба будут иерархичной веткой,&lt;br /&gt;
состоящей из &amp;quot;тела&amp;quot; (elephant_body) и подобъекта &amp;quot;голова&amp;quot; (elephant_head).&lt;br /&gt;
А вот на сцене редактора видимых изменений не произойдет.&lt;br /&gt;
Мы помним, что при копировании объектов копируются также все их свойства.&lt;br /&gt;
Поэтому на сцене, на самом деле, два слоненка, но они имеют одинаковые координаты.&lt;br /&gt;
Поэтому хватаемся за тело и тащим его правее на свободное место:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_2elephants.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Левого слона оставим чекбоксом, а голову правого превратим в машину состояний.&lt;br /&gt;
Для этого кликаем в голову и меняем её тип с checkbox на '''machine''' (поле '''тип''' в панели Properties). Поменяем также имя головы, укоротив его до &amp;quot;'''elephant_head'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно попробовать посмотреть, что у нас получилось. Сохраняем проект и запускаем вьювер.&lt;br /&gt;
Упс... Голова исчезла, а вверху экрана появилось малопонятное ругательство,&lt;br /&gt;
из которого можно заключить, что у объекта elephant_head состояний то и нет.&lt;br /&gt;
&lt;br /&gt;
Таким образом, не достаточно создать машину, её еще необходимо научить ездить.&lt;br /&gt;
Поэтому закрываем окно вьювера и начинаем заниматься программированием.&lt;br /&gt;
&lt;br /&gt;
=== Программирование состояний ===&lt;br /&gt;
&lt;br /&gt;
Сделаем активной голову правого слонёнка, которая стала машиной состояний.&lt;br /&gt;
В панели её свойств кликаем на поле '''states''', а затем на появившиеся в нём три точки (помним [[Введение в AppSalute Сreator|первый урок]]?). В результате этих действий, выскочит окошко в котором мы будем создавать состояния &lt;br /&gt;
и их программировать. Два раза нажмём кнопку '''Добавить состояние''' в левом нижнем углу окна:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате появилось две области, каждая из которых будущее состояние головы.&lt;br /&gt;
Зададим имена состояний, введя названия left и right в полях '''имя''' каждой области.&lt;br /&gt;
Затем станем мышкой на поле '''имя''' левого состояния и нажмём правую кнопку мышки.&lt;br /&gt;
Появится большое меню, в котором кликнем на первый пункт &amp;quot;''draw - внешний вид''&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В левом состояни под его именем добавится команда '''draw'''.&lt;br /&gt;
Эта команда управляет способом отрисовки машины в данном состоянии.&lt;br /&gt;
Нам потребуется ещё одна команда '''click''', которую добавим аналогичным&lt;br /&gt;
образом (правая кнопка мыши на команде draw).&lt;br /&gt;
&lt;br /&gt;
В команды необходимо добавить параметры, определяющие их свойства.&lt;br /&gt;
Для этого кликнем справа от draw и затем ещё раз на появившиеся три точки.&lt;br /&gt;
В выскочившем диалоговом окне поставим галочку возле пункта &amp;quot;''графический ресурс''&amp;quot;&lt;br /&gt;
и нажмем кнопку Ok:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states_dlg.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Аналогично кликаем на команду '''click''' и добавляем ей параметр &amp;quot;''go - новое состояние''&amp;quot;.&lt;br /&gt;
Те же действие проделываем с правым состоянием. В результате должно получиться:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Осталось заполнить поля команд. В поле go команды click левого состояния пишем '''right''',&lt;br /&gt;
а в тоже поле правого состояния пишем '''left'''. Это означает, что при клике машина должна перейти  в то состояние, которое указано в поле go. Имена состояний вводятся с клавиатуры руками,&lt;br /&gt;
поэтому необходимо следить за правильностью их написания.&lt;br /&gt;
&lt;br /&gt;
Теперь откроем окно редактора ресурсов. Сделав активным значение поля '''res''' команды draw левого состояния, перетащим в него из ресурсов картинку '''head_1'''. В аналогичное поле правого состояния перетащим картинку '''head_2'''. Делается это точно так, как мы задавали поля внешнего вида кнопки или чекбокса в панели Properties. Финальный результат наших действий&lt;br /&gt;
приводит к следующей машине (мы не будем больше приводить всё окно редактирования состояний):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Насладимся результатами нашей работы. Закроем окно с состояниями (крестик в правом верхнем углу).&lt;br /&gt;
Сохраним проект и запустим вьювер (для ускорения можно не закрывать окно состояний, а кликнуть на иконки сохранения и запуска вьювера внизу этого окна). &lt;br /&gt;
В результате, во вьювере оба слоненка должны вести себя абсолютно одинаково.&lt;br /&gt;
&lt;br /&gt;
=== Ускорение работы и отладка ===&lt;br /&gt;
&lt;br /&gt;
При программировании состояний машины можно использовать некоторые приёмы&lt;br /&gt;
ускоряющие процесс. Так, в примере с головой, команды обоих состояний выглядят одинаково.&lt;br /&gt;
Поэтому имеет смысл сначала создать одно состояние (left),&lt;br /&gt;
наполнить его командами и параметрами. Затем нажать кнопку &amp;quot;Скопировать состояние&amp;quot;.&lt;br /&gt;
Состояние продублируется и останется только подправить его параметры.&lt;br /&gt;
&lt;br /&gt;
Машины состояний, как и другие объекты, можно копировать вместе со всеми их состояниями. Поэтому, если уже есть  машина, похожая на ту, которую надо создать, мы её просто копируем и подправляем команды и их параметры.&lt;br /&gt;
&lt;br /&gt;
Если машина создается из картинки, изменением типа, то не стоит глазами искать слово '''machine''' в списке типов. Необходимо на клавиатуре нажать клавишу '''M''' и затем '''Enter'''.&lt;br /&gt;
Вообще, активнее пользуйтесь горячими клавишами. Например, если в дереве проекта (Layout)&lt;br /&gt;
активна машина, то нажатие '''Ctrl+M''' приведет к открытию окна редактирования состояний.&lt;br /&gt;
&lt;br /&gt;
При запуске проекта во вьювере можно следить за отладочной информацией о состояниях объектов.&lt;br /&gt;
Это помогает понять почему что-то работает не так как надо.&lt;br /&gt;
Запустим вьювер и нажмём кнопку &amp;quot;'''F1'''&amp;quot;. Появится небольшое меню с командами, которое гасится повторным нажатием F1. Кнопка &amp;quot;'''S'''&amp;quot;  (на клавиатуре) выводит список всех активных объектов на сцене. Если текст информации совпадает с текстом фона, то эта информация будет плохо видна. В этом случае необходимо несколько раз нажать клавишу &amp;quot;'''C'''&amp;quot;, меняя по кругу цвет текста.&lt;br /&gt;
&lt;br /&gt;
Первые две колонки отладочной информации, это имя сцены и объекта. В колонке state видно текущее состояние. Понажимайте на голову слоненка, наблюдая как его состояние меняется с left на right и наоборот.&lt;br /&gt;
&lt;br /&gt;
Запустите теперь во вьювере экран первого урока и нажмите &amp;quot;'''S'''&amp;quot;.&lt;br /&gt;
Покликайте на слоненка, его голову и солнышко, наблюдая как изменяется информация об этих машинах.&lt;br /&gt;
Так как внутри состояний могут происходить некоторые процессы, их&lt;br /&gt;
можно затормозить, нажав '''пробел''' (в этот момент солнышко остановится). Повторное нажатие пробела, снова запустит все процессы.&lt;br /&gt;
&lt;br /&gt;
=== Немного нарвоучений ===&lt;br /&gt;
&lt;br /&gt;
Освоив машины состояний, дизайнеры обычно применяют их там где надо и там где не надо.&lt;br /&gt;
Например, в этом уроке быстрее оформить голову слонёнка как чекбокс,&lt;br /&gt;
а не как машину состояний. Поэтому прежде чем хвататься за шестеренку, стоит сначала подумать&lt;br /&gt;
о том, каким игровым объектом можно реализовать данное поведение.&lt;br /&gt;
&lt;br /&gt;
При работе над проектами, некоторые машины иногда повторяются. Их конечно можно копировать, подправляя соответствующие поля команд. Однако, на определенном этапе, возможно, стоит начать дергать руководство и С++ программистов, чтобы они оформили эту &amp;quot;типовую&amp;quot; машину в виде отдельного игрового объекта. Как это, например, сделано с чекбоксом или кнопкой.&lt;br /&gt;
&lt;br /&gt;
Если Вы пытаетесь сделать что-то при помощи машины состояний, но получается очень громоздкий объект (куча состояний, переходов, команд), значит Вы делаете что-то не так.&lt;br /&gt;
Либо машина плохо спроектирована, либо вообще эту задачу не стоит решать при помощи машин.&lt;br /&gt;
Возможно это уже миниигра и необходимо подключать C++ программистов для её реализации.&lt;br /&gt;
&lt;br /&gt;
Стоит также помнить, что работа над проектом это коллективный процесс. &lt;br /&gt;
Спустя некоторое время Вашу работу может подправлять другой человек.&lt;br /&gt;
Да и Вы к этому моменту станете другим человеком и все забудете. &lt;br /&gt;
Поэтому относитесь максимально ответственно к процессу документирования.&lt;br /&gt;
Это означает выбор осмысленных имен объектов и заполнение поля &amp;quot;'''описание'''&amp;quot;,&lt;br /&gt;
находящееся у большинства сложных объектов в Properties.&lt;br /&gt;
Для машин это поле находится в окне редактирования состояний, сразу под состояниями.&lt;br /&gt;
Например, в нашем случае текст документации может выглядеть примерно так: &amp;quot;''При клике на голову она поворачивается влево или в право''&amp;quot;.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''Правильно работающий незадокументированный проект - это плохой проект.'''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Усложняем машину ==&lt;br /&gt;
&lt;br /&gt;
=== Непослушный слоненок ===&lt;br /&gt;
&lt;br /&gt;
Реабилитируем немного нашу деятельность по воспроизводству стандартного чекбокса при помощи машины состояний.&lt;br /&gt;
Для этого придадим голове правого слонёнка дополнительное поведение, которым чекбокс не обладает.&lt;br /&gt;
Пусть правый слоненок нежно относится к левому и не хочет на долго от него отворачиваться.&lt;br /&gt;
Поэтому, повернувшись после клика вправо, он затем сам снова поворачивается влево.&lt;br /&gt;
&lt;br /&gt;
Для реализации этого поведения добавим в состояние '''right''' команду '''wait''' c параметром '''t''', равным 1000 миллисекундам (что равно одной секунде) и параметром '''go'''=left&lt;br /&gt;
В результате должна получиться такая машина:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
До сих пор, переход из одного состояния в другое происходил в результате клика на машину.&lt;br /&gt;
Это было внешнее воздействие.&lt;br /&gt;
Однако, переход между состояниями может происходить в результате некоторых процессов внутри состояния.&lt;br /&gt;
В нашем случае, при заходе в правое состояние начинает работать команда '''wait'''. Она&lt;br /&gt;
ждет в течении времени, определяемом полем '''t'''. Затем, если задано поле '''go''', машина сама инициирует переход в соответствующее состояние.&lt;br /&gt;
&lt;br /&gt;
Сохраните и запустите во вьювере этот проект. Кликая на головы обоих слонят,&lt;br /&gt;
сравните их поведение.&lt;br /&gt;
&lt;br /&gt;
=== Сумашедший слоненок ===&lt;br /&gt;
&lt;br /&gt;
В заключение, поиздеваемся немного над слоненком, сделав его голове&lt;br /&gt;
такую машину состояний:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states6.png]]&lt;br /&gt;
&lt;br /&gt;
В результате слонёнок начнет нерегулярно крутит головой то влево, то вправо.&lt;br /&gt;
В каждом состоянии он будет находиться  случайное время от 1-й до 3-х секунд.&lt;br /&gt;
Это определяется параметрами '''t''' и '''dt''', которые задают&lt;br /&gt;
интервал времени от t-dt до t+dt.&lt;br /&gt;
&lt;br /&gt;
Заметим, что, не смотря на самовольное вращение головой,&lt;br /&gt;
слоненок по-прежнему реагирует на клики мышки.&lt;br /&gt;
&lt;br /&gt;
== Машина эмоций ==&lt;br /&gt;
&lt;br /&gt;
Выше мы рассмотрели несколько машин состояний, не сильно отличающихся&lt;br /&gt;
от бездушного чекбокса. &lt;br /&gt;
Приведем теперь пример машины, которую и машиной неловко назвать.&lt;br /&gt;
Это существо, обладающее целым спектром эмоций и реакций на внешнее воздействие:&lt;br /&gt;
&lt;br /&gt;
[[файл:smiles.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Разберемся, что нарисовано на картинке. Каждая рожица - это отдельное состояние,&lt;br /&gt;
отражающее настроение нашего существа. Стрелки - переходы между состояниями&lt;br /&gt;
по командам '''click''' и '''wait'''.&lt;br /&gt;
&lt;br /&gt;
Начинает работать существо из состояния [[файл:s1.png|24px]].&lt;br /&gt;
Как и любые существа, Оно любит внимание. &lt;br /&gt;
Поэтому, при клике переходит в более жизнерадостное состояние [[файл:s2.png|24px]].&lt;br /&gt;
Если больше на него не кликать, Оно опять вернется в начальное состояние,&lt;br /&gt;
а спустя еще какое то время начнет плакать [[файл:s5.png|24px]], из-за полного отсутствия&lt;br /&gt;
внимания. Впрочем, небольшой клик - и Оно снова довольно жизнью.&lt;br /&gt;
&lt;br /&gt;
Обратим внимание на последовательность состояний [[файл:s3.png|24px]], переходящих в &lt;br /&gt;
недовольную гримасу [[файл:s4.png|24px]]. Излишнее внимание также вредно, как &lt;br /&gt;
и его отсутствие. &lt;br /&gt;
&lt;br /&gt;
В качестве упражнения, попробуйте создать такую машину состояний,&lt;br /&gt;
самостоятельно найдя в интернете или нарисовав соответствующие картинки.&lt;br /&gt;
Вы можете также вытащить картинки рожиц из этого урока, кликнув на них для увеличения, а затем нажав правую кнопку мышки, сохранить их на диске.&lt;br /&gt;
Как загрузить картинки в редактор ресурсов было описано в конце предыдущего [[Введение в AppSalute Сreator|урока]].&lt;br /&gt;
Естественно, Вы можете изменить эмоциональное поведение, сделав его более реалистичным :).&lt;br /&gt;
&lt;br /&gt;
В заключение, несколько общих замечаний:&lt;br /&gt;
* Если машина имеет более двух состояний, её необходимо сначала проектировать на бумаге. Именно на диаграмме состояний отчетливо проявляется логика поведения машины.&lt;br /&gt;
* Обычно не должно быть тупиковых состояний, из которых ни куда попасть нельзя. В эмоциональной машине с рожицами таких состояний нет.&lt;br /&gt;
* Всегда необходимо выделять начальное состояние в котором машина начинает своё существование.&lt;br /&gt;
* Памятью машины состояний не обладают, однако имитация памяти может быть реализована при помощи цепочки состояний, как было сделано выше с состояниями счастливой рожицы.&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
* Уменьшите в 2 раза размер слонят (параметр scale в модификаторах свойств). Для этого достаточно поменять масштаб у тела, т.е. его scale распространится и на подобъект.&lt;br /&gt;
* Копированием создайте третьего слонёнка.&lt;br /&gt;
* Запрограммируйте его голову как машину, состоящую из 3-х состояний. В качестве картинки третьего состояния возьмите солнышко из первого урока. Пусть состояния при клике прокручиваются по кругу (left, right, sun,left,...)&lt;br /&gt;
* Добавьте четвертого слонёнка с тремя состояниями и сделайте с ним что хотите.&lt;br /&gt;
* Создайте эмоциональную рожицу&lt;br /&gt;
* Посмотрите снова на описание машин состояний из первого урока. Стало ли понятнее их поведение?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание экранов, сцен. Работа с кнопками|Урок 2]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Checkbox_%D0%BA%D0%B0%D0%BA_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B9&amp;diff=3327</id>
		<title>Checkbox как машина состояний</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Checkbox_%D0%BA%D0%B0%D0%BA_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B9&amp;diff=3327"/>
		<updated>2013-03-05T09:57:32Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Создание чекбокса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание экранов, сцен. Работа с кнопками|Урок 2]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' изучить понятие машины состояний на примере объекта Checkbox&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* Cоздать новый экран и сцену для этого урока.&lt;br /&gt;
* При помощи объекта Checkbox заставит слонёнка поворачивать голову.&lt;br /&gt;
* Воспроизвести этого же слонёнка при помощи машины состояний.&lt;br /&gt;
* Добавить разнообразия в поведении слонёнка.&lt;br /&gt;
* Создать эмоциональную рожицу. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Checkbox ==&lt;br /&gt;
&lt;br /&gt;
=== Подготовка ===&lt;br /&gt;
&lt;br /&gt;
Начнём урок, как обычно,  с открытия проекта lessons. В нём добавим новый экран lesson_3&lt;br /&gt;
со сценой stg_main, так как это было описано в предыдущем [[Создание экранов, сцен. Работа с кнопками|уроке]]. Поместим из редактора ресурсов на сцену любой фон из папки этого или предыдущего  урока. Для примера далее используется &amp;quot;лунный пейзаж&amp;quot; (картинка '''bg''').&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_chk1.png|right]]&lt;br /&gt;
Поверх фона перетащите из редактора ресурсов тело слонёнка (ресурс '''body''')&lt;br /&gt;
и затем его голову '''head_1'''. Расположите их так, чтобы получился примерно целый слонёнок.&lt;br /&gt;
Переименуйте эти 2 объекта в '''elephant_body''' и '''elephant_head_chk'''&lt;br /&gt;
(помним о необходимости осмысленности в именах объектов?). Чтобы голова и тело стали &amp;quot;целым&amp;quot; существом, стоит в дереве проекта (Layout) перетащить голову на тело, сделав её подобъектом.&lt;br /&gt;
Теперь, если на сцене начать таскать тело слоненка, то голова будет послушно следовать за ним.&lt;br /&gt;
Хотя, если схватить за голову, то её легко можно оторвать. Так, что будьте со слоненком поласковее.&lt;br /&gt;
&lt;br /&gt;
=== Создание чекбокса ===&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_chk.png|right]]&lt;br /&gt;
Зайдем в свойство головы '''elephant_head_chk''' и изменим её тип на '''checkbox'''.&lt;br /&gt;
Раскроем треугольнички возле свойств &amp;quot;'''не отмечена (внешний вид)'''&amp;quot; и &amp;quot;'''отмечена (внешний вид)'''&amp;quot;. Поля '''не отмечена (внешний вид)''' и '''отмечена (внешний вид)''' содержат по три ресурса (&amp;lt;tt&amp;gt;up, down и over&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Не отмечена (внешний вид):'''&lt;br /&gt;
&amp;lt;tt&amp;gt;up&amp;lt;/tt&amp;gt; - так выглядит чекбокс, пока мы на него не нажали,&lt;br /&gt;
&amp;lt;tt&amp;gt;down&amp;lt;/tt&amp;gt; - так выглядит чекбокс, если мы на него нажмём, но не откликнем в не нажатом состоянии,&lt;br /&gt;
&amp;lt;tt&amp;gt;over&amp;lt;/tt&amp;gt; – так выглядит чекбокс, если мы на него наведём мышкой, в не нажатом состоянии.&lt;br /&gt;
&lt;br /&gt;
'''Отмечена (внешний вид):'''&lt;br /&gt;
&amp;lt;tt&amp;gt;up&amp;lt;/tt&amp;gt; - так выглядит чекбокс, когда мы на него нажали,&lt;br /&gt;
&amp;lt;tt&amp;gt;down&amp;lt;/tt&amp;gt; - так выглядит чекбокс, если мы на него нажмём, но не откликнем в нажатом состоянии,&lt;br /&gt;
&amp;lt;tt&amp;gt;over&amp;lt;/tt&amp;gt; – так выглядит чекбокс, если мы на него наведём мышкой, в нажатом состоянии.&lt;br /&gt;
Разместим поверх окна редактор ресурсов и перетащим в поле '''up''' первой группы (не отмечена) картинку '''head_1''', а в такое же поле второй группы (отмечена) картинку '''head_2'''.&lt;br /&gt;
Делается это также, как и формирование внешнего вида кнопки из предыдущего [[Создание экранов, сцен. Работа с кнопками|урока]].&lt;br /&gt;
&lt;br /&gt;
Сохраняем проект и запускаем вьювер. При клике на голову слонёнка она должна туда-сюда поворачиваться. Вы узнали в этом поведении чекбокс?&lt;br /&gt;
Обычно  чекбоксы (сheckbox) это такие квадратики в которых ставят или убирают галочку.&lt;br /&gt;
Конечно и в игровом приложении может понадобиться подобный чекбокс.&lt;br /&gt;
В этом случае необходимо будет подготовить соответствующие картинки.&lt;br /&gt;
Простые игровые объекты (типа подобной головы) часто могут находиться в двух состояниях (выбран, не выбран). Они не похожи на чекбокс внешним видом, но являются им в силу правил своего поведения.&lt;br /&gt;
&lt;br /&gt;
Теперь наша задача состоит в воспроизведении поведения чекбокса при помощи объекта&lt;br /&gt;
другого типа - '''[[Machine|машины состояний]]'''. Мы не только повторим вращающего головой слоненка,&lt;br /&gt;
но и придадим его поведению новые функции.&lt;br /&gt;
&lt;br /&gt;
== Машины состояний ==&lt;br /&gt;
&lt;br /&gt;
=== Немного теории ===&lt;br /&gt;
&lt;br /&gt;
''Машина состояний (state machine)'' является универсальным инструментом для программирования в редакторе сцен сложного поведения объектов.  Логика поведения машины состояний разбивается на отдельные узлы (состояния). Объект всегда находится строго в одном состоянии. Переход из одного состояния в другое происходит либо в результате внешнего воздействия на объект, либо в результате окончания некоторых процессов протекающих внутри объекта. &lt;br /&gt;
&lt;br /&gt;
Любая машина состояний может быть изображена в виде графа с кружочками и стрелками. Настоятельно рекомендуется рисовать такие графы в процессе проектирования машины, а лишь затем переходить к их описанию в окне редактора состояний. У машины всегда активно строго одно состояние (ниже это изображено на левом рисунке темным кружком):&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Файл:def_states.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Машина состояний не обладает памятью. Это означает, что для анализа того, что произойдет в данном состоянии, неважно как мы в него попали, и какова была предыстория переходов. Важно, только, что мы находимся в этом состоянии. Такое отсутствие памяти упрощает анализ логики машины, так как каждый раз мы концентрируемся на одном конкретном состоянии, а всю логику работы разбиваем на отдельные кирпичики-состояния.&lt;br /&gt;
&lt;br /&gt;
Выше на правом рисунке изображено некоторое состояние. При входе в него, происходит инициализация состояния. Если на объект оказываются внешние воздействия, то он может покинуть состояние. Наконец, внутри состояния могут работать различные процессы.&lt;br /&gt;
&lt;br /&gt;
=== Проектирование машины ===&lt;br /&gt;
&lt;br /&gt;
Перейдем теперь от нудной теории к веселой практике. Посмотрим внимательно на поведение головы слоненка, которая является чекбоксом. На самом деле это типичная машина состояний с двумя состояниями. Назовём их '''left''' и '''right''' по направлению ориентации головы слонёнка. Сначала слоненок находится в состоянии  left (смотрит влево). Когда мы кликаем в голову, машина переходит в новое состояние right (голова поворачивается вправо). Это поведение жестко запрограммированно внутри объекта checkbox. Попробуем добиться того же эффекта, используя универсальный игровой объект &amp;quot;машина состояний&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Прежде всего не поленимся нарисовать весёлый граф состояний и переходов между ними:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states.png|center|300px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда на бумаге всё стало ясно :), необходимо эту машину создать в редакторе.&lt;br /&gt;
&lt;br /&gt;
=== Создание машины ===&lt;br /&gt;
&lt;br /&gt;
Чтобы не тратить время на редактор ресурсов, скопируем уже существующего слонёнка. &lt;br /&gt;
Для этого станем в дереве проекта на его тело (elephant_body) и правой кнопкой мыши вызовем меню.&lt;br /&gt;
В нём выбираем пункт Copy. Затем повторяем операцию, но выбираем уже пункт вставить (&amp;quot;''Paste after curent object''&amp;quot;). В дереве проекта появятся два слоненка. Причем оба будут иерархичной веткой,&lt;br /&gt;
состоящей из &amp;quot;тела&amp;quot; (elephant_body) и подобъекта &amp;quot;голова&amp;quot; (elephant_head).&lt;br /&gt;
А вот на сцене редактора видимых изменений не произойдет.&lt;br /&gt;
Мы помним, что при копировании объектов копируются также все их свойства.&lt;br /&gt;
Поэтому на сцене, на самом деле, два слоненка, но они имеют одинаковые координаты.&lt;br /&gt;
Поэтому хватаемся за тело и тащим его правее на свободное место:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_2elephants.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Левого слона оставим чекбоксом, а голову правого превратим в машину состояний.&lt;br /&gt;
Для этого кликаем в голову и меняем её тип с checkbox на '''machine''' (поле '''тип''' в панели Properties). Поменяем также имя головы, укоротив его до &amp;quot;'''elephant_head'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно попробовать посмотреть, что у нас получилось. Сохраняем проект и запускаем вьювер.&lt;br /&gt;
Упс... Голова исчезла, а вверху экрана появилось малопонятное ругательство,&lt;br /&gt;
из которого можно заключить, что у объекта elephant_head состояний то и нет.&lt;br /&gt;
&lt;br /&gt;
Таким образом, не достаточно создать машину, её еще необходимо научить ездить.&lt;br /&gt;
Поэтому закрываем окно вьювера и начинаем заниматься программированием.&lt;br /&gt;
&lt;br /&gt;
=== Программирование состояний ===&lt;br /&gt;
&lt;br /&gt;
Сделаем активной голову правого слонёнка, которая стала машиной состояний.&lt;br /&gt;
В панели её свойств кликаем на поле '''states''', а затем на появившиеся в нём три точки (помним [[Введение в AppSalute Сreator|первый урок]]?). В результате этих действий, выскочит окошко в котором мы будем создавать состояния &lt;br /&gt;
и их программировать. Два раза нажмём кнопку '''Добавить состояние''' в левом нижнем углу окна:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате появилось две области, каждая из которых будущее состояние головы.&lt;br /&gt;
Зададим имена состояний, введя названия left и right в полях '''имя''' каждой области.&lt;br /&gt;
Затем станем мышкой на поле '''имя''' левого состояния и нажмём правую кнопку мышки.&lt;br /&gt;
Появится большое меню, в котором кликнем на первый пункт &amp;quot;''draw - внешний вид''&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В левом состояни под его именем добавится команда '''draw'''.&lt;br /&gt;
Эта команда управляет способом отрисовки машины в данном состоянии.&lt;br /&gt;
Нам потребуется ещё одна команда '''click''', которую добавим аналогичным&lt;br /&gt;
образом (правая кнопка мыши на команде draw).&lt;br /&gt;
&lt;br /&gt;
В команды необходимо добавить параметры, определяющие их свойства.&lt;br /&gt;
Для этого кликнем справа от draw и затем ещё раз на появившиеся три точки.&lt;br /&gt;
В выскочившем диалоговом окне поставим галочку возле пункта &amp;quot;''графический ресурс''&amp;quot;&lt;br /&gt;
и нажмем кнопку Ok:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states_dlg.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Аналогично кликаем на команду '''click''' и добавляем ей параметр &amp;quot;''go - новое состояние''&amp;quot;.&lt;br /&gt;
Те же действие проделываем с правым состоянием. В результате должно получиться:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Осталось заполнить поля команд. В поле go команды click левого состояния пишем '''right''',&lt;br /&gt;
а в тоже поле правого состояния пишем '''left'''. Это означает, что при клике машина должна перейти  в то состояние, которое указано в поле go. Имена состояний вводятся с клавиатуры руками,&lt;br /&gt;
поэтому необходимо следить за правильностью их написания.&lt;br /&gt;
&lt;br /&gt;
Теперь откроем окно редактора ресурсов. Сделав активным значение поля '''res''' команды draw левого состояния, перетащим в него из ресурсов картинку '''head_1'''. В аналогичное поле правого состояния перетащим картинку '''head_2'''. Делается это точно так, как мы задавали поля внешнего вида кнопки или чекбокса в панели Properties. Финальный результат наших действий&lt;br /&gt;
приводит к следующей машине (мы не будем больше приводить всё окно редактирования состояний):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Насладимся результатами нашей работы. Закроем окно с состояниями (крестик в правом верхнем углу).&lt;br /&gt;
Сохраним проект и запустим вьювер (для ускорения можно не закрывать окно состояний, а кликнуть на иконки сохранения и запуска вьювера внизу этого окна). &lt;br /&gt;
В результате, во вьювере оба слоненка должны вести себя абсолютно одинаково.&lt;br /&gt;
&lt;br /&gt;
=== Ускорение работы и отладка ===&lt;br /&gt;
&lt;br /&gt;
При программировании состояний машины можно использовать некоторые приёмы&lt;br /&gt;
ускоряющие процесс. Так, в примере с головой, команды обоих состояний выглядят одинаково.&lt;br /&gt;
Поэтому имеет смысл сначала создать одно состояние (left),&lt;br /&gt;
наполнить его командами и параметрами. Затем нажать кнопку &amp;quot;Скопировать состояние&amp;quot;.&lt;br /&gt;
Состояние продублируется и останется только подправить его параметры.&lt;br /&gt;
&lt;br /&gt;
Машины состояний, как и другие объекты, можно копировать вместе со всеми их состояниями. Поэтому, если уже есть  машина, похожая на ту, которую надо создать, мы её просто копируем и подправляем команды и их параметры.&lt;br /&gt;
&lt;br /&gt;
Если машина создается из картинки, изменением типа, то не стоит глазами искать слово '''machine''' в списке типов. Необходимо на клавиатуре нажать клавишу '''M''' и затем '''Enter'''.&lt;br /&gt;
Вообще, активнее пользуйтесь горячими клавишами. Например, если в дереве проекта (Layout)&lt;br /&gt;
активна машина, то нажатие '''Ctrl+M''' приведет к открытию окна редактирования состояний.&lt;br /&gt;
&lt;br /&gt;
При запуске проекта во вьювере можно следить за отладочной информацией о состояниях объектов.&lt;br /&gt;
Это помогает понять почему что-то работает не так как надо.&lt;br /&gt;
Запустим вьювер и нажмём кнопку &amp;quot;'''F1'''&amp;quot;. Появится небольшое меню с командами, которое гасится повторным нажатием F1. Кнопка &amp;quot;'''S'''&amp;quot;  (на клавиатуре) выводит список всех активных объектов на сцене. Если текст информации совпадает с текстом фона, то эта информация будет плохо видна. В этом случае необходимо несколько раз нажать клавишу &amp;quot;'''C'''&amp;quot;, меняя по кругу цвет текста.&lt;br /&gt;
&lt;br /&gt;
Первые две колонки отладочной информации, это имя сцены и объекта. В колонке state видно текущее состояние. Понажимайте на голову слоненка, наблюдая как его состояние меняется с left на right и наоборот.&lt;br /&gt;
&lt;br /&gt;
Запустите теперь во вьювере экран первого урока и нажмите &amp;quot;'''S'''&amp;quot;.&lt;br /&gt;
Покликайте на слоненка, его голову и солнышко, наблюдая как изменяется информация об этих машинах.&lt;br /&gt;
Так как внутри состояний могут происходить некоторые процессы, их&lt;br /&gt;
можно затормозить, нажав '''пробел''' (в этот момент солнышко остановится). Повторное нажатие пробела, снова запустит все процессы.&lt;br /&gt;
&lt;br /&gt;
=== Немного нарвоучений ===&lt;br /&gt;
&lt;br /&gt;
Освоив машины состояний, дизайнеры обычно применяют их там где надо и там где не надо.&lt;br /&gt;
Например, в этом уроке быстрее оформить голову слонёнка как чекбокс,&lt;br /&gt;
а не как машину состояний. Поэтому прежде чем хвататься за шестеренку, стоит сначала подумать&lt;br /&gt;
о том, каким игровым объектом можно реализовать данное поведение.&lt;br /&gt;
&lt;br /&gt;
При работе над проектами, некоторые машины иногда повторяются. Их конечно можно копировать, подправляя соответствующие поля команд. Однако, на определенном этапе, возможно, стоит начать дергать руководство и С++ программистов, чтобы они оформили эту &amp;quot;типовую&amp;quot; машину в виде отдельного игрового объекта. Как это, например, сделано с чекбоксом или кнопкой.&lt;br /&gt;
&lt;br /&gt;
Если Вы пытаетесь сделать что-то при помощи машины состояний, но получается очень громоздкий объект (куча состояний, переходов, команд), значит Вы делаете что-то не так.&lt;br /&gt;
Либо машина плохо спроектирована, либо вообще эту задачу не стоит решать при помощи машин.&lt;br /&gt;
Возможно это уже миниигра и необходимо подключать C++ программистов для её реализации.&lt;br /&gt;
&lt;br /&gt;
Стоит также помнить, что работа над проектом это коллективный процесс. &lt;br /&gt;
Спустя некоторое время Вашу работу может подправлять другой человек.&lt;br /&gt;
Да и Вы к этому моменту станете другим человеком и все забудете. &lt;br /&gt;
Поэтому относитесь максимально ответственно к процессу документирования.&lt;br /&gt;
Это означает выбор осмысленных имен объектов и заполнение поля &amp;quot;'''описание'''&amp;quot;,&lt;br /&gt;
находящееся у большинства сложных объектов в Properties.&lt;br /&gt;
Для машин это поле находится в окне редактирования состояний, сразу под состояниями.&lt;br /&gt;
Например, в нашем случае текст документации может выглядеть примерно так: &amp;quot;''При клике на голову она поворачивается влево или в право''&amp;quot;.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''Правильно работающий незадокументированный проект - это плохой проект.'''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Усложняем машину ==&lt;br /&gt;
&lt;br /&gt;
=== Непослушный слоненок ===&lt;br /&gt;
&lt;br /&gt;
Реабилитируем немного нашу деятельность по воспроизводству стандартного чекбокса при помощи машины состояний.&lt;br /&gt;
Для этого придадим голове правого слонёнка дополнительное поведение, которым чекбокс не обладает.&lt;br /&gt;
Пусть правый слоненок нежно относится к левому и не хочет на долго от него отворачиваться.&lt;br /&gt;
Поэтому, повернувшись после клика вправо, он затем сам снова поворачивается влево.&lt;br /&gt;
&lt;br /&gt;
Для реализации этого поведения добавим в состояние '''right''' команду '''wait''' c параметром '''t''', равным 1000 миллисекундам (что равно одной секунде) и параметром '''go'''=left&lt;br /&gt;
В результате должна получиться такая машина:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
До сих пор, переход из одного состояния в другое происходил в результате клика на машину.&lt;br /&gt;
Это было внешнее воздействие.&lt;br /&gt;
Однако, переход между состояниями может происходить в результате некоторых процессов внутри состояния.&lt;br /&gt;
В нашем случае, при заходе в правое состояние начинает работать команда '''wait'''. Она&lt;br /&gt;
ждет в течении времени, определяемом полем '''t'''. Затем, если задано поле '''go''', машина сама инициирует переход в соответствующее состояние.&lt;br /&gt;
&lt;br /&gt;
Сохраните и запустите во вьювере этот проект. Кликая на головы обоих слонят,&lt;br /&gt;
сравните их поведение.&lt;br /&gt;
&lt;br /&gt;
=== Сумашедший слоненок ===&lt;br /&gt;
&lt;br /&gt;
В заключение, поиздеваемся немного над слоненком, сделав его голове&lt;br /&gt;
такую машину состояний:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states6.png]]&lt;br /&gt;
&lt;br /&gt;
В результате слонёнок начнет нерегулярно крутит головой то влево, то вправо.&lt;br /&gt;
В каждом состоянии он будет находиться  случайное время от 1-й до 3-х секунд.&lt;br /&gt;
Это определяется параметрами '''t''' и '''dt''', которые задают&lt;br /&gt;
интервал времени от t-dt до t+dt.&lt;br /&gt;
&lt;br /&gt;
Заметим, что, не смотря на самовольное вращение головой,&lt;br /&gt;
слоненок по-прежнему реагирует на клики мышки.&lt;br /&gt;
&lt;br /&gt;
== Машина эмоций ==&lt;br /&gt;
&lt;br /&gt;
Выше мы рассмотрели несколько машин состояний, не сильно отличающихся&lt;br /&gt;
от бездушного чекбокса. &lt;br /&gt;
Приведем теперь пример машины, которую и машиной неловко назвать.&lt;br /&gt;
Это существо, обладающее целым спектром эмоций и реакций на внешнее воздействие:&lt;br /&gt;
&lt;br /&gt;
[[файл:smiles.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Разберемся, что нарисовано на картинке. Каждая рожица - это отдельное состояние,&lt;br /&gt;
отражающее настроение нашего существа. Стрелки - переходы между состояниями&lt;br /&gt;
по командам '''click''' и '''wait'''.&lt;br /&gt;
&lt;br /&gt;
Начинает работать существо из состояния [[файл:s1.png|24px]].&lt;br /&gt;
Как и любые существа, Оно любит внимание. &lt;br /&gt;
Поэтому, при клике переходит в более жизнерадостное состояние [[файл:s2.png|24px]].&lt;br /&gt;
Если больше на него не кликать, Оно опять вернется в начальное состояние,&lt;br /&gt;
а спустя еще какое то время начнет плакать [[файл:s5.png|24px]], из-за полного отсутствия&lt;br /&gt;
внимания. Впрочем, небольшой клик - и Оно снова довольно жизнью.&lt;br /&gt;
&lt;br /&gt;
Обратим внимание на последовательность состояний [[файл:s3.png|24px]], переходящих в &lt;br /&gt;
недовольную гримасу [[файл:s4.png|24px]]. Излишнее внимание также вредно, как &lt;br /&gt;
и его отсутствие. &lt;br /&gt;
&lt;br /&gt;
В качестве упражнения, попробуйте создать такую машину состояний,&lt;br /&gt;
самостоятельно найдя в интернете или нарисовав соответствующие картинки.&lt;br /&gt;
Вы можете также вытащить картинки рожиц из этого урока, кликнув на них для увеличения, а затем нажав правую кнопку мышки, сохранить их на диске.&lt;br /&gt;
Как загрузить картинки в редактор ресурсов было описано в конце предыдущего [[Введение в AppSalute Сreator|урока]].&lt;br /&gt;
Естественно, Вы можете изменить эмоциональное поведение, сделав его более реалистичным :).&lt;br /&gt;
&lt;br /&gt;
В заключение, несколько общих замечаний:&lt;br /&gt;
* Если машина имеет более двух состояний, её необходимо сначала проектировать на бумаге. Именно на диаграмме состояний отчетливо проявляется логика поведения машины.&lt;br /&gt;
* Обычно не должно быть тупиковых состояний, из которых ни куда попасть нельзя. В эмоциональной машине с рожицами таких состояний нет.&lt;br /&gt;
* Всегда необходимо выделять начальное состояние в котором машина начинает своё существование.&lt;br /&gt;
* Памятью машины состояний не обладают, однако имитация памяти может быть реализована при помощи цепочки состояний, как было сделано выше с состояниями счастливой рожицы.&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
* Уменьшите в 2 раза размер слонят (параметр scale в модификаторах свойств). Для этого достаточно поменять масштаб у тела, т.е. его scale распространится и на подобъект.&lt;br /&gt;
* Копированием создайте третьего слонёнка.&lt;br /&gt;
* Запрограммируйте его голову как машину, состоящую из 3-х состояний. В качестве картинки третьего состояния возьмите солнышко из первого урока. Пусть состояния при клике прокручиваются по кругу (left, right, sun,left,...)&lt;br /&gt;
* Добавьте четвертого слонёнка с тремя состояниями и сделайте с ним что хотите.&lt;br /&gt;
* Создайте эмоциональную рожицу&lt;br /&gt;
* Посмотрите снова на описание машин состояний из первого урока. Стало ли понятнее их поведение?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание экранов, сцен. Работа с кнопками|Урок 2]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=Checkbox_%D0%BA%D0%B0%D0%BA_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B9&amp;diff=3326</id>
		<title>Checkbox как машина состояний</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=Checkbox_%D0%BA%D0%B0%D0%BA_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B9&amp;diff=3326"/>
		<updated>2013-03-05T09:56:28Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Создание чекбокса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание экранов, сцен. Работа с кнопками|Урок 2]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
'''Цель:''' изучить понятие машины состояний на примере объекта Checkbox&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* Cоздать новый экран и сцену для этого урока.&lt;br /&gt;
* При помощи объекта Checkbox заставит слонёнка поворачивать голову.&lt;br /&gt;
* Воспроизвести этого же слонёнка при помощи машины состояний.&lt;br /&gt;
* Добавить разнообразия в поведении слонёнка.&lt;br /&gt;
* Создать эмоциональную рожицу. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Checkbox ==&lt;br /&gt;
&lt;br /&gt;
=== Подготовка ===&lt;br /&gt;
&lt;br /&gt;
Начнём урок, как обычно,  с открытия проекта lessons. В нём добавим новый экран lesson_3&lt;br /&gt;
со сценой stg_main, так как это было описано в предыдущем [[Создание экранов, сцен. Работа с кнопками|уроке]]. Поместим из редактора ресурсов на сцену любой фон из папки этого или предыдущего  урока. Для примера далее используется &amp;quot;лунный пейзаж&amp;quot; (картинка '''bg''').&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_chk1.png|right]]&lt;br /&gt;
Поверх фона перетащите из редактора ресурсов тело слонёнка (ресурс '''body''')&lt;br /&gt;
и затем его голову '''head_1'''. Расположите их так, чтобы получился примерно целый слонёнок.&lt;br /&gt;
Переименуйте эти 2 объекта в '''elephant_body''' и '''elephant_head_chk'''&lt;br /&gt;
(помним о необходимости осмысленности в именах объектов?). Чтобы голова и тело стали &amp;quot;целым&amp;quot; существом, стоит в дереве проекта (Layout) перетащить голову на тело, сделав её подобъектом.&lt;br /&gt;
Теперь, если на сцене начать таскать тело слоненка, то голова будет послушно следовать за ним.&lt;br /&gt;
Хотя, если схватить за голову, то её легко можно оторвать. Так, что будьте со слоненком поласковее.&lt;br /&gt;
&lt;br /&gt;
=== Создание чекбокса ===&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_chk.png|right]]&lt;br /&gt;
Зайдем в свойство головы '''elephant_head_chk''' и изменим её тип на '''checkbox'''.&lt;br /&gt;
Раскроем треугольнички возле свойств &amp;quot;'''не отмечена (внешний вид)'''&amp;quot; и &amp;quot;'''отмечена (внешний вид)'''&amp;quot;. Поля '''не отмечена (внешний вид)''' и '''отмечена (внешний вид)''' содержат по три ресурса (&amp;lt;tt&amp;gt;up, down и over&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Не отмечена (внешний вид):'''&lt;br /&gt;
&amp;lt;tt&amp;gt;up&amp;lt;/tt&amp;gt; - так выглядит чекбокс, пока мы на него не нажали.&lt;br /&gt;
&amp;lt;tt&amp;gt;down&amp;lt;/tt&amp;gt; - так выглядит чекбокс, если мы на него нажмём, но не откликнем в не нажатом состоянии.&lt;br /&gt;
&amp;lt;tt&amp;gt;over&amp;lt;/tt&amp;gt; – так выглядит чекбокс, если мы на него наведём мышкой, в не нажатом состоянии.&lt;br /&gt;
&lt;br /&gt;
'''Отмечена (внешний вид):'''&lt;br /&gt;
&amp;lt;tt&amp;gt;up&amp;lt;/tt&amp;gt; - так выглядит чекбокс, когда мы на него нажали.&lt;br /&gt;
&amp;lt;tt&amp;gt;down&amp;lt;/tt&amp;gt; - так выглядит чекбокс, если мы на него нажмём, но не откликнем в нажатом состоянии.&lt;br /&gt;
&amp;lt;tt&amp;gt;over&amp;lt;/tt&amp;gt; – так выглядит чекбокс, если мы на него наведём мышкой, в нажатом состоянии.&lt;br /&gt;
Разместим поверх окна редактор ресурсов и перетащим в поле '''up''' первой группы (не отмечена) картинку '''head_1''', а в такое же поле второй группы (отмечена) картинку '''head_2'''.&lt;br /&gt;
Делается это также, как и формирование внешнего вида кнопки из предыдущего [[Создание экранов, сцен. Работа с кнопками|урока]].&lt;br /&gt;
&lt;br /&gt;
Сохраняем проект и запускаем вьювер. При клике на голову слонёнка она должна туда-сюда поворачиваться. Вы узнали в этом поведении чекбокс?&lt;br /&gt;
Обычно  чекбоксы (сheckbox) это такие квадратики в которых ставят или убирают галочку.&lt;br /&gt;
Конечно и в игровом приложении может понадобиться подобный чекбокс.&lt;br /&gt;
В этом случае необходимо будет подготовить соответствующие картинки.&lt;br /&gt;
Простые игровые объекты (типа подобной головы) часто могут находиться в двух состояниях (выбран, не выбран). Они не похожи на чекбокс внешним видом, но являются им в силу правил своего поведения.&lt;br /&gt;
&lt;br /&gt;
Теперь наша задача состоит в воспроизведении поведения чекбокса при помощи объекта&lt;br /&gt;
другого типа - '''[[Machine|машины состояний]]'''. Мы не только повторим вращающего головой слоненка,&lt;br /&gt;
но и придадим его поведению новые функции.&lt;br /&gt;
&lt;br /&gt;
== Машины состояний ==&lt;br /&gt;
&lt;br /&gt;
=== Немного теории ===&lt;br /&gt;
&lt;br /&gt;
''Машина состояний (state machine)'' является универсальным инструментом для программирования в редакторе сцен сложного поведения объектов.  Логика поведения машины состояний разбивается на отдельные узлы (состояния). Объект всегда находится строго в одном состоянии. Переход из одного состояния в другое происходит либо в результате внешнего воздействия на объект, либо в результате окончания некоторых процессов протекающих внутри объекта. &lt;br /&gt;
&lt;br /&gt;
Любая машина состояний может быть изображена в виде графа с кружочками и стрелками. Настоятельно рекомендуется рисовать такие графы в процессе проектирования машины, а лишь затем переходить к их описанию в окне редактора состояний. У машины всегда активно строго одно состояние (ниже это изображено на левом рисунке темным кружком):&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[Файл:def_states.png]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
Машина состояний не обладает памятью. Это означает, что для анализа того, что произойдет в данном состоянии, неважно как мы в него попали, и какова была предыстория переходов. Важно, только, что мы находимся в этом состоянии. Такое отсутствие памяти упрощает анализ логики машины, так как каждый раз мы концентрируемся на одном конкретном состоянии, а всю логику работы разбиваем на отдельные кирпичики-состояния.&lt;br /&gt;
&lt;br /&gt;
Выше на правом рисунке изображено некоторое состояние. При входе в него, происходит инициализация состояния. Если на объект оказываются внешние воздействия, то он может покинуть состояние. Наконец, внутри состояния могут работать различные процессы.&lt;br /&gt;
&lt;br /&gt;
=== Проектирование машины ===&lt;br /&gt;
&lt;br /&gt;
Перейдем теперь от нудной теории к веселой практике. Посмотрим внимательно на поведение головы слоненка, которая является чекбоксом. На самом деле это типичная машина состояний с двумя состояниями. Назовём их '''left''' и '''right''' по направлению ориентации головы слонёнка. Сначала слоненок находится в состоянии  left (смотрит влево). Когда мы кликаем в голову, машина переходит в новое состояние right (голова поворачивается вправо). Это поведение жестко запрограммированно внутри объекта checkbox. Попробуем добиться того же эффекта, используя универсальный игровой объект &amp;quot;машина состояний&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Прежде всего не поленимся нарисовать весёлый граф состояний и переходов между ними:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states.png|center|300px]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда на бумаге всё стало ясно :), необходимо эту машину создать в редакторе.&lt;br /&gt;
&lt;br /&gt;
=== Создание машины ===&lt;br /&gt;
&lt;br /&gt;
Чтобы не тратить время на редактор ресурсов, скопируем уже существующего слонёнка. &lt;br /&gt;
Для этого станем в дереве проекта на его тело (elephant_body) и правой кнопкой мыши вызовем меню.&lt;br /&gt;
В нём выбираем пункт Copy. Затем повторяем операцию, но выбираем уже пункт вставить (&amp;quot;''Paste after curent object''&amp;quot;). В дереве проекта появятся два слоненка. Причем оба будут иерархичной веткой,&lt;br /&gt;
состоящей из &amp;quot;тела&amp;quot; (elephant_body) и подобъекта &amp;quot;голова&amp;quot; (elephant_head).&lt;br /&gt;
А вот на сцене редактора видимых изменений не произойдет.&lt;br /&gt;
Мы помним, что при копировании объектов копируются также все их свойства.&lt;br /&gt;
Поэтому на сцене, на самом деле, два слоненка, но они имеют одинаковые координаты.&lt;br /&gt;
Поэтому хватаемся за тело и тащим его правее на свободное место:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_2elephants.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Левого слона оставим чекбоксом, а голову правого превратим в машину состояний.&lt;br /&gt;
Для этого кликаем в голову и меняем её тип с checkbox на '''machine''' (поле '''тип''' в панели Properties). Поменяем также имя головы, укоротив его до &amp;quot;'''elephant_head'''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Можно попробовать посмотреть, что у нас получилось. Сохраняем проект и запускаем вьювер.&lt;br /&gt;
Упс... Голова исчезла, а вверху экрана появилось малопонятное ругательство,&lt;br /&gt;
из которого можно заключить, что у объекта elephant_head состояний то и нет.&lt;br /&gt;
&lt;br /&gt;
Таким образом, не достаточно создать машину, её еще необходимо научить ездить.&lt;br /&gt;
Поэтому закрываем окно вьювера и начинаем заниматься программированием.&lt;br /&gt;
&lt;br /&gt;
=== Программирование состояний ===&lt;br /&gt;
&lt;br /&gt;
Сделаем активной голову правого слонёнка, которая стала машиной состояний.&lt;br /&gt;
В панели её свойств кликаем на поле '''states''', а затем на появившиеся в нём три точки (помним [[Введение в AppSalute Сreator|первый урок]]?). В результате этих действий, выскочит окошко в котором мы будем создавать состояния &lt;br /&gt;
и их программировать. Два раза нажмём кнопку '''Добавить состояние''' в левом нижнем углу окна:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате появилось две области, каждая из которых будущее состояние головы.&lt;br /&gt;
Зададим имена состояний, введя названия left и right в полях '''имя''' каждой области.&lt;br /&gt;
Затем станем мышкой на поле '''имя''' левого состояния и нажмём правую кнопку мышки.&lt;br /&gt;
Появится большое меню, в котором кликнем на первый пункт &amp;quot;''draw - внешний вид''&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В левом состояни под его именем добавится команда '''draw'''.&lt;br /&gt;
Эта команда управляет способом отрисовки машины в данном состоянии.&lt;br /&gt;
Нам потребуется ещё одна команда '''click''', которую добавим аналогичным&lt;br /&gt;
образом (правая кнопка мыши на команде draw).&lt;br /&gt;
&lt;br /&gt;
В команды необходимо добавить параметры, определяющие их свойства.&lt;br /&gt;
Для этого кликнем справа от draw и затем ещё раз на появившиеся три точки.&lt;br /&gt;
В выскочившем диалоговом окне поставим галочку возле пункта &amp;quot;''графический ресурс''&amp;quot;&lt;br /&gt;
и нажмем кнопку Ok:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states_dlg.png]]&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Аналогично кликаем на команду '''click''' и добавляем ей параметр &amp;quot;''go - новое состояние''&amp;quot;.&lt;br /&gt;
Те же действие проделываем с правым состоянием. В результате должно получиться:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states3.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Осталось заполнить поля команд. В поле go команды click левого состояния пишем '''right''',&lt;br /&gt;
а в тоже поле правого состояния пишем '''left'''. Это означает, что при клике машина должна перейти  в то состояние, которое указано в поле go. Имена состояний вводятся с клавиатуры руками,&lt;br /&gt;
поэтому необходимо следить за правильностью их написания.&lt;br /&gt;
&lt;br /&gt;
Теперь откроем окно редактора ресурсов. Сделав активным значение поля '''res''' команды draw левого состояния, перетащим в него из ресурсов картинку '''head_1'''. В аналогичное поле правого состояния перетащим картинку '''head_2'''. Делается это точно так, как мы задавали поля внешнего вида кнопки или чекбокса в панели Properties. Финальный результат наших действий&lt;br /&gt;
приводит к следующей машине (мы не будем больше приводить всё окно редактирования состояний):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Насладимся результатами нашей работы. Закроем окно с состояниями (крестик в правом верхнем углу).&lt;br /&gt;
Сохраним проект и запустим вьювер (для ускорения можно не закрывать окно состояний, а кликнуть на иконки сохранения и запуска вьювера внизу этого окна). &lt;br /&gt;
В результате, во вьювере оба слоненка должны вести себя абсолютно одинаково.&lt;br /&gt;
&lt;br /&gt;
=== Ускорение работы и отладка ===&lt;br /&gt;
&lt;br /&gt;
При программировании состояний машины можно использовать некоторые приёмы&lt;br /&gt;
ускоряющие процесс. Так, в примере с головой, команды обоих состояний выглядят одинаково.&lt;br /&gt;
Поэтому имеет смысл сначала создать одно состояние (left),&lt;br /&gt;
наполнить его командами и параметрами. Затем нажать кнопку &amp;quot;Скопировать состояние&amp;quot;.&lt;br /&gt;
Состояние продублируется и останется только подправить его параметры.&lt;br /&gt;
&lt;br /&gt;
Машины состояний, как и другие объекты, можно копировать вместе со всеми их состояниями. Поэтому, если уже есть  машина, похожая на ту, которую надо создать, мы её просто копируем и подправляем команды и их параметры.&lt;br /&gt;
&lt;br /&gt;
Если машина создается из картинки, изменением типа, то не стоит глазами искать слово '''machine''' в списке типов. Необходимо на клавиатуре нажать клавишу '''M''' и затем '''Enter'''.&lt;br /&gt;
Вообще, активнее пользуйтесь горячими клавишами. Например, если в дереве проекта (Layout)&lt;br /&gt;
активна машина, то нажатие '''Ctrl+M''' приведет к открытию окна редактирования состояний.&lt;br /&gt;
&lt;br /&gt;
При запуске проекта во вьювере можно следить за отладочной информацией о состояниях объектов.&lt;br /&gt;
Это помогает понять почему что-то работает не так как надо.&lt;br /&gt;
Запустим вьювер и нажмём кнопку &amp;quot;'''F1'''&amp;quot;. Появится небольшое меню с командами, которое гасится повторным нажатием F1. Кнопка &amp;quot;'''S'''&amp;quot;  (на клавиатуре) выводит список всех активных объектов на сцене. Если текст информации совпадает с текстом фона, то эта информация будет плохо видна. В этом случае необходимо несколько раз нажать клавишу &amp;quot;'''C'''&amp;quot;, меняя по кругу цвет текста.&lt;br /&gt;
&lt;br /&gt;
Первые две колонки отладочной информации, это имя сцены и объекта. В колонке state видно текущее состояние. Понажимайте на голову слоненка, наблюдая как его состояние меняется с left на right и наоборот.&lt;br /&gt;
&lt;br /&gt;
Запустите теперь во вьювере экран первого урока и нажмите &amp;quot;'''S'''&amp;quot;.&lt;br /&gt;
Покликайте на слоненка, его голову и солнышко, наблюдая как изменяется информация об этих машинах.&lt;br /&gt;
Так как внутри состояний могут происходить некоторые процессы, их&lt;br /&gt;
можно затормозить, нажав '''пробел''' (в этот момент солнышко остановится). Повторное нажатие пробела, снова запустит все процессы.&lt;br /&gt;
&lt;br /&gt;
=== Немного нарвоучений ===&lt;br /&gt;
&lt;br /&gt;
Освоив машины состояний, дизайнеры обычно применяют их там где надо и там где не надо.&lt;br /&gt;
Например, в этом уроке быстрее оформить голову слонёнка как чекбокс,&lt;br /&gt;
а не как машину состояний. Поэтому прежде чем хвататься за шестеренку, стоит сначала подумать&lt;br /&gt;
о том, каким игровым объектом можно реализовать данное поведение.&lt;br /&gt;
&lt;br /&gt;
При работе над проектами, некоторые машины иногда повторяются. Их конечно можно копировать, подправляя соответствующие поля команд. Однако, на определенном этапе, возможно, стоит начать дергать руководство и С++ программистов, чтобы они оформили эту &amp;quot;типовую&amp;quot; машину в виде отдельного игрового объекта. Как это, например, сделано с чекбоксом или кнопкой.&lt;br /&gt;
&lt;br /&gt;
Если Вы пытаетесь сделать что-то при помощи машины состояний, но получается очень громоздкий объект (куча состояний, переходов, команд), значит Вы делаете что-то не так.&lt;br /&gt;
Либо машина плохо спроектирована, либо вообще эту задачу не стоит решать при помощи машин.&lt;br /&gt;
Возможно это уже миниигра и необходимо подключать C++ программистов для её реализации.&lt;br /&gt;
&lt;br /&gt;
Стоит также помнить, что работа над проектом это коллективный процесс. &lt;br /&gt;
Спустя некоторое время Вашу работу может подправлять другой человек.&lt;br /&gt;
Да и Вы к этому моменту станете другим человеком и все забудете. &lt;br /&gt;
Поэтому относитесь максимально ответственно к процессу документирования.&lt;br /&gt;
Это означает выбор осмысленных имен объектов и заполнение поля &amp;quot;'''описание'''&amp;quot;,&lt;br /&gt;
находящееся у большинства сложных объектов в Properties.&lt;br /&gt;
Для машин это поле находится в окне редактирования состояний, сразу под состояниями.&lt;br /&gt;
Например, в нашем случае текст документации может выглядеть примерно так: &amp;quot;''При клике на голову она поворачивается влево или в право''&amp;quot;.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
'''Правильно работающий незадокументированный проект - это плохой проект.'''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Усложняем машину ==&lt;br /&gt;
&lt;br /&gt;
=== Непослушный слоненок ===&lt;br /&gt;
&lt;br /&gt;
Реабилитируем немного нашу деятельность по воспроизводству стандартного чекбокса при помощи машины состояний.&lt;br /&gt;
Для этого придадим голове правого слонёнка дополнительное поведение, которым чекбокс не обладает.&lt;br /&gt;
Пусть правый слоненок нежно относится к левому и не хочет на долго от него отворачиваться.&lt;br /&gt;
Поэтому, повернувшись после клика вправо, он затем сам снова поворачивается влево.&lt;br /&gt;
&lt;br /&gt;
Для реализации этого поведения добавим в состояние '''right''' команду '''wait''' c параметром '''t''', равным 1000 миллисекундам (что равно одной секунде) и параметром '''go'''=left&lt;br /&gt;
В результате должна получиться такая машина:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
До сих пор, переход из одного состояния в другое происходил в результате клика на машину.&lt;br /&gt;
Это было внешнее воздействие.&lt;br /&gt;
Однако, переход между состояниями может происходить в результате некоторых процессов внутри состояния.&lt;br /&gt;
В нашем случае, при заходе в правое состояние начинает работать команда '''wait'''. Она&lt;br /&gt;
ждет в течении времени, определяемом полем '''t'''. Затем, если задано поле '''go''', машина сама инициирует переход в соответствующее состояние.&lt;br /&gt;
&lt;br /&gt;
Сохраните и запустите во вьювере этот проект. Кликая на головы обоих слонят,&lt;br /&gt;
сравните их поведение.&lt;br /&gt;
&lt;br /&gt;
=== Сумашедший слоненок ===&lt;br /&gt;
&lt;br /&gt;
В заключение, поиздеваемся немного над слоненком, сделав его голове&lt;br /&gt;
такую машину состояний:&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_3_states6.png]]&lt;br /&gt;
&lt;br /&gt;
В результате слонёнок начнет нерегулярно крутит головой то влево, то вправо.&lt;br /&gt;
В каждом состоянии он будет находиться  случайное время от 1-й до 3-х секунд.&lt;br /&gt;
Это определяется параметрами '''t''' и '''dt''', которые задают&lt;br /&gt;
интервал времени от t-dt до t+dt.&lt;br /&gt;
&lt;br /&gt;
Заметим, что, не смотря на самовольное вращение головой,&lt;br /&gt;
слоненок по-прежнему реагирует на клики мышки.&lt;br /&gt;
&lt;br /&gt;
== Машина эмоций ==&lt;br /&gt;
&lt;br /&gt;
Выше мы рассмотрели несколько машин состояний, не сильно отличающихся&lt;br /&gt;
от бездушного чекбокса. &lt;br /&gt;
Приведем теперь пример машины, которую и машиной неловко назвать.&lt;br /&gt;
Это существо, обладающее целым спектром эмоций и реакций на внешнее воздействие:&lt;br /&gt;
&lt;br /&gt;
[[файл:smiles.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Разберемся, что нарисовано на картинке. Каждая рожица - это отдельное состояние,&lt;br /&gt;
отражающее настроение нашего существа. Стрелки - переходы между состояниями&lt;br /&gt;
по командам '''click''' и '''wait'''.&lt;br /&gt;
&lt;br /&gt;
Начинает работать существо из состояния [[файл:s1.png|24px]].&lt;br /&gt;
Как и любые существа, Оно любит внимание. &lt;br /&gt;
Поэтому, при клике переходит в более жизнерадостное состояние [[файл:s2.png|24px]].&lt;br /&gt;
Если больше на него не кликать, Оно опять вернется в начальное состояние,&lt;br /&gt;
а спустя еще какое то время начнет плакать [[файл:s5.png|24px]], из-за полного отсутствия&lt;br /&gt;
внимания. Впрочем, небольшой клик - и Оно снова довольно жизнью.&lt;br /&gt;
&lt;br /&gt;
Обратим внимание на последовательность состояний [[файл:s3.png|24px]], переходящих в &lt;br /&gt;
недовольную гримасу [[файл:s4.png|24px]]. Излишнее внимание также вредно, как &lt;br /&gt;
и его отсутствие. &lt;br /&gt;
&lt;br /&gt;
В качестве упражнения, попробуйте создать такую машину состояний,&lt;br /&gt;
самостоятельно найдя в интернете или нарисовав соответствующие картинки.&lt;br /&gt;
Вы можете также вытащить картинки рожиц из этого урока, кликнув на них для увеличения, а затем нажав правую кнопку мышки, сохранить их на диске.&lt;br /&gt;
Как загрузить картинки в редактор ресурсов было описано в конце предыдущего [[Введение в AppSalute Сreator|урока]].&lt;br /&gt;
Естественно, Вы можете изменить эмоциональное поведение, сделав его более реалистичным :).&lt;br /&gt;
&lt;br /&gt;
В заключение, несколько общих замечаний:&lt;br /&gt;
* Если машина имеет более двух состояний, её необходимо сначала проектировать на бумаге. Именно на диаграмме состояний отчетливо проявляется логика поведения машины.&lt;br /&gt;
* Обычно не должно быть тупиковых состояний, из которых ни куда попасть нельзя. В эмоциональной машине с рожицами таких состояний нет.&lt;br /&gt;
* Всегда необходимо выделять начальное состояние в котором машина начинает своё существование.&lt;br /&gt;
* Памятью машины состояний не обладают, однако имитация памяти может быть реализована при помощи цепочки состояний, как было сделано выше с состояниями счастливой рожицы.&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
* Уменьшите в 2 раза размер слонят (параметр scale в модификаторах свойств). Для этого достаточно поменять масштаб у тела, т.е. его scale распространится и на подобъект.&lt;br /&gt;
* Копированием создайте третьего слонёнка.&lt;br /&gt;
* Запрограммируйте его голову как машину, состоящую из 3-х состояний. В качестве картинки третьего состояния возьмите солнышко из первого урока. Пусть состояния при клике прокручиваются по кругу (left, right, sun,left,...)&lt;br /&gt;
* Добавьте четвертого слонёнка с тремя состояниями и сделайте с ним что хотите.&lt;br /&gt;
* Создайте эмоциональную рожицу&lt;br /&gt;
* Посмотрите снова на описание машин состояний из первого урока. Стало ли понятнее их поведение?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Создание экранов, сцен. Работа с кнопками|Урок 2]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Взаимодействие машин: «Лампочка» и «Светофор»|Урок 4]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_AppSalute_%D0%A1reator&amp;diff=3324</id>
		<title>Введение в AppSalute Сreator</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_AppSalute_%D0%A1reator&amp;diff=3324"/>
		<updated>2013-03-05T09:49:16Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Открытие проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Learning|Оглавление]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Создание экранов, сцен. Работа с кнопками|Урок 2]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
----&lt;br /&gt;
'''Цель:''' &lt;br /&gt;
познакомиться со средой разработки игр AppSalute Сreator.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* проинсталлировать AppSalute Сreator;&lt;br /&gt;
* открыть готовый проект в редакторе сцен;&lt;br /&gt;
* освоить взаимодействие редактора сцен и редактора ресурсов;&lt;br /&gt;
* изучить основные методы редактирования сцены.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
&lt;br /&gt;
Для создания игр в AppSalute Сreator используются четыре взаимодействующих между собой приложения:&lt;br /&gt;
* [[Файл:Ico_main.png|40px]] '''Scene Editor''' - редактор игровых сцен (экранов), в котором происходит настройка свойств объектов и игровой логики. Это основной инструмент при разработке игры.&lt;br /&gt;
* [[Файл:Ico_base.png|40px]] '''Resources Editor''' - хранилище медиа-ресурсов (картинки, звуки, видео, анимация), использующихся в игре. Эти ресурсы при помощи мышки перетаскиваются на сцену в Scene Editor.&lt;br /&gt;
* [[Файл:Ico_text.png|40px]] '''Text Editor''' - хранилище всех текстовых ресурсов (надписей) на различных языках. Аналогично графике и звукам при помощи мышки они перетаскиваются в соответствующие свойства объектов, находящихся в Scene Editor.&lt;br /&gt;
* '''Viewer''' - проигрыватель созданной игры. Обычно запускается непосредственно из Scene Editor. Вы увидите, возможно поиграете, игу в том же виде как и на любом мобильном устройстве.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Layout.png|right]]&lt;br /&gt;
Игра состоит из набора '''экранов'''. На каждом экране может находиться одна или несколько '''сцен'''.&lt;br /&gt;
Например, пусть на экране находится игровое поле и панель с интерфейсными кнопками. Эти две области можно оформить при помощи различных сцен. Первая сцена содержит игровые '''объекты''' редактора, например миниигры такие как puzzle и фоновую картинку. Вторая сцена содержит базовые элементы управления (кнопки, чекбоксы), универсальные машины состояний (программирующие логику) и т.д. &lt;br /&gt;
&lt;br /&gt;
Так как игра обычно запускается на различных устройствах (телефон, планшетник, десктоп), важным понятием является '''лейаут''' (layout). Условно - это различные мониторы, имеющие то или иное разрешение в пикселях и разное соотношение высоты и ширины. Игра может проектироваться только для одного лейаута, однако чаще поддерживается сразу несколько лейаутов: &lt;br /&gt;
&lt;br /&gt;
[[Файл:lesson_1_layouts.png|400px]]&lt;br /&gt;
&lt;br /&gt;
В качестве примера справа на рисунке представлена структура некоторого проекта в лейауте с размерами экрана устройства 960x640 пикселей. На этом лейауте находятся экраны, из которых только один экран(pack1) развернут. Внутри него &lt;br /&gt;
находятся 2 сцены (stg_list1 и stg_main1). Одна сцена (stg_list1) раскрыта и содержит три игровых объекта. Последний из них (tbk_pack1) является сложным объектом, содержащем несколько других.&lt;br /&gt;
Таким образом, игровой проект можно представить как '''дерево''', на различных ветках которого находятся игровые объекты.&lt;br /&gt;
&lt;br /&gt;
Для начала работы с редактором его необходимо [[Установка и настройка|установить]] редактор загрузив и запустив [[Downloads|инсталлятор]].&lt;br /&gt;
По умолчанию все необходимые программы будут размещены '''C:\Program Files\AppSalute Creator''' и материалы для уроков находятся в папке '''Мои Документы\Absolutist\Projects\lessons'''. При желании её можно в дальнейшем перенести в любое удобное место.&lt;br /&gt;
После инсталляции запускаем программу Scene Editor, найдя на рабочем столе или в списке приложений иконку:&lt;br /&gt;
&lt;br /&gt;
[[Файл:icon_se.png]].&lt;br /&gt;
&lt;br /&gt;
== Редактор сцен ==&lt;br /&gt;
&lt;br /&gt;
=== Открытие проекта ===&lt;br /&gt;
	&lt;br /&gt;
Шаг первый. &lt;br /&gt;
Вверху окна редактора расположено общее меню и кнопки быстрого запуска:&lt;br /&gt;
&lt;br /&gt;
[[Файл:001.JPG]]&lt;br /&gt;
&lt;br /&gt;
Если нажать пункт меню &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; (Проект), то выпадет список команд, с помощью которых можно [[Подготовка к работе &amp;quot;Создание проекта&amp;quot;|создать новый]] или загрузить уже созданный проект, сохранить проект с указанием места сохранения и т.д.&lt;br /&gt;
&lt;br /&gt;
Откроем проект, на основании которого будут проходиться эти уроки. Для этого нажмём в меню пункты &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Open&amp;lt;/tt&amp;gt; или сразу кнопку быстрого доступа [[Файл:00 7.png]]. Заходим в папку '''Мои документы/Absolutist/Projects/Lessons'''.&lt;br /&gt;
Внутри неё кликнем на файл '''lessons.seproj''' &lt;br /&gt;
&lt;br /&gt;
[[Файл:Seproj.JPG|150px|center]].&lt;br /&gt;
&lt;br /&gt;
В результате откроется проект, визуальная часть которого окажется в основной (центральной) части редактора. Чтобы увидеть что-то кроме белого экрана, необходимо на панели Layout, которая находится в правой верхней части экрана, кликнуть мышкой на строчку с надписью '''lesson_1''' (это первый игровой экран приложения). В результате мы должны увидеть:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_se.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Свойства проекта ===&lt;br /&gt;
&lt;br /&gt;
В правой части окна редактора расположены две панели '''Layout''' (лейаут) и '''Properties''' (свойства).&lt;br /&gt;
На панели Layout показано иерархическое дерево проекта, который пока состоит из одного игрового экрана lesson_1. Если кликнуть на треугольничек (или плюсик, в зависимости от Вашей ОС) слева от надписи lesson_1, то экран раскроется и мы увидим [[Проектирование_экранов_игры|сцену]], которая находится на [[Проектирование_экранов_игры|экране]]. Она называется lessons_1. Продолжая кликать на треугольники, раскроем всю структуру этого проекта: &lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_layout.png]]&lt;br /&gt;
&lt;br /&gt;
Наиболее простым объектом, находящимся в дереве проекта, является статическая картинка фона, которая называется '''bg'''. Если на неё кликнуть, то ниже в панели Properties можно увидеть параметры настройки этого объекта (его свойства):&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_properties.png]]&lt;br /&gt;
&lt;br /&gt;
Стоит &amp;quot;пораскрывать&amp;quot; ветки настроек объекта bg, нажимая на треугольники (или плюсики) слева от имен полей. Если навести мышкой на имя поля, то появится краткая подсказка, поясняющий смысл свойства.&lt;br /&gt;
&lt;br /&gt;
Панели Layout и Properties могут перетаскиваться мышкой в произвольное место редактора,&lt;br /&gt;
располагаться одна под другой или объединяться в одну панель с двумя закладками внизу.&lt;br /&gt;
Если панели находятся одна под другой, можно мышкой изменить их относительную высоту. Для этого мышь располагаем между ними, пока она не изменит своей формы со стрелочки на сплиттер (две горизонтальные полоски). Затем, нажав на мышь, таскаем вверх-вниз границу между панелями.&lt;br /&gt;
&lt;br /&gt;
=== Проигрывание проекта ===&lt;br /&gt;
&lt;br /&gt;
В процессе разработки игрового проекта, игру в любой момент можно запустить в отдельном окне вьювера ('''Viewer''') для проверки. Для этого в дереве проекта (панель Layout) необходимо выбрать интересующий нас экран (с которого произойдёт запуск) и нажать кнопку [[Файл:00 9.png]] (или пункт меню &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Start viewer&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_1_view.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В нашем случае мы увидим летающее над слонёнком солнышко. Оба объекта (и слонёнок и солнышко) являются активными. Кликните сначала на голову слонёнка - она должна повернуться. Клик на тело слонёнка заставит его подпрыгнуть. При должной сноровке можно кликнуть также на летающее солнышко, что приведёт к кратковременному изменению его формы.&lt;br /&gt;
&lt;br /&gt;
Стоит запомнить три важных правила при работе с вьювером:&lt;br /&gt;
* Если приложение редактировалось, то перед запуском вьювера проект необходимо &amp;lt;u&amp;gt;сначала&amp;lt;/u&amp;gt; сохранить (меню: &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Save&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* Всегда необходимо перед запуском вьювера выбирать экран, который начнёт проигрываться (сейчас такой экран пока один).&lt;br /&gt;
* После просмотра во вьювере игры, его необходимо закрыть, нажав (как обычно в Windows) крестик в правом верхнем углу окна.&lt;br /&gt;
&lt;br /&gt;
=== Кнопки быстрого запуска ===&lt;br /&gt;
&lt;br /&gt;
Приведем для справки описание кнопок быстрого доступа к некоторым командам редактора сцен (более подробная информация будет дана в последующих уроках):&lt;br /&gt;
&lt;br /&gt;
*[[Файл:00 6.png]] — создать новый проект; &lt;br /&gt;
*[[Файл:00 7.png]] — загрузить уже созданный проект;&lt;br /&gt;
*[[Файл:00 8.png]] — сохранить изменения в проекте; &lt;br /&gt;
*[[Файл:00 9.png]] —  запустить Viewer;&lt;br /&gt;
*[[Файл:00 10.png]] — перемещение сцен мышью; &lt;br /&gt;
*[[Файл:009.JPG]] — нормальный вид; &lt;br /&gt;
*[[Файл:010.JPG]] - общие свойства объекта; &lt;br /&gt;
*[[Файл:011.JPG]] - вызов текстового редактора;&lt;br /&gt;
*[[Файл:012.JPG]] — вызов редактора ресурсов;&lt;br /&gt;
*[[Файл:013.JPG]] — анализ проекта;  &lt;br /&gt;
*[[Файл:014.JPG]] — поиск объекта по имени или id.&lt;br /&gt;
&lt;br /&gt;
== Редактор ресурсов ==&lt;br /&gt;
&lt;br /&gt;
Второе важное приложение, это редактор ресурсов.&lt;br /&gt;
Так как мы открыли готовый проект, то с ним уже связана база графических ресурсов.&lt;br /&gt;
Чтобы её увидеть, нажмите кнопку [[Файл:Ico base.png|20px]] (или меню: &amp;lt;tt&amp;gt;Tools&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Resource editor&amp;lt;/tt&amp;gt;).&lt;br /&gt;
Откроется новое окно, которое, на самом деле, является независимым приложением:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_re.png]]&lt;br /&gt;
&lt;br /&gt;
Как и в редакторе сцен, вверху окна редактора ресурсов расположено меню и кнопки быстрого доступа: создать базу ресурсов, открыть уже существующую, добавить картинку (png, jpeg), анимацию, мелодию (mp3, ogg), видео (mp4).&lt;br /&gt;
Ниже, в левой панели находятся папки, внутри которых можно найти различные графические ресурсы, которые мы будем использовать на протяжении этих уроков. Каждая папка названа по имени урока.&lt;br /&gt;
Кликнув на треугольничек (или плюсик) слева от папки lesson_1 мы увидим текстовый список из 8 картинок, находящихся в ранее запущенном приложении со слоненком и солнышком.&lt;br /&gt;
&lt;br /&gt;
Если в дереве папок активна данная папка, то на правой панели мы видим список графических ресурсов в виде иконок. Если же в дереве кликнуть на имя конкретной картинки, то в правой панели она будет представлена в натуральную величину. Если кликнуть правой кнопкой мыши на конкретный ресурс отобразится всплывающее подменю, которое аналогично кнопкам быстрого доступа, за исключением одного пункта - &amp;lt;tt&amp;gt;Заменить изображение&amp;lt;/tt&amp;gt;. Замену изображений необходимо делать через всплывающее подменю.&lt;br /&gt;
&lt;br /&gt;
Текущее приложение содержит фоновую картинку (bg), три картинки частей слонёнка (elephant_body, elephant_head1, elephant_head2) и 4 картинки с различным видом солнышка. &lt;br /&gt;
&lt;br /&gt;
Так как редактор ресурсов является отдельным приложением, он может оказаться под окном редактора сцен. Это не всегда удобно, поэтому зайдем в пункт меню &amp;lt;tt&amp;gt;'''View'''&amp;lt;/tt&amp;gt; редактора ресурсов и поставим галочку у пункта &amp;lt;tt&amp;gt;'''Always on Top'''&amp;lt;/tt&amp;gt;. Теперь редактор ресурсов окажется поверх редактора сцен (как впрочем, и поверх всех остальных окон). Естественно, галочку можно в любой момент снять или свернуть окно редактора ресурсов.&lt;br /&gt;
&lt;br /&gt;
Размер окна ресурсов можно изменять мышкой, схватившись за правый нижний угол окна.&lt;br /&gt;
Правая панель, выводящая картинки, может быть перетащена в любое место окна редактора (для этого необходимо потянуть за её заголовок). Чтобы вернуть панель на фиксированное место, необходимо дважды кликнуть на её заголовке.&lt;br /&gt;
&lt;br /&gt;
== Редактирование сцены ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление на сцену ===&lt;br /&gt;
&lt;br /&gt;
Разберемся, как на сцену добавляются новые объекты. Предполагается, что мы одновременно видим окна обоих редакторов. Убедимся, что в панели проекта (Layout) редактора сцен активна текущая сцена lessons_1. Не путайте её с экраном lesson_1, находящимся выше. Рядом с каждым объектом в дереве ресурсов находится иконка, отражающая тип объекта. Рядом с экраном изображено, что-то похожее на фотоаппарат, а рядом со сценой - чистый лист бумаги. &lt;br /&gt;
 &lt;br /&gt;
Нажав мышкой на иконку головы слонёнка в '''редакторе ресурсов''', перетащим её на сцену в '''редактор сцен''', где кнопку мышки отпустим:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_se_re.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Теперь окно редактора ресурсов можно свернуть, чтобы оно не мешало. &lt;br /&gt;
На сцене мы видим одного полноценного слонёнка и отдельно парящую голову.&lt;br /&gt;
В списке объектов (панель Layout) добавился объект elephant_head_2. &lt;br /&gt;
Его имя по умолчанию совпадает с именем картинки в редакторе ресурсов.&lt;br /&gt;
Если оно не достаточно точно выражает назначение этого объекта, то его '''необходимо'''&lt;br /&gt;
изменить в панели Properties (предполагается, что на дереве объектов эта голова сейчас выбрана).&lt;br /&gt;
Переименуем её, например, в elephant_ghost (дух слонёнка). Для этого кликнем справа от поля '''имя''' в панели Properties и введем новое название. После окончания редактирования нажимаем Enter. Одновременно с этим поменяется имя на дереве объектов (Layout).&lt;br /&gt;
Стоит всегда придерживаться следующего правила:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
[[файл:Ok.png|right|32px]]&lt;br /&gt;
'''Необходимо присваивать объектам в проекте осмысленные имена, отражающие их роль и функции. Это относится также к именам экранов и сцен.'''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Названия объектов могут повторяться, но это плохой тон. В частности, неудачным примером названий в этом проекте служат похожие имена экрана (lesson_1) и сцены (lessons_1). Плохое имя (move) у летающего солнышка (лучше было бы fly_sun). &lt;br /&gt;
&lt;br /&gt;
Обратим внимание, что добавленная голова имеет тип '''image''' (первое поле в панели Properties).&lt;br /&gt;
Большинство объектов в начале имеют такой тип. Далее он меняется в зависимости от функциональности объекта (подробнее об этом в следующих уроках).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
[[файл:Ok.png|right|32px]]&lt;br /&gt;
'''Совет''': Переименовывать объекты можно непосредственно в панели Layout, после двойного клика мышкой на имя этого объекта. Редактирование оканчивается нажатием клавиши Enter.  &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изменение положения ===&lt;br /&gt;
&lt;br /&gt;
На сцене вокруг добавленной головы находится &amp;lt;span style=&amp;quot;color:#007700&amp;quot;&amp;gt;зелёная прямоугольная рамка&amp;lt;/span&amp;gt; (объект активен). &lt;br /&gt;
Если она &amp;lt;span style=&amp;quot;color:#770000&amp;quot;&amp;gt;красная&amp;lt;/span&amp;gt;, необходимо кликнуть на объект (голову) и он станет активным.&lt;br /&gt;
Заметим, что при клике на объекте меняется не только цвет рамки, &lt;br /&gt;
но и активный объект на дереве объектов (Layout). Соответственно в панели Properties показываются его свойства.&lt;br /&gt;
Стоит покликать на различные объекты на сцене и на дереве проекта, наблюдая одним глазом за их рамкой, а другим за панелями проекта и свойств. В заключении этого увлекательного упражнения необходимо снова сделать активной голову.&lt;br /&gt;
&lt;br /&gt;
Активный объект можно таскать мышкой по экрану, задав ему требуемое положение (не оторвите только голову исходному слоненку). Стоит раскрыть свойство &amp;quot;'''положение'''&amp;quot; в панели Properties и понаблюдать, как при таскании головы меняются её координаты. &lt;br /&gt;
Начало координат (точка x=0, y=0) расположено в центре сцены. Горизонтальная ось x направлена вправо, а вертикальная ось y - вниз. Если объект находится ниже центра сцены, он будет иметь положительное значение y, а если выше, то отрицательное.&lt;br /&gt;
Естественно, положение объекта можно изменить и при помощи прямого редактирования полей '''x''', '''y''' свойства &amp;quot;'''положение'''&amp;quot;. Перетащите голову в правый верхний угол сцены.&lt;br /&gt;
&lt;br /&gt;
=== Модификаторы ===&lt;br /&gt;
&lt;br /&gt;
Будем считать, что добавленная голова слона - это дух предков исходного слонёнка.&lt;br /&gt;
Духу положено быть полупрозрачным. Это достигается изменением &lt;br /&gt;
свойства '''alpha''' в группе '''модификаторы''' на панели свойств (Properties).&lt;br /&gt;
Изменим исходное значение 1.00 (непрозрачен) на 0.5 (полупрозрачен).&lt;br /&gt;
Значение alpha=0 соответствует полной невидимости объекта (возможно любое значение между 0 и 1).&lt;br /&gt;
Обратим внимание, что десятичная точка является именно точкой, а не запятой, как всё ещё учат на 1/6 части суши. Впрочем, если в вашей операционной системе в языковых настройках стоит русский язык, Вы увидите привычную запятую, вместо десятичной точки. &lt;br /&gt;
&lt;br /&gt;
Дополнительно в разделе '''модификаторы''' можно изменить угол ('''angle''') в градусах (поставьте, например -30)&lt;br /&gt;
и масштаб картинки (поля '''scale x''' и '''scale y'''). Исходная картинка имеет единичный масштаб, т.е. на сцене выглядит также, как и в редакторе ресурсов. Если масштаб увеличить, то увеличится и картинка (это можно сделать независимо по ширине и высоте). &lt;br /&gt;
Соответственно, значение меньшее 1 (но большее нуля) её уменьшит.&lt;br /&gt;
Отрицательное значение масштаба переворачивает картинку. Задайте scale_x=-2 и scale_y=2.&lt;br /&gt;
В результате должно получиться что-то типа:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_se_midif.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Заметим, что при сильном масштабировании (scale) могут появляться дефекты картинки (квадратики пикселей), поэтому злоупотреблять большими значениями, обычно, не стоит.&lt;br /&gt;
&lt;br /&gt;
=== Z - порядок объектов ===&lt;br /&gt;
&lt;br /&gt;
Пришло время посмотреть, что у нас получилось. Для этого сохраняем все изменения &lt;br /&gt;
[[Файл:00 8.png]] (нажав кнопку Ok на выскочившем окошке).&lt;br /&gt;
Затем запускаем вьювер [[Файл:00 9.png]]. Понаблюдаем за солнцем. Оно движется над фоновой&lt;br /&gt;
картинкой &amp;quot;'''bg'''&amp;quot;, но ''под'' головой духа слона (он должен, естественно, находится в верхней части сцены). Такая последовательность прорисовки связана с порядком объектов в дереве на панели Layout. Отрисовка происходит сверху вниз (сначала bg, затем move и т.д.). Это правило является иерархическим. Если на дереве находятся объекты, содержащие другие объекты, то сначала рисуется вся эта ветка дерева, а затем поверх неё рисуются нижележащие на дереве объекты на других ветках. Это же правило относится к последовательности рисования сцен. Если на экране несколько сцен, то они рисуются сверху вниз в соответствии с их порядком на дереве. Сама по себе сцена - это невидимый объект (контейнер). Поэтому, рисование сцены означает последовательное рисование всех объектов, которые в ней находятся.&lt;br /&gt;
&lt;br /&gt;
Попробуем во вьювере кликнуть на солнце, когда оно оказывается под головой духа слона.&lt;br /&gt;
Его форма не изменяется, так как картинка головы, хотя и является полупрозрачной, по умолчанию &amp;quot;не прокликивается&amp;quot;. Чтобы изменить ситуацию, закроем вьювер (крестик) и отредактируем поле свойств головы с именем &amp;quot;'''прокликиваемая'''&amp;quot;, поставив вместо 0 значение 1. Закончив редактирование поля (нажав Enter), сохраняем проект [[Файл:00 8.png]] и снова запускаем вьювер [[Файл:00 9.png]].&lt;br /&gt;
Теперь дух, как и положено астральным образованиям, пропускает клик сквозь себя.&lt;br /&gt;
&lt;br /&gt;
Порядок рисования объектов можно изменить, перетащив их по дереву в панели Layout.&lt;br /&gt;
Эта операция требует определенной сноровки. Наступим на имя объекта elephant_ghost и не отпуская мыши потащим его вверх. Когда он окажется над объектом bg, отпустим мышь. Он станет подобъектом фона,&lt;br /&gt;
что отобразится как сдвиг elephant_ghost вправо (у объекта фона bg слева появится треугольничек). Теперь снова схватим elephant_ghost и потащим чуть вниз и влево по дереву.&lt;br /&gt;
Когда указатель мыши окажется между объектами bg и move, появится длинная горизонтальная полоска. В этот момент отпускаем мышь, и наш дух размещается между этими объектами.&lt;br /&gt;
&lt;br /&gt;
Ниже на рисунке представлены оба варианта положения духа на дереве сцены (слева подобъект elephant_ghost в объекте bg, а справа равноправный с bg объект, но ниже по дереву и, следовательно, рисуемый позже):&lt;br /&gt;
&lt;br /&gt;
[[файл:intro_ghost.png]]&lt;br /&gt;
&lt;br /&gt;
С точки зрения отрисовки, оба эти варианта приведут к одинаковому результату.&lt;br /&gt;
Проверьте это, потренировавшись в таскании, сохранении и запуске вьювера. Подумайте также, почему так происходит.&lt;br /&gt;
&lt;br /&gt;
=== Удаление объектов ===&lt;br /&gt;
&lt;br /&gt;
Откройте снова окно редактора ресурсов (скорее всего оно находится в свернутом состоянии в панели приложений). Расположите его над окном редактора сцен. Перетащите на сцену из папки lesson_1 какую-нибудь небольшую картинку (например, sun_1). Сверните редактор ресурсов. Новая картинка появилась на сцене и в дереве объектов панели Layout. Чтобы её удалить, нажмите правую кнопку мыши на объекте sun_1 в панели Layout. В вывалившемся меню выберете пункт '''Delete'''. Картинка исчезнет. Эквивалентно, объект можно удалить, кликнув на него в дереве и нажав на клавиатуре кнопку Del.&lt;br /&gt;
&lt;br /&gt;
Заметим, что если объект на сцене сделать активным (кликнув на него - зеленая рамка) и попытаться нажать Del, то ничего не произойдет. Сделано это умышленно. Дело в том, что при удалении уничтожается не только сам объект, но и все его подобъекты. Подобная иерархия видна только на дереве проекта. &lt;br /&gt;
&lt;br /&gt;
В качестве упражнения, поместите на сцену две картинки. Одну их них в дереве панели Layout перетащите на другую, сделав её подобъектом. Потаскайте мышкой по сцене обе картинки. Обратите внимание, что подобъект перемещается независимым образом. В тоже время при таскании корневого объекта начнут двигаться они оба. Координаты подобъекта задаются относительно его владельца. Поэтому при перемещении корневого объекта вместе с ним движутся и все подобъекты.&lt;br /&gt;
Теперь удалите сразу оба объекта, сделав активным  на дереве корневой объект и нажав затем на кнопку Del (или при помощи правой кнопки мыши).&lt;br /&gt;
&lt;br /&gt;
=== Другие объекты ===&lt;br /&gt;
&lt;br /&gt;
На нашей сцене кроме картинок находятся еще два типа объектов - это кнопка и машина состояний. С кнопками мы будем работать уже на следующем [[Создание экранов, сцен. Работа с кнопками|уроке]], а машинам состояний посвящены сразу 3 урока, начиная с [[Checkbox как машина состояний|третьего]]. Пока наша задача состоит в их поиске в дереве проекта и первым знакомством с их свойствами.&lt;br /&gt;
&lt;br /&gt;
Кликнем на треугольник слева от объекта move в панели Layout. Под ним раскроется подобъект с именем '''sun_1'''. Это кнопка. Сам же объект move является машиной состояния. Кроме указания соответствующего типа в панели Properties (посмотрите на него!), тип объекта помечается иконкой на дереве. Для машины - это шестеренка, а кнопка - это кнопка :).&lt;br /&gt;
&lt;br /&gt;
Кликнув на объект '''sun_1''', рассмотрим его свойства в панели Properties. Кроме уже знакомых по картинке (тип=image) полей, появился ряд других. Например, раскроем треугольник свойства &amp;quot;'''внешний вид'''&amp;quot;. Там находятся несколько полей, из которых заполнены '''up''' и '''down'''. В них заданы имена картинок для изображения отжатой и нажатой кнопки. Как они там оказались выяснится в следующем [[Создание экранов, сцен. Работа с кнопками|уроке]]. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь объект '''move'''. Не смотря на небольшое количество свойств, это один из самых универсальных и сложных объектов, позволяющих программировать динамическое поведение объектов и их логику. Чтобы краем глаза заглянуть на кухню этого процесса кликните на свойство '''states''', а затем на появившиеся три точки в этом поле. Выскочит следующее окошко:&lt;br /&gt;
&lt;br /&gt;
[[файл:intro_move1.png]]            [[файл:intro_move.png]]&lt;br /&gt;
&lt;br /&gt;
Эта машина состояний, которая имеет одно состояние. В нём задана последовательность команд, которые управляют её движением по экрану. Сама машина в данном случае является невидимым объектом. Однако, она содержит в качестве подобъекта кнопку '''sun_1'''. Поэтому, когда машина move бегает по экрану, вместе с ней движется и кнопка. Клики на себя принимает кнопка, меняя при этом свой внешний вид. Несложно догадаться, что в результате получается солнышко.&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
* Найдите две машины состояний, связанные со слонёнком, и попробуйте догадаться как они работают (ответы в следующих уроках).&lt;br /&gt;
* Откройте демонстрационный проект, находящийся в папке AppSaluteСreator/Projects/Demo/demо. Поиграйтесь с ним.&lt;br /&gt;
* Снова откройте учебный проект c которым мы работали (AppSaluteСreator/Projects/Lessons/lessons). Он нам понадобится для следующего урока.&lt;br /&gt;
* Затем переходите на [[Создание экранов, сцен. Работа с кнопками|урок 2]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Learning|Оглавление]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Создание экранов, сцен. Работа с кнопками|Урок 2]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_AppSalute_%D0%A1reator&amp;diff=3322</id>
		<title>Введение в AppSalute Сreator</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_AppSalute_%D0%A1reator&amp;diff=3322"/>
		<updated>2013-03-05T09:47:17Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Открытие проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Learning|Оглавление]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Создание экранов, сцен. Работа с кнопками|Урок 2]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
----&lt;br /&gt;
'''Цель:''' &lt;br /&gt;
познакомиться со средой разработки игр AppSalute Сreator.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* проинсталлировать AppSalute Сreator;&lt;br /&gt;
* открыть готовый проект в редакторе сцен;&lt;br /&gt;
* освоить взаимодействие редактора сцен и редактора ресурсов;&lt;br /&gt;
* изучить основные методы редактирования сцены.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
&lt;br /&gt;
Для создания игр в AppSalute Сreator используются четыре взаимодействующих между собой приложения:&lt;br /&gt;
* [[Файл:Ico_main.png|40px]] '''Scene Editor''' - редактор игровых сцен (экранов), в котором происходит настройка свойств объектов и игровой логики. Это основной инструмент при разработке игры.&lt;br /&gt;
* [[Файл:Ico_base.png|40px]] '''Resources Editor''' - хранилище медиа-ресурсов (картинки, звуки, видео, анимация), использующихся в игре. Эти ресурсы при помощи мышки перетаскиваются на сцену в Scene Editor.&lt;br /&gt;
* [[Файл:Ico_text.png|40px]] '''Text Editor''' - хранилище всех текстовых ресурсов (надписей) на различных языках. Аналогично графике и звукам при помощи мышки они перетаскиваются в соответствующие свойства объектов, находящихся в Scene Editor.&lt;br /&gt;
* '''Viewer''' - проигрыватель созданной игры. Обычно запускается непосредственно из Scene Editor. Вы увидите, возможно поиграете, игу в том же виде как и на любом мобильном устройстве.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Layout.png|right]]&lt;br /&gt;
Игра состоит из набора '''экранов'''. На каждом экране может находиться одна или несколько '''сцен'''.&lt;br /&gt;
Например, пусть на экране находится игровое поле и панель с интерфейсными кнопками. Эти две области можно оформить при помощи различных сцен. Первая сцена содержит игровые '''объекты''' редактора, например миниигры такие как puzzle и фоновую картинку. Вторая сцена содержит базовые элементы управления (кнопки, чекбоксы), универсальные машины состояний (программирующие логику) и т.д. &lt;br /&gt;
&lt;br /&gt;
Так как игра обычно запускается на различных устройствах (телефон, планшетник, десктоп), важным понятием является '''лейаут''' (layout). Условно - это различные мониторы, имеющие то или иное разрешение в пикселях и разное соотношение высоты и ширины. Игра может проектироваться только для одного лейаута, однако чаще поддерживается сразу несколько лейаутов: &lt;br /&gt;
&lt;br /&gt;
[[Файл:lesson_1_layouts.png|400px]]&lt;br /&gt;
&lt;br /&gt;
В качестве примера справа на рисунке представлена структура некоторого проекта в лейауте с размерами экрана устройства 960x640 пикселей. На этом лейауте находятся экраны, из которых только один экран(pack1) развернут. Внутри него &lt;br /&gt;
находятся 2 сцены (stg_list1 и stg_main1). Одна сцена (stg_list1) раскрыта и содержит три игровых объекта. Последний из них (tbk_pack1) является сложным объектом, содержащем несколько других.&lt;br /&gt;
Таким образом, игровой проект можно представить как '''дерево''', на различных ветках которого находятся игровые объекты.&lt;br /&gt;
&lt;br /&gt;
Для начала работы с редактором его необходимо [[Установка и настройка|установить]] редактор загрузив и запустив [[Downloads|инсталлятор]].&lt;br /&gt;
По умолчанию все необходимые программы будут размещены '''C:\Program Files\AppSalute Creator''' и материалы для уроков находятся в папке '''Мои Документы\Absolutist\Projects\lessons'''. При желании её можно в дальнейшем перенести в любое удобное место.&lt;br /&gt;
После инсталляции запускаем программу Scene Editor, найдя на рабочем столе или в списке приложений иконку:&lt;br /&gt;
&lt;br /&gt;
[[Файл:icon_se.png]].&lt;br /&gt;
&lt;br /&gt;
== Редактор сцен ==&lt;br /&gt;
&lt;br /&gt;
=== Открытие проекта ===&lt;br /&gt;
	&lt;br /&gt;
Шаг первый. &lt;br /&gt;
Вверху окна редактора расположено общее меню и кнопки быстрого запуска:&lt;br /&gt;
&lt;br /&gt;
[[Файл:001.JPG]]&lt;br /&gt;
&lt;br /&gt;
Если нажать пункт меню &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; (Проект), то выпадет список команд, с помощью которых можно создать новый [[Подготовка к работе &amp;quot;Создание проекта&amp;quot;]]или загрузить уже созданный проект, сохранить проект с указанием места сохранения и т.д.&lt;br /&gt;
&lt;br /&gt;
Откроем проект, на основании которого будут проходиться эти уроки. Для этого нажмём в меню пункты &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Open&amp;lt;/tt&amp;gt; или сразу кнопку быстрого доступа [[Файл:00 7.png]]. Заходим в папку '''Мои документы/Absolutist/Projects/Lessons'''.&lt;br /&gt;
Внутри неё кликнем на файл '''lessons.seproj''' &lt;br /&gt;
&lt;br /&gt;
[[Файл:Seproj.JPG|150px|center]].&lt;br /&gt;
&lt;br /&gt;
В результате откроется проект, визуальная часть которого окажется в основной (центральной) части редактора. Чтобы увидеть что-то кроме белого экрана, необходимо на панели Layout, которая находится в правой верхней части экрана, кликнуть мышкой на строчку с надписью '''lesson_1''' (это первый игровой экран приложения). В результате мы должны увидеть:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_se.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Свойства проекта ===&lt;br /&gt;
&lt;br /&gt;
В правой части окна редактора расположены две панели '''Layout''' (лейаут) и '''Properties''' (свойства).&lt;br /&gt;
На панели Layout показано иерархическое дерево проекта, который пока состоит из одного игрового экрана lesson_1. Если кликнуть на треугольничек (или плюсик, в зависимости от Вашей ОС) слева от надписи lesson_1, то экран раскроется и мы увидим [[Проектирование_экранов_игры|сцену]], которая находится на [[Проектирование_экранов_игры|экране]]. Она называется lessons_1. Продолжая кликать на треугольники, раскроем всю структуру этого проекта: &lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_layout.png]]&lt;br /&gt;
&lt;br /&gt;
Наиболее простым объектом, находящимся в дереве проекта, является статическая картинка фона, которая называется '''bg'''. Если на неё кликнуть, то ниже в панели Properties можно увидеть параметры настройки этого объекта (его свойства):&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_properties.png]]&lt;br /&gt;
&lt;br /&gt;
Стоит &amp;quot;пораскрывать&amp;quot; ветки настроек объекта bg, нажимая на треугольники (или плюсики) слева от имен полей. Если навести мышкой на имя поля, то появится краткая подсказка, поясняющий смысл свойства.&lt;br /&gt;
&lt;br /&gt;
Панели Layout и Properties могут перетаскиваться мышкой в произвольное место редактора,&lt;br /&gt;
располагаться одна под другой или объединяться в одну панель с двумя закладками внизу.&lt;br /&gt;
Если панели находятся одна под другой, можно мышкой изменить их относительную высоту. Для этого мышь располагаем между ними, пока она не изменит своей формы со стрелочки на сплиттер (две горизонтальные полоски). Затем, нажав на мышь, таскаем вверх-вниз границу между панелями.&lt;br /&gt;
&lt;br /&gt;
=== Проигрывание проекта ===&lt;br /&gt;
&lt;br /&gt;
В процессе разработки игрового проекта, игру в любой момент можно запустить в отдельном окне вьювера ('''Viewer''') для проверки. Для этого в дереве проекта (панель Layout) необходимо выбрать интересующий нас экран (с которого произойдёт запуск) и нажать кнопку [[Файл:00 9.png]] (или пункт меню &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Start viewer&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_1_view.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В нашем случае мы увидим летающее над слонёнком солнышко. Оба объекта (и слонёнок и солнышко) являются активными. Кликните сначала на голову слонёнка - она должна повернуться. Клик на тело слонёнка заставит его подпрыгнуть. При должной сноровке можно кликнуть также на летающее солнышко, что приведёт к кратковременному изменению его формы.&lt;br /&gt;
&lt;br /&gt;
Стоит запомнить три важных правила при работе с вьювером:&lt;br /&gt;
* Если приложение редактировалось, то перед запуском вьювера проект необходимо &amp;lt;u&amp;gt;сначала&amp;lt;/u&amp;gt; сохранить (меню: &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Save&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* Всегда необходимо перед запуском вьювера выбирать экран, который начнёт проигрываться (сейчас такой экран пока один).&lt;br /&gt;
* После просмотра во вьювере игры, его необходимо закрыть, нажав (как обычно в Windows) крестик в правом верхнем углу окна.&lt;br /&gt;
&lt;br /&gt;
=== Кнопки быстрого запуска ===&lt;br /&gt;
&lt;br /&gt;
Приведем для справки описание кнопок быстрого доступа к некоторым командам редактора сцен (более подробная информация будет дана в последующих уроках):&lt;br /&gt;
&lt;br /&gt;
*[[Файл:00 6.png]] — создать новый проект; &lt;br /&gt;
*[[Файл:00 7.png]] — загрузить уже созданный проект;&lt;br /&gt;
*[[Файл:00 8.png]] — сохранить изменения в проекте; &lt;br /&gt;
*[[Файл:00 9.png]] —  запустить Viewer;&lt;br /&gt;
*[[Файл:00 10.png]] — перемещение сцен мышью; &lt;br /&gt;
*[[Файл:009.JPG]] — нормальный вид; &lt;br /&gt;
*[[Файл:010.JPG]] - общие свойства объекта; &lt;br /&gt;
*[[Файл:011.JPG]] - вызов текстового редактора;&lt;br /&gt;
*[[Файл:012.JPG]] — вызов редактора ресурсов;&lt;br /&gt;
*[[Файл:013.JPG]] — анализ проекта;  &lt;br /&gt;
*[[Файл:014.JPG]] — поиск объекта по имени или id.&lt;br /&gt;
&lt;br /&gt;
== Редактор ресурсов ==&lt;br /&gt;
&lt;br /&gt;
Второе важное приложение, это редактор ресурсов.&lt;br /&gt;
Так как мы открыли готовый проект, то с ним уже связана база графических ресурсов.&lt;br /&gt;
Чтобы её увидеть, нажмите кнопку [[Файл:Ico base.png|20px]] (или меню: &amp;lt;tt&amp;gt;Tools&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Resource editor&amp;lt;/tt&amp;gt;).&lt;br /&gt;
Откроется новое окно, которое, на самом деле, является независимым приложением:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_re.png]]&lt;br /&gt;
&lt;br /&gt;
Как и в редакторе сцен, вверху окна редактора ресурсов расположено меню и кнопки быстрого доступа: создать базу ресурсов, открыть уже существующую, добавить картинку (png, jpeg), анимацию, мелодию (mp3, ogg), видео (mp4).&lt;br /&gt;
Ниже, в левой панели находятся папки, внутри которых можно найти различные графические ресурсы, которые мы будем использовать на протяжении этих уроков. Каждая папка названа по имени урока.&lt;br /&gt;
Кликнув на треугольничек (или плюсик) слева от папки lesson_1 мы увидим текстовый список из 8 картинок, находящихся в ранее запущенном приложении со слоненком и солнышком.&lt;br /&gt;
&lt;br /&gt;
Если в дереве папок активна данная папка, то на правой панели мы видим список графических ресурсов в виде иконок. Если же в дереве кликнуть на имя конкретной картинки, то в правой панели она будет представлена в натуральную величину. Если кликнуть правой кнопкой мыши на конкретный ресурс отобразится всплывающее подменю, которое аналогично кнопкам быстрого доступа, за исключением одного пункта - &amp;lt;tt&amp;gt;Заменить изображение&amp;lt;/tt&amp;gt;. Замену изображений необходимо делать через всплывающее подменю.&lt;br /&gt;
&lt;br /&gt;
Текущее приложение содержит фоновую картинку (bg), три картинки частей слонёнка (elephant_body, elephant_head1, elephant_head2) и 4 картинки с различным видом солнышка. &lt;br /&gt;
&lt;br /&gt;
Так как редактор ресурсов является отдельным приложением, он может оказаться под окном редактора сцен. Это не всегда удобно, поэтому зайдем в пункт меню &amp;lt;tt&amp;gt;'''View'''&amp;lt;/tt&amp;gt; редактора ресурсов и поставим галочку у пункта &amp;lt;tt&amp;gt;'''Always on Top'''&amp;lt;/tt&amp;gt;. Теперь редактор ресурсов окажется поверх редактора сцен (как впрочем, и поверх всех остальных окон). Естественно, галочку можно в любой момент снять или свернуть окно редактора ресурсов.&lt;br /&gt;
&lt;br /&gt;
Размер окна ресурсов можно изменять мышкой, схватившись за правый нижний угол окна.&lt;br /&gt;
Правая панель, выводящая картинки, может быть перетащена в любое место окна редактора (для этого необходимо потянуть за её заголовок). Чтобы вернуть панель на фиксированное место, необходимо дважды кликнуть на её заголовке.&lt;br /&gt;
&lt;br /&gt;
== Редактирование сцены ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление на сцену ===&lt;br /&gt;
&lt;br /&gt;
Разберемся, как на сцену добавляются новые объекты. Предполагается, что мы одновременно видим окна обоих редакторов. Убедимся, что в панели проекта (Layout) редактора сцен активна текущая сцена lessons_1. Не путайте её с экраном lesson_1, находящимся выше. Рядом с каждым объектом в дереве ресурсов находится иконка, отражающая тип объекта. Рядом с экраном изображено, что-то похожее на фотоаппарат, а рядом со сценой - чистый лист бумаги. &lt;br /&gt;
 &lt;br /&gt;
Нажав мышкой на иконку головы слонёнка в '''редакторе ресурсов''', перетащим её на сцену в '''редактор сцен''', где кнопку мышки отпустим:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_se_re.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Теперь окно редактора ресурсов можно свернуть, чтобы оно не мешало. &lt;br /&gt;
На сцене мы видим одного полноценного слонёнка и отдельно парящую голову.&lt;br /&gt;
В списке объектов (панель Layout) добавился объект elephant_head_2. &lt;br /&gt;
Его имя по умолчанию совпадает с именем картинки в редакторе ресурсов.&lt;br /&gt;
Если оно не достаточно точно выражает назначение этого объекта, то его '''необходимо'''&lt;br /&gt;
изменить в панели Properties (предполагается, что на дереве объектов эта голова сейчас выбрана).&lt;br /&gt;
Переименуем её, например, в elephant_ghost (дух слонёнка). Для этого кликнем справа от поля '''имя''' в панели Properties и введем новое название. После окончания редактирования нажимаем Enter. Одновременно с этим поменяется имя на дереве объектов (Layout).&lt;br /&gt;
Стоит всегда придерживаться следующего правила:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
[[файл:Ok.png|right|32px]]&lt;br /&gt;
'''Необходимо присваивать объектам в проекте осмысленные имена, отражающие их роль и функции. Это относится также к именам экранов и сцен.'''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Названия объектов могут повторяться, но это плохой тон. В частности, неудачным примером названий в этом проекте служат похожие имена экрана (lesson_1) и сцены (lessons_1). Плохое имя (move) у летающего солнышка (лучше было бы fly_sun). &lt;br /&gt;
&lt;br /&gt;
Обратим внимание, что добавленная голова имеет тип '''image''' (первое поле в панели Properties).&lt;br /&gt;
Большинство объектов в начале имеют такой тип. Далее он меняется в зависимости от функциональности объекта (подробнее об этом в следующих уроках).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
[[файл:Ok.png|right|32px]]&lt;br /&gt;
'''Совет''': Переименовывать объекты можно непосредственно в панели Layout, после двойного клика мышкой на имя этого объекта. Редактирование оканчивается нажатием клавиши Enter.  &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изменение положения ===&lt;br /&gt;
&lt;br /&gt;
На сцене вокруг добавленной головы находится &amp;lt;span style=&amp;quot;color:#007700&amp;quot;&amp;gt;зелёная прямоугольная рамка&amp;lt;/span&amp;gt; (объект активен). &lt;br /&gt;
Если она &amp;lt;span style=&amp;quot;color:#770000&amp;quot;&amp;gt;красная&amp;lt;/span&amp;gt;, необходимо кликнуть на объект (голову) и он станет активным.&lt;br /&gt;
Заметим, что при клике на объекте меняется не только цвет рамки, &lt;br /&gt;
но и активный объект на дереве объектов (Layout). Соответственно в панели Properties показываются его свойства.&lt;br /&gt;
Стоит покликать на различные объекты на сцене и на дереве проекта, наблюдая одним глазом за их рамкой, а другим за панелями проекта и свойств. В заключении этого увлекательного упражнения необходимо снова сделать активной голову.&lt;br /&gt;
&lt;br /&gt;
Активный объект можно таскать мышкой по экрану, задав ему требуемое положение (не оторвите только голову исходному слоненку). Стоит раскрыть свойство &amp;quot;'''положение'''&amp;quot; в панели Properties и понаблюдать, как при таскании головы меняются её координаты. &lt;br /&gt;
Начало координат (точка x=0, y=0) расположено в центре сцены. Горизонтальная ось x направлена вправо, а вертикальная ось y - вниз. Если объект находится ниже центра сцены, он будет иметь положительное значение y, а если выше, то отрицательное.&lt;br /&gt;
Естественно, положение объекта можно изменить и при помощи прямого редактирования полей '''x''', '''y''' свойства &amp;quot;'''положение'''&amp;quot;. Перетащите голову в правый верхний угол сцены.&lt;br /&gt;
&lt;br /&gt;
=== Модификаторы ===&lt;br /&gt;
&lt;br /&gt;
Будем считать, что добавленная голова слона - это дух предков исходного слонёнка.&lt;br /&gt;
Духу положено быть полупрозрачным. Это достигается изменением &lt;br /&gt;
свойства '''alpha''' в группе '''модификаторы''' на панели свойств (Properties).&lt;br /&gt;
Изменим исходное значение 1.00 (непрозрачен) на 0.5 (полупрозрачен).&lt;br /&gt;
Значение alpha=0 соответствует полной невидимости объекта (возможно любое значение между 0 и 1).&lt;br /&gt;
Обратим внимание, что десятичная точка является именно точкой, а не запятой, как всё ещё учат на 1/6 части суши. Впрочем, если в вашей операционной системе в языковых настройках стоит русский язык, Вы увидите привычную запятую, вместо десятичной точки. &lt;br /&gt;
&lt;br /&gt;
Дополнительно в разделе '''модификаторы''' можно изменить угол ('''angle''') в градусах (поставьте, например -30)&lt;br /&gt;
и масштаб картинки (поля '''scale x''' и '''scale y'''). Исходная картинка имеет единичный масштаб, т.е. на сцене выглядит также, как и в редакторе ресурсов. Если масштаб увеличить, то увеличится и картинка (это можно сделать независимо по ширине и высоте). &lt;br /&gt;
Соответственно, значение меньшее 1 (но большее нуля) её уменьшит.&lt;br /&gt;
Отрицательное значение масштаба переворачивает картинку. Задайте scale_x=-2 и scale_y=2.&lt;br /&gt;
В результате должно получиться что-то типа:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_se_midif.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Заметим, что при сильном масштабировании (scale) могут появляться дефекты картинки (квадратики пикселей), поэтому злоупотреблять большими значениями, обычно, не стоит.&lt;br /&gt;
&lt;br /&gt;
=== Z - порядок объектов ===&lt;br /&gt;
&lt;br /&gt;
Пришло время посмотреть, что у нас получилось. Для этого сохраняем все изменения &lt;br /&gt;
[[Файл:00 8.png]] (нажав кнопку Ok на выскочившем окошке).&lt;br /&gt;
Затем запускаем вьювер [[Файл:00 9.png]]. Понаблюдаем за солнцем. Оно движется над фоновой&lt;br /&gt;
картинкой &amp;quot;'''bg'''&amp;quot;, но ''под'' головой духа слона (он должен, естественно, находится в верхней части сцены). Такая последовательность прорисовки связана с порядком объектов в дереве на панели Layout. Отрисовка происходит сверху вниз (сначала bg, затем move и т.д.). Это правило является иерархическим. Если на дереве находятся объекты, содержащие другие объекты, то сначала рисуется вся эта ветка дерева, а затем поверх неё рисуются нижележащие на дереве объекты на других ветках. Это же правило относится к последовательности рисования сцен. Если на экране несколько сцен, то они рисуются сверху вниз в соответствии с их порядком на дереве. Сама по себе сцена - это невидимый объект (контейнер). Поэтому, рисование сцены означает последовательное рисование всех объектов, которые в ней находятся.&lt;br /&gt;
&lt;br /&gt;
Попробуем во вьювере кликнуть на солнце, когда оно оказывается под головой духа слона.&lt;br /&gt;
Его форма не изменяется, так как картинка головы, хотя и является полупрозрачной, по умолчанию &amp;quot;не прокликивается&amp;quot;. Чтобы изменить ситуацию, закроем вьювер (крестик) и отредактируем поле свойств головы с именем &amp;quot;'''прокликиваемая'''&amp;quot;, поставив вместо 0 значение 1. Закончив редактирование поля (нажав Enter), сохраняем проект [[Файл:00 8.png]] и снова запускаем вьювер [[Файл:00 9.png]].&lt;br /&gt;
Теперь дух, как и положено астральным образованиям, пропускает клик сквозь себя.&lt;br /&gt;
&lt;br /&gt;
Порядок рисования объектов можно изменить, перетащив их по дереву в панели Layout.&lt;br /&gt;
Эта операция требует определенной сноровки. Наступим на имя объекта elephant_ghost и не отпуская мыши потащим его вверх. Когда он окажется над объектом bg, отпустим мышь. Он станет подобъектом фона,&lt;br /&gt;
что отобразится как сдвиг elephant_ghost вправо (у объекта фона bg слева появится треугольничек). Теперь снова схватим elephant_ghost и потащим чуть вниз и влево по дереву.&lt;br /&gt;
Когда указатель мыши окажется между объектами bg и move, появится длинная горизонтальная полоска. В этот момент отпускаем мышь, и наш дух размещается между этими объектами.&lt;br /&gt;
&lt;br /&gt;
Ниже на рисунке представлены оба варианта положения духа на дереве сцены (слева подобъект elephant_ghost в объекте bg, а справа равноправный с bg объект, но ниже по дереву и, следовательно, рисуемый позже):&lt;br /&gt;
&lt;br /&gt;
[[файл:intro_ghost.png]]&lt;br /&gt;
&lt;br /&gt;
С точки зрения отрисовки, оба эти варианта приведут к одинаковому результату.&lt;br /&gt;
Проверьте это, потренировавшись в таскании, сохранении и запуске вьювера. Подумайте также, почему так происходит.&lt;br /&gt;
&lt;br /&gt;
=== Удаление объектов ===&lt;br /&gt;
&lt;br /&gt;
Откройте снова окно редактора ресурсов (скорее всего оно находится в свернутом состоянии в панели приложений). Расположите его над окном редактора сцен. Перетащите на сцену из папки lesson_1 какую-нибудь небольшую картинку (например, sun_1). Сверните редактор ресурсов. Новая картинка появилась на сцене и в дереве объектов панели Layout. Чтобы её удалить, нажмите правую кнопку мыши на объекте sun_1 в панели Layout. В вывалившемся меню выберете пункт '''Delete'''. Картинка исчезнет. Эквивалентно, объект можно удалить, кликнув на него в дереве и нажав на клавиатуре кнопку Del.&lt;br /&gt;
&lt;br /&gt;
Заметим, что если объект на сцене сделать активным (кликнув на него - зеленая рамка) и попытаться нажать Del, то ничего не произойдет. Сделано это умышленно. Дело в том, что при удалении уничтожается не только сам объект, но и все его подобъекты. Подобная иерархия видна только на дереве проекта. &lt;br /&gt;
&lt;br /&gt;
В качестве упражнения, поместите на сцену две картинки. Одну их них в дереве панели Layout перетащите на другую, сделав её подобъектом. Потаскайте мышкой по сцене обе картинки. Обратите внимание, что подобъект перемещается независимым образом. В тоже время при таскании корневого объекта начнут двигаться они оба. Координаты подобъекта задаются относительно его владельца. Поэтому при перемещении корневого объекта вместе с ним движутся и все подобъекты.&lt;br /&gt;
Теперь удалите сразу оба объекта, сделав активным  на дереве корневой объект и нажав затем на кнопку Del (или при помощи правой кнопки мыши).&lt;br /&gt;
&lt;br /&gt;
=== Другие объекты ===&lt;br /&gt;
&lt;br /&gt;
На нашей сцене кроме картинок находятся еще два типа объектов - это кнопка и машина состояний. С кнопками мы будем работать уже на следующем [[Создание экранов, сцен. Работа с кнопками|уроке]], а машинам состояний посвящены сразу 3 урока, начиная с [[Checkbox как машина состояний|третьего]]. Пока наша задача состоит в их поиске в дереве проекта и первым знакомством с их свойствами.&lt;br /&gt;
&lt;br /&gt;
Кликнем на треугольник слева от объекта move в панели Layout. Под ним раскроется подобъект с именем '''sun_1'''. Это кнопка. Сам же объект move является машиной состояния. Кроме указания соответствующего типа в панели Properties (посмотрите на него!), тип объекта помечается иконкой на дереве. Для машины - это шестеренка, а кнопка - это кнопка :).&lt;br /&gt;
&lt;br /&gt;
Кликнув на объект '''sun_1''', рассмотрим его свойства в панели Properties. Кроме уже знакомых по картинке (тип=image) полей, появился ряд других. Например, раскроем треугольник свойства &amp;quot;'''внешний вид'''&amp;quot;. Там находятся несколько полей, из которых заполнены '''up''' и '''down'''. В них заданы имена картинок для изображения отжатой и нажатой кнопки. Как они там оказались выяснится в следующем [[Создание экранов, сцен. Работа с кнопками|уроке]]. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь объект '''move'''. Не смотря на небольшое количество свойств, это один из самых универсальных и сложных объектов, позволяющих программировать динамическое поведение объектов и их логику. Чтобы краем глаза заглянуть на кухню этого процесса кликните на свойство '''states''', а затем на появившиеся три точки в этом поле. Выскочит следующее окошко:&lt;br /&gt;
&lt;br /&gt;
[[файл:intro_move1.png]]            [[файл:intro_move.png]]&lt;br /&gt;
&lt;br /&gt;
Эта машина состояний, которая имеет одно состояние. В нём задана последовательность команд, которые управляют её движением по экрану. Сама машина в данном случае является невидимым объектом. Однако, она содержит в качестве подобъекта кнопку '''sun_1'''. Поэтому, когда машина move бегает по экрану, вместе с ней движется и кнопка. Клики на себя принимает кнопка, меняя при этом свой внешний вид. Несложно догадаться, что в результате получается солнышко.&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
* Найдите две машины состояний, связанные со слонёнком, и попробуйте догадаться как они работают (ответы в следующих уроках).&lt;br /&gt;
* Откройте демонстрационный проект, находящийся в папке AppSaluteСreator/Projects/Demo/demо. Поиграйтесь с ним.&lt;br /&gt;
* Снова откройте учебный проект c которым мы работали (AppSaluteСreator/Projects/Lessons/lessons). Он нам понадобится для следующего урока.&lt;br /&gt;
* Затем переходите на [[Создание экранов, сцен. Работа с кнопками|урок 2]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Learning|Оглавление]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Создание экранов, сцен. Работа с кнопками|Урок 2]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.appsalutecreator.com/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_AppSalute_%D0%A1reator&amp;diff=3321</id>
		<title>Введение в AppSalute Сreator</title>
		<link rel="alternate" type="text/html" href="https://wiki.appsalutecreator.com/index.php?title=%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_AppSalute_%D0%A1reator&amp;diff=3321"/>
		<updated>2013-03-05T09:45:50Z</updated>

		<summary type="html">&lt;p&gt;Imarunenko: /* Открытие проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Learning|Оглавление]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Создание экранов, сцен. Работа с кнопками|Урок 2]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{{TOC right}}&lt;br /&gt;
----&lt;br /&gt;
'''Цель:''' &lt;br /&gt;
познакомиться со средой разработки игр AppSalute Сreator.&lt;br /&gt;
&lt;br /&gt;
'''Задачи:''' &lt;br /&gt;
* проинсталлировать AppSalute Сreator;&lt;br /&gt;
* открыть готовый проект в редакторе сцен;&lt;br /&gt;
* освоить взаимодействие редактора сцен и редактора ресурсов;&lt;br /&gt;
* изучить основные методы редактирования сцены.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
&lt;br /&gt;
Для создания игр в AppSalute Сreator используются четыре взаимодействующих между собой приложения:&lt;br /&gt;
* [[Файл:Ico_main.png|40px]] '''Scene Editor''' - редактор игровых сцен (экранов), в котором происходит настройка свойств объектов и игровой логики. Это основной инструмент при разработке игры.&lt;br /&gt;
* [[Файл:Ico_base.png|40px]] '''Resources Editor''' - хранилище медиа-ресурсов (картинки, звуки, видео, анимация), использующихся в игре. Эти ресурсы при помощи мышки перетаскиваются на сцену в Scene Editor.&lt;br /&gt;
* [[Файл:Ico_text.png|40px]] '''Text Editor''' - хранилище всех текстовых ресурсов (надписей) на различных языках. Аналогично графике и звукам при помощи мышки они перетаскиваются в соответствующие свойства объектов, находящихся в Scene Editor.&lt;br /&gt;
* '''Viewer''' - проигрыватель созданной игры. Обычно запускается непосредственно из Scene Editor. Вы увидите, возможно поиграете, игу в том же виде как и на любом мобильном устройстве.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Layout.png|right]]&lt;br /&gt;
Игра состоит из набора '''экранов'''. На каждом экране может находиться одна или несколько '''сцен'''.&lt;br /&gt;
Например, пусть на экране находится игровое поле и панель с интерфейсными кнопками. Эти две области можно оформить при помощи различных сцен. Первая сцена содержит игровые '''объекты''' редактора, например миниигры такие как puzzle и фоновую картинку. Вторая сцена содержит базовые элементы управления (кнопки, чекбоксы), универсальные машины состояний (программирующие логику) и т.д. &lt;br /&gt;
&lt;br /&gt;
Так как игра обычно запускается на различных устройствах (телефон, планшетник, десктоп), важным понятием является '''лейаут''' (layout). Условно - это различные мониторы, имеющие то или иное разрешение в пикселях и разное соотношение высоты и ширины. Игра может проектироваться только для одного лейаута, однако чаще поддерживается сразу несколько лейаутов: &lt;br /&gt;
&lt;br /&gt;
[[Файл:lesson_1_layouts.png|400px]]&lt;br /&gt;
&lt;br /&gt;
В качестве примера справа на рисунке представлена структура некоторого проекта в лейауте с размерами экрана устройства 960x640 пикселей. На этом лейауте находятся экраны, из которых только один экран(pack1) развернут. Внутри него &lt;br /&gt;
находятся 2 сцены (stg_list1 и stg_main1). Одна сцена (stg_list1) раскрыта и содержит три игровых объекта. Последний из них (tbk_pack1) является сложным объектом, содержащем несколько других.&lt;br /&gt;
Таким образом, игровой проект можно представить как '''дерево''', на различных ветках которого находятся игровые объекты.&lt;br /&gt;
&lt;br /&gt;
Для начала работы с редактором его необходимо [[Установка и настройка|установить]] редактор загрузив и запустив [[Downloads|инсталлятор]].&lt;br /&gt;
По умолчанию все необходимые программы будут размещены '''C:\Program Files\AppSalute Creator''' и материалы для уроков находятся в папке '''Мои Документы\Absolutist\Projects\lessons'''. При желании её можно в дальнейшем перенести в любое удобное место.&lt;br /&gt;
После инсталляции запускаем программу Scene Editor, найдя на рабочем столе или в списке приложений иконку:&lt;br /&gt;
&lt;br /&gt;
[[Файл:icon_se.png]].&lt;br /&gt;
&lt;br /&gt;
== Редактор сцен ==&lt;br /&gt;
&lt;br /&gt;
=== Открытие проекта ===&lt;br /&gt;
	&lt;br /&gt;
Шаг первый. &lt;br /&gt;
Вверху окна редактора расположено общее меню и кнопки быстрого запуска:&lt;br /&gt;
&lt;br /&gt;
[[Файл:001.JPG]]&lt;br /&gt;
&lt;br /&gt;
Если нажать пункт меню &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; (Проект), то выпадет список команд, с помощью которых можно создать новый [Подготовка к работе &amp;quot;Создание проекта&amp;quot;]или загрузить уже созданный проект, сохранить проект с указанием места сохранения и т.д.&lt;br /&gt;
&lt;br /&gt;
Откроем проект, на основании которого будут проходиться эти уроки. Для этого нажмём в меню пункты &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Open&amp;lt;/tt&amp;gt; или сразу кнопку быстрого доступа [[Файл:00 7.png]]. Заходим в папку '''Мои документы/Absolutist/Projects/Lessons'''.&lt;br /&gt;
Внутри неё кликнем на файл '''lessons.seproj''' &lt;br /&gt;
&lt;br /&gt;
[[Файл:Seproj.JPG|150px|center]].&lt;br /&gt;
&lt;br /&gt;
В результате откроется проект, визуальная часть которого окажется в основной (центральной) части редактора. Чтобы увидеть что-то кроме белого экрана, необходимо на панели Layout, которая находится в правой верхней части экрана, кликнуть мышкой на строчку с надписью '''lesson_1''' (это первый игровой экран приложения). В результате мы должны увидеть:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_se.png|600px]]&lt;br /&gt;
&lt;br /&gt;
=== Свойства проекта ===&lt;br /&gt;
&lt;br /&gt;
В правой части окна редактора расположены две панели '''Layout''' (лейаут) и '''Properties''' (свойства).&lt;br /&gt;
На панели Layout показано иерархическое дерево проекта, который пока состоит из одного игрового экрана lesson_1. Если кликнуть на треугольничек (или плюсик, в зависимости от Вашей ОС) слева от надписи lesson_1, то экран раскроется и мы увидим [[Проектирование_экранов_игры|сцену]], которая находится на [[Проектирование_экранов_игры|экране]]. Она называется lessons_1. Продолжая кликать на треугольники, раскроем всю структуру этого проекта: &lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_layout.png]]&lt;br /&gt;
&lt;br /&gt;
Наиболее простым объектом, находящимся в дереве проекта, является статическая картинка фона, которая называется '''bg'''. Если на неё кликнуть, то ниже в панели Properties можно увидеть параметры настройки этого объекта (его свойства):&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_properties.png]]&lt;br /&gt;
&lt;br /&gt;
Стоит &amp;quot;пораскрывать&amp;quot; ветки настроек объекта bg, нажимая на треугольники (или плюсики) слева от имен полей. Если навести мышкой на имя поля, то появится краткая подсказка, поясняющий смысл свойства.&lt;br /&gt;
&lt;br /&gt;
Панели Layout и Properties могут перетаскиваться мышкой в произвольное место редактора,&lt;br /&gt;
располагаться одна под другой или объединяться в одну панель с двумя закладками внизу.&lt;br /&gt;
Если панели находятся одна под другой, можно мышкой изменить их относительную высоту. Для этого мышь располагаем между ними, пока она не изменит своей формы со стрелочки на сплиттер (две горизонтальные полоски). Затем, нажав на мышь, таскаем вверх-вниз границу между панелями.&lt;br /&gt;
&lt;br /&gt;
=== Проигрывание проекта ===&lt;br /&gt;
&lt;br /&gt;
В процессе разработки игрового проекта, игру в любой момент можно запустить в отдельном окне вьювера ('''Viewer''') для проверки. Для этого в дереве проекта (панель Layout) необходимо выбрать интересующий нас экран (с которого произойдёт запуск) и нажать кнопку [[Файл:00 9.png]] (или пункт меню &amp;lt;tt&amp;gt;View&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Start viewer&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[файл:lesson_1_view.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В нашем случае мы увидим летающее над слонёнком солнышко. Оба объекта (и слонёнок и солнышко) являются активными. Кликните сначала на голову слонёнка - она должна повернуться. Клик на тело слонёнка заставит его подпрыгнуть. При должной сноровке можно кликнуть также на летающее солнышко, что приведёт к кратковременному изменению его формы.&lt;br /&gt;
&lt;br /&gt;
Стоит запомнить три важных правила при работе с вьювером:&lt;br /&gt;
* Если приложение редактировалось, то перед запуском вьювера проект необходимо &amp;lt;u&amp;gt;сначала&amp;lt;/u&amp;gt; сохранить (меню: &amp;lt;tt&amp;gt;Project&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Save&amp;lt;/tt&amp;gt;).&lt;br /&gt;
* Всегда необходимо перед запуском вьювера выбирать экран, который начнёт проигрываться (сейчас такой экран пока один).&lt;br /&gt;
* После просмотра во вьювере игры, его необходимо закрыть, нажав (как обычно в Windows) крестик в правом верхнем углу окна.&lt;br /&gt;
&lt;br /&gt;
=== Кнопки быстрого запуска ===&lt;br /&gt;
&lt;br /&gt;
Приведем для справки описание кнопок быстрого доступа к некоторым командам редактора сцен (более подробная информация будет дана в последующих уроках):&lt;br /&gt;
&lt;br /&gt;
*[[Файл:00 6.png]] — создать новый проект; &lt;br /&gt;
*[[Файл:00 7.png]] — загрузить уже созданный проект;&lt;br /&gt;
*[[Файл:00 8.png]] — сохранить изменения в проекте; &lt;br /&gt;
*[[Файл:00 9.png]] —  запустить Viewer;&lt;br /&gt;
*[[Файл:00 10.png]] — перемещение сцен мышью; &lt;br /&gt;
*[[Файл:009.JPG]] — нормальный вид; &lt;br /&gt;
*[[Файл:010.JPG]] - общие свойства объекта; &lt;br /&gt;
*[[Файл:011.JPG]] - вызов текстового редактора;&lt;br /&gt;
*[[Файл:012.JPG]] — вызов редактора ресурсов;&lt;br /&gt;
*[[Файл:013.JPG]] — анализ проекта;  &lt;br /&gt;
*[[Файл:014.JPG]] — поиск объекта по имени или id.&lt;br /&gt;
&lt;br /&gt;
== Редактор ресурсов ==&lt;br /&gt;
&lt;br /&gt;
Второе важное приложение, это редактор ресурсов.&lt;br /&gt;
Так как мы открыли готовый проект, то с ним уже связана база графических ресурсов.&lt;br /&gt;
Чтобы её увидеть, нажмите кнопку [[Файл:Ico base.png|20px]] (или меню: &amp;lt;tt&amp;gt;Tools&amp;lt;/tt&amp;gt; &amp;amp;rarr; &amp;lt;tt&amp;gt;Resource editor&amp;lt;/tt&amp;gt;).&lt;br /&gt;
Откроется новое окно, которое, на самом деле, является независимым приложением:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_re.png]]&lt;br /&gt;
&lt;br /&gt;
Как и в редакторе сцен, вверху окна редактора ресурсов расположено меню и кнопки быстрого доступа: создать базу ресурсов, открыть уже существующую, добавить картинку (png, jpeg), анимацию, мелодию (mp3, ogg), видео (mp4).&lt;br /&gt;
Ниже, в левой панели находятся папки, внутри которых можно найти различные графические ресурсы, которые мы будем использовать на протяжении этих уроков. Каждая папка названа по имени урока.&lt;br /&gt;
Кликнув на треугольничек (или плюсик) слева от папки lesson_1 мы увидим текстовый список из 8 картинок, находящихся в ранее запущенном приложении со слоненком и солнышком.&lt;br /&gt;
&lt;br /&gt;
Если в дереве папок активна данная папка, то на правой панели мы видим список графических ресурсов в виде иконок. Если же в дереве кликнуть на имя конкретной картинки, то в правой панели она будет представлена в натуральную величину. Если кликнуть правой кнопкой мыши на конкретный ресурс отобразится всплывающее подменю, которое аналогично кнопкам быстрого доступа, за исключением одного пункта - &amp;lt;tt&amp;gt;Заменить изображение&amp;lt;/tt&amp;gt;. Замену изображений необходимо делать через всплывающее подменю.&lt;br /&gt;
&lt;br /&gt;
Текущее приложение содержит фоновую картинку (bg), три картинки частей слонёнка (elephant_body, elephant_head1, elephant_head2) и 4 картинки с различным видом солнышка. &lt;br /&gt;
&lt;br /&gt;
Так как редактор ресурсов является отдельным приложением, он может оказаться под окном редактора сцен. Это не всегда удобно, поэтому зайдем в пункт меню &amp;lt;tt&amp;gt;'''View'''&amp;lt;/tt&amp;gt; редактора ресурсов и поставим галочку у пункта &amp;lt;tt&amp;gt;'''Always on Top'''&amp;lt;/tt&amp;gt;. Теперь редактор ресурсов окажется поверх редактора сцен (как впрочем, и поверх всех остальных окон). Естественно, галочку можно в любой момент снять или свернуть окно редактора ресурсов.&lt;br /&gt;
&lt;br /&gt;
Размер окна ресурсов можно изменять мышкой, схватившись за правый нижний угол окна.&lt;br /&gt;
Правая панель, выводящая картинки, может быть перетащена в любое место окна редактора (для этого необходимо потянуть за её заголовок). Чтобы вернуть панель на фиксированное место, необходимо дважды кликнуть на её заголовке.&lt;br /&gt;
&lt;br /&gt;
== Редактирование сцены ==&lt;br /&gt;
&lt;br /&gt;
=== Добавление на сцену ===&lt;br /&gt;
&lt;br /&gt;
Разберемся, как на сцену добавляются новые объекты. Предполагается, что мы одновременно видим окна обоих редакторов. Убедимся, что в панели проекта (Layout) редактора сцен активна текущая сцена lessons_1. Не путайте её с экраном lesson_1, находящимся выше. Рядом с каждым объектом в дереве ресурсов находится иконка, отражающая тип объекта. Рядом с экраном изображено, что-то похожее на фотоаппарат, а рядом со сценой - чистый лист бумаги. &lt;br /&gt;
 &lt;br /&gt;
Нажав мышкой на иконку головы слонёнка в '''редакторе ресурсов''', перетащим её на сцену в '''редактор сцен''', где кнопку мышки отпустим:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_se_re.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Теперь окно редактора ресурсов можно свернуть, чтобы оно не мешало. &lt;br /&gt;
На сцене мы видим одного полноценного слонёнка и отдельно парящую голову.&lt;br /&gt;
В списке объектов (панель Layout) добавился объект elephant_head_2. &lt;br /&gt;
Его имя по умолчанию совпадает с именем картинки в редакторе ресурсов.&lt;br /&gt;
Если оно не достаточно точно выражает назначение этого объекта, то его '''необходимо'''&lt;br /&gt;
изменить в панели Properties (предполагается, что на дереве объектов эта голова сейчас выбрана).&lt;br /&gt;
Переименуем её, например, в elephant_ghost (дух слонёнка). Для этого кликнем справа от поля '''имя''' в панели Properties и введем новое название. После окончания редактирования нажимаем Enter. Одновременно с этим поменяется имя на дереве объектов (Layout).&lt;br /&gt;
Стоит всегда придерживаться следующего правила:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
[[файл:Ok.png|right|32px]]&lt;br /&gt;
'''Необходимо присваивать объектам в проекте осмысленные имена, отражающие их роль и функции. Это относится также к именам экранов и сцен.'''&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Названия объектов могут повторяться, но это плохой тон. В частности, неудачным примером названий в этом проекте служат похожие имена экрана (lesson_1) и сцены (lessons_1). Плохое имя (move) у летающего солнышка (лучше было бы fly_sun). &lt;br /&gt;
&lt;br /&gt;
Обратим внимание, что добавленная голова имеет тип '''image''' (первое поле в панели Properties).&lt;br /&gt;
Большинство объектов в начале имеют такой тип. Далее он меняется в зависимости от функциональности объекта (подробнее об этом в следующих уроках).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
[[файл:Ok.png|right|32px]]&lt;br /&gt;
'''Совет''': Переименовывать объекты можно непосредственно в панели Layout, после двойного клика мышкой на имя этого объекта. Редактирование оканчивается нажатием клавиши Enter.  &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Изменение положения ===&lt;br /&gt;
&lt;br /&gt;
На сцене вокруг добавленной головы находится &amp;lt;span style=&amp;quot;color:#007700&amp;quot;&amp;gt;зелёная прямоугольная рамка&amp;lt;/span&amp;gt; (объект активен). &lt;br /&gt;
Если она &amp;lt;span style=&amp;quot;color:#770000&amp;quot;&amp;gt;красная&amp;lt;/span&amp;gt;, необходимо кликнуть на объект (голову) и он станет активным.&lt;br /&gt;
Заметим, что при клике на объекте меняется не только цвет рамки, &lt;br /&gt;
но и активный объект на дереве объектов (Layout). Соответственно в панели Properties показываются его свойства.&lt;br /&gt;
Стоит покликать на различные объекты на сцене и на дереве проекта, наблюдая одним глазом за их рамкой, а другим за панелями проекта и свойств. В заключении этого увлекательного упражнения необходимо снова сделать активной голову.&lt;br /&gt;
&lt;br /&gt;
Активный объект можно таскать мышкой по экрану, задав ему требуемое положение (не оторвите только голову исходному слоненку). Стоит раскрыть свойство &amp;quot;'''положение'''&amp;quot; в панели Properties и понаблюдать, как при таскании головы меняются её координаты. &lt;br /&gt;
Начало координат (точка x=0, y=0) расположено в центре сцены. Горизонтальная ось x направлена вправо, а вертикальная ось y - вниз. Если объект находится ниже центра сцены, он будет иметь положительное значение y, а если выше, то отрицательное.&lt;br /&gt;
Естественно, положение объекта можно изменить и при помощи прямого редактирования полей '''x''', '''y''' свойства &amp;quot;'''положение'''&amp;quot;. Перетащите голову в правый верхний угол сцены.&lt;br /&gt;
&lt;br /&gt;
=== Модификаторы ===&lt;br /&gt;
&lt;br /&gt;
Будем считать, что добавленная голова слона - это дух предков исходного слонёнка.&lt;br /&gt;
Духу положено быть полупрозрачным. Это достигается изменением &lt;br /&gt;
свойства '''alpha''' в группе '''модификаторы''' на панели свойств (Properties).&lt;br /&gt;
Изменим исходное значение 1.00 (непрозрачен) на 0.5 (полупрозрачен).&lt;br /&gt;
Значение alpha=0 соответствует полной невидимости объекта (возможно любое значение между 0 и 1).&lt;br /&gt;
Обратим внимание, что десятичная точка является именно точкой, а не запятой, как всё ещё учат на 1/6 части суши. Впрочем, если в вашей операционной системе в языковых настройках стоит русский язык, Вы увидите привычную запятую, вместо десятичной точки. &lt;br /&gt;
&lt;br /&gt;
Дополнительно в разделе '''модификаторы''' можно изменить угол ('''angle''') в градусах (поставьте, например -30)&lt;br /&gt;
и масштаб картинки (поля '''scale x''' и '''scale y'''). Исходная картинка имеет единичный масштаб, т.е. на сцене выглядит также, как и в редакторе ресурсов. Если масштаб увеличить, то увеличится и картинка (это можно сделать независимо по ширине и высоте). &lt;br /&gt;
Соответственно, значение меньшее 1 (но большее нуля) её уменьшит.&lt;br /&gt;
Отрицательное значение масштаба переворачивает картинку. Задайте scale_x=-2 и scale_y=2.&lt;br /&gt;
В результате должно получиться что-то типа:&lt;br /&gt;
&lt;br /&gt;
[[Файл:intro_se_midif.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Заметим, что при сильном масштабировании (scale) могут появляться дефекты картинки (квадратики пикселей), поэтому злоупотреблять большими значениями, обычно, не стоит.&lt;br /&gt;
&lt;br /&gt;
=== Z - порядок объектов ===&lt;br /&gt;
&lt;br /&gt;
Пришло время посмотреть, что у нас получилось. Для этого сохраняем все изменения &lt;br /&gt;
[[Файл:00 8.png]] (нажав кнопку Ok на выскочившем окошке).&lt;br /&gt;
Затем запускаем вьювер [[Файл:00 9.png]]. Понаблюдаем за солнцем. Оно движется над фоновой&lt;br /&gt;
картинкой &amp;quot;'''bg'''&amp;quot;, но ''под'' головой духа слона (он должен, естественно, находится в верхней части сцены). Такая последовательность прорисовки связана с порядком объектов в дереве на панели Layout. Отрисовка происходит сверху вниз (сначала bg, затем move и т.д.). Это правило является иерархическим. Если на дереве находятся объекты, содержащие другие объекты, то сначала рисуется вся эта ветка дерева, а затем поверх неё рисуются нижележащие на дереве объекты на других ветках. Это же правило относится к последовательности рисования сцен. Если на экране несколько сцен, то они рисуются сверху вниз в соответствии с их порядком на дереве. Сама по себе сцена - это невидимый объект (контейнер). Поэтому, рисование сцены означает последовательное рисование всех объектов, которые в ней находятся.&lt;br /&gt;
&lt;br /&gt;
Попробуем во вьювере кликнуть на солнце, когда оно оказывается под головой духа слона.&lt;br /&gt;
Его форма не изменяется, так как картинка головы, хотя и является полупрозрачной, по умолчанию &amp;quot;не прокликивается&amp;quot;. Чтобы изменить ситуацию, закроем вьювер (крестик) и отредактируем поле свойств головы с именем &amp;quot;'''прокликиваемая'''&amp;quot;, поставив вместо 0 значение 1. Закончив редактирование поля (нажав Enter), сохраняем проект [[Файл:00 8.png]] и снова запускаем вьювер [[Файл:00 9.png]].&lt;br /&gt;
Теперь дух, как и положено астральным образованиям, пропускает клик сквозь себя.&lt;br /&gt;
&lt;br /&gt;
Порядок рисования объектов можно изменить, перетащив их по дереву в панели Layout.&lt;br /&gt;
Эта операция требует определенной сноровки. Наступим на имя объекта elephant_ghost и не отпуская мыши потащим его вверх. Когда он окажется над объектом bg, отпустим мышь. Он станет подобъектом фона,&lt;br /&gt;
что отобразится как сдвиг elephant_ghost вправо (у объекта фона bg слева появится треугольничек). Теперь снова схватим elephant_ghost и потащим чуть вниз и влево по дереву.&lt;br /&gt;
Когда указатель мыши окажется между объектами bg и move, появится длинная горизонтальная полоска. В этот момент отпускаем мышь, и наш дух размещается между этими объектами.&lt;br /&gt;
&lt;br /&gt;
Ниже на рисунке представлены оба варианта положения духа на дереве сцены (слева подобъект elephant_ghost в объекте bg, а справа равноправный с bg объект, но ниже по дереву и, следовательно, рисуемый позже):&lt;br /&gt;
&lt;br /&gt;
[[файл:intro_ghost.png]]&lt;br /&gt;
&lt;br /&gt;
С точки зрения отрисовки, оба эти варианта приведут к одинаковому результату.&lt;br /&gt;
Проверьте это, потренировавшись в таскании, сохранении и запуске вьювера. Подумайте также, почему так происходит.&lt;br /&gt;
&lt;br /&gt;
=== Удаление объектов ===&lt;br /&gt;
&lt;br /&gt;
Откройте снова окно редактора ресурсов (скорее всего оно находится в свернутом состоянии в панели приложений). Расположите его над окном редактора сцен. Перетащите на сцену из папки lesson_1 какую-нибудь небольшую картинку (например, sun_1). Сверните редактор ресурсов. Новая картинка появилась на сцене и в дереве объектов панели Layout. Чтобы её удалить, нажмите правую кнопку мыши на объекте sun_1 в панели Layout. В вывалившемся меню выберете пункт '''Delete'''. Картинка исчезнет. Эквивалентно, объект можно удалить, кликнув на него в дереве и нажав на клавиатуре кнопку Del.&lt;br /&gt;
&lt;br /&gt;
Заметим, что если объект на сцене сделать активным (кликнув на него - зеленая рамка) и попытаться нажать Del, то ничего не произойдет. Сделано это умышленно. Дело в том, что при удалении уничтожается не только сам объект, но и все его подобъекты. Подобная иерархия видна только на дереве проекта. &lt;br /&gt;
&lt;br /&gt;
В качестве упражнения, поместите на сцену две картинки. Одну их них в дереве панели Layout перетащите на другую, сделав её подобъектом. Потаскайте мышкой по сцене обе картинки. Обратите внимание, что подобъект перемещается независимым образом. В тоже время при таскании корневого объекта начнут двигаться они оба. Координаты подобъекта задаются относительно его владельца. Поэтому при перемещении корневого объекта вместе с ним движутся и все подобъекты.&lt;br /&gt;
Теперь удалите сразу оба объекта, сделав активным  на дереве корневой объект и нажав затем на кнопку Del (или при помощи правой кнопки мыши).&lt;br /&gt;
&lt;br /&gt;
=== Другие объекты ===&lt;br /&gt;
&lt;br /&gt;
На нашей сцене кроме картинок находятся еще два типа объектов - это кнопка и машина состояний. С кнопками мы будем работать уже на следующем [[Создание экранов, сцен. Работа с кнопками|уроке]], а машинам состояний посвящены сразу 3 урока, начиная с [[Checkbox как машина состояний|третьего]]. Пока наша задача состоит в их поиске в дереве проекта и первым знакомством с их свойствами.&lt;br /&gt;
&lt;br /&gt;
Кликнем на треугольник слева от объекта move в панели Layout. Под ним раскроется подобъект с именем '''sun_1'''. Это кнопка. Сам же объект move является машиной состояния. Кроме указания соответствующего типа в панели Properties (посмотрите на него!), тип объекта помечается иконкой на дереве. Для машины - это шестеренка, а кнопка - это кнопка :).&lt;br /&gt;
&lt;br /&gt;
Кликнув на объект '''sun_1''', рассмотрим его свойства в панели Properties. Кроме уже знакомых по картинке (тип=image) полей, появился ряд других. Например, раскроем треугольник свойства &amp;quot;'''внешний вид'''&amp;quot;. Там находятся несколько полей, из которых заполнены '''up''' и '''down'''. В них заданы имена картинок для изображения отжатой и нажатой кнопки. Как они там оказались выяснится в следующем [[Создание экранов, сцен. Работа с кнопками|уроке]]. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим теперь объект '''move'''. Не смотря на небольшое количество свойств, это один из самых универсальных и сложных объектов, позволяющих программировать динамическое поведение объектов и их логику. Чтобы краем глаза заглянуть на кухню этого процесса кликните на свойство '''states''', а затем на появившиеся три точки в этом поле. Выскочит следующее окошко:&lt;br /&gt;
&lt;br /&gt;
[[файл:intro_move1.png]]            [[файл:intro_move.png]]&lt;br /&gt;
&lt;br /&gt;
Эта машина состояний, которая имеет одно состояние. В нём задана последовательность команд, которые управляют её движением по экрану. Сама машина в данном случае является невидимым объектом. Однако, она содержит в качестве подобъекта кнопку '''sun_1'''. Поэтому, когда машина move бегает по экрану, вместе с ней движется и кнопка. Клики на себя принимает кнопка, меняя при этом свой внешний вид. Несложно догадаться, что в результате получается солнышко.&lt;br /&gt;
&lt;br /&gt;
== Упражнения ==&lt;br /&gt;
&lt;br /&gt;
* Найдите две машины состояний, связанные со слонёнком, и попробуйте догадаться как они работают (ответы в следующих уроках).&lt;br /&gt;
* Откройте демонстрационный проект, находящийся в папке AppSaluteСreator/Projects/Demo/demо. Поиграйтесь с ним.&lt;br /&gt;
* Снова откройте учебный проект c которым мы работали (AppSaluteСreator/Projects/Lessons/lessons). Он нам понадобится для следующего урока.&lt;br /&gt;
* Затем переходите на [[Создание экранов, сцен. Работа с кнопками|урок 2]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;  &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot;|[[Learning|Оглавление]] &amp;lt;&amp;lt; &lt;br /&gt;
 ! width=&amp;quot;20%&amp;quot;|[[Learning|Оглавление]] &lt;br /&gt;
 | width=&amp;quot;40%&amp;quot; align=&amp;quot;right&amp;quot;| &amp;gt;&amp;gt; [[Создание экранов, сцен. Работа с кнопками|Урок 2]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Imarunenko</name></author>
		
	</entry>
</feed>