<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF107%3A%D0%9D%D0%B8_%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BA%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0%21</id>
		<title>LXF107:Ни строчки кода! - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF107%3A%D0%9D%D0%B8_%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BA%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0%21"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF107:%D0%9D%D0%B8_%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BA%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0!&amp;action=history"/>
		<updated>2026-05-13T00:07:17Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF107:%D0%9D%D0%B8_%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BA%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0!&amp;diff=7662&amp;oldid=prev</id>
		<title>Yaleks в 15:23, 19 апреля 2009</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF107:%D0%9D%D0%B8_%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BA%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0!&amp;diff=7662&amp;oldid=prev"/>
				<updated>2009-04-19T15:23:15Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wiki.linuxformat.ru/wiki/index.php?title=LXF107:%D0%9D%D0%B8_%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BA%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0!&amp;amp;diff=7662&amp;amp;oldid=7652&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF107:%D0%9D%D0%B8_%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BA%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0!&amp;diff=7652&amp;oldid=prev</id>
		<title>Yaleks: Новая: {{Цикл/Ни строчки кода}} == Не желаете ли меню? == : ''ЧАСТЬ 4 Здравствуйте, уважаемые телезрители! В эфире п...</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF107:%D0%9D%D0%B8_%D1%81%D1%82%D1%80%D0%BE%D1%87%D0%BA%D0%B8_%D0%BA%D0%BE%D0%B4%D0%B0!&amp;diff=7652&amp;oldid=prev"/>
				<updated>2009-04-18T19:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: {{Цикл/Ни строчки кода}} == Не желаете ли меню? == : &amp;#039;&amp;#039;ЧАСТЬ 4 Здравствуйте, уважаемые телезрители! В эфире п...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Цикл/Ни строчки кода}}&lt;br /&gt;
== Не желаете ли меню? ==&lt;br /&gt;
: ''ЧАСТЬ 4 Здравствуйте, уважаемые телезрители! В эфире программа «Смак» с Андреем... простите, рубрика «Игрострой» с Андреем Праховым. И сегодня мы займемся игровым меню.''&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;
всего из двух элементов: Start и End game.&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;
переключаться с игровой камеры на добавочную. Второй вариант – воспользоваться тем, что Blender уме-&lt;br /&gt;
ет создавать различные сцены и работать с ними. Что это такое?&lt;br /&gt;
Вкратце можно объяснить так: в пределах одного проекта воз-&lt;br /&gt;
можно существование подпроектов с уникальными свойствами, но&lt;br /&gt;
общими глобальными настройками. Если смотреть на это сквозь&lt;br /&gt;
призму игростроя, то концепция сцен позволяет реализовать меха-&lt;br /&gt;
низм игровых уровней. А чем меню не игровой уровень?&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF107 95 1.png|center|frame|Рис. 1. Концепция сцен позволяет по максимуму использовать пространство и создавать уровни.]]&lt;br /&gt;
&lt;br /&gt;
Чтобы создать новую сцену, необходимо выбрать соответству-&lt;br /&gt;
ющий пункт из выпадающего меню вверху программы (рис. 1).&lt;br /&gt;
Естественно, там же вы можете переключаться с одной сцены на&lt;br /&gt;
другую. Но запомните, что при генерации двоичного файла игры&lt;br /&gt;
активная в текущий момент сцена считается главной и запускает-&lt;br /&gt;
ся первой.&lt;br /&gt;
&lt;br /&gt;
При добавлении сцены вам будет предложено несколько вариантов ее создания:&lt;br /&gt;
* Empty [Пустая] – равноценно сбросу Blender для нового проекта;&lt;br /&gt;
* Link Objects [Присоединить объекты] – содержание копируется, однако изменения в одной сцене отражаются и в других, созданных таким способом;&lt;br /&gt;
* Link ObData [Присоединить данные объектов] – в отличие от Link Objects, вы можете перемещать объекты, но изменения самих mesh’ей или материалов отразится во всех сценах;&lt;br /&gt;
* Full Copy [Полная копия] – создается независимая копия текущей сцены.&lt;br /&gt;
&lt;br /&gt;
В нашем случае оптимальным вариантом является пустая сце-&lt;br /&gt;
на. Для нормального функционирования движка необходимо соз-&lt;br /&gt;
дать хотя бы одну камеру и один источник света. Как это сделать,&lt;br /&gt;
описывалось в предыдущих уроках по Blender. Поэтому не будем&lt;br /&gt;
отвлекаться, а займемся созданием основы нашего меню. Итак,&lt;br /&gt;
добавьте камеру, свет и примитив Plane. Расположите их пример-&lt;br /&gt;
но так, как показано на рис. 2. Источник, для лучшего освещения,&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;
простой фон (mainmenu.tga), который вы сможете найти в каталоге&lt;br /&gt;
textures файлов этого урока, расположенных на LXFDVD. Для раз-&lt;br /&gt;
мещения его на плоскости воспользуйтесь режимом Face Select и&lt;br /&gt;
редактором UVEditor. Более подробно о работе с текстурами в BGE&lt;br /&gt;
рассказывалось в LXF105.&lt;br /&gt;
Вот теперь заготовка для меню почти готова, но стоп... отсут-&lt;br /&gt;
ствует самое главное – текст.&lt;br /&gt;
&lt;br /&gt;
=== Да будет текст! ===&lt;br /&gt;
Спешу обрадовать любителей трудностей: работа с текстом в&lt;br /&gt;
Blender, а тем более в GE, изобилует непонятными моментами. Да&lt;br /&gt;
и литературу по этой части отыскать весьма сложно. Опять-таки&lt;br /&gt;
имеется несколько вариантов. Например, для меню и контента со&lt;br /&gt;
статичным содержимым можно использовать стандартный способ&lt;br /&gt;
работы с титрами Blender.&lt;br /&gt;
Создайте заготовку, выбрав из меню, вызываемого по клавише&lt;br /&gt;
Пробел, функцию Text. На экране должна появится строка Text,&lt;br /&gt;
сигнализирующая о запуске встроенного текстового редактора.&lt;br /&gt;
Одновременно на панели управления откроются инструменты,&lt;br /&gt;
необходимые для работы (рис. 3). Возможности, предлагаемые&lt;br /&gt;
программой, достаточно широки для комфортной правки текста.&lt;br /&gt;
Вы можете выбрать подходящий шрифт, воспользовавшись кла-&lt;br /&gt;
вишей Load, загрузить сторонний текст из файла командой Insert&lt;br /&gt;
text, форматировать начинку, как вам заблагорассудится, и многое&lt;br /&gt;
другое. Но запомните следующий момент: все манипуляции с текстом&lt;br /&gt;
можно проводить только в режиме редактирования. Однако, если вы&lt;br /&gt;
попробуете запустить игровой движок, то на экране вас встретит кро-&lt;br /&gt;
мешная пустота. Дело в том, что GE не умеет работать с тем форма-&lt;br /&gt;
том, в котором в данный момент хранится наш текст. Единственный&lt;br /&gt;
вариант – преобразовать его в обычный mesh. Естественно, в этом&lt;br /&gt;
случае отредактировать текст будет уже невозможно. Для конвер-&lt;br /&gt;
тации выйдите из режима редактирования клавишей Tab и нажмите&lt;br /&gt;
Alt+C. Из предложенных пунктов меню выберите Mesh.&lt;br /&gt;
Полученные титры будут выглядеть гораздо эффективнее, если&lt;br /&gt;
придать им объем. Обычная функция Extrude позволит достичь&lt;br /&gt;
задуманного. Войдите в режим редактирования, затем выделите&lt;br /&gt;
весь объект и нажмите клавишу E. Именно подобным образом сде-&lt;br /&gt;
ланы титры в меню демонстрационной версии игры.&lt;br /&gt;
Второй вариант использования текста завязан исключительно&lt;br /&gt;
на игровой движок. В качестве исходного шрифта используется&lt;br /&gt;
обычный файл .tga, содержащий все необходимые изображения&lt;br /&gt;
букв. Пример такого файла – font.tga – вы опять же сможете най-&lt;br /&gt;
ти в подкаталоге textures файлов этого урока. Подобный подход&lt;br /&gt;
используют многие игровые движки, так что сложностей с поиском&lt;br /&gt;
подходящего шрифта у вас возникнуть не должно. Как говорится,&lt;br /&gt;
Google вам в помощь!&lt;br /&gt;
После проведения необходимых манипуляций (см. врезку&lt;br /&gt;
Создаем текст в стиле BGE) необходимо создать текстовую пере-&lt;br /&gt;
менную с именем Text (именно так и не иначе!), а в качестве ее&lt;br /&gt;
содержания впечатать желаемый текст. Естественно, используя&lt;br /&gt;
логические блоки работы с переменными, вы можете с легкостью,&lt;br /&gt;
динамически, изменять это содержимое в процессе игры. Давайте&lt;br /&gt;
рассмотрим это на простом примере.&lt;br /&gt;
Итак, предположим, вы создали заготовку по приведенной схе-&lt;br /&gt;
ме. По нажатию клавиши Пробел текущее содержание необходимо&lt;br /&gt;
изменить на фразу Start game. Для этого добавьте к объекту Plane&lt;br /&gt;
логическую цепочку, состоящую из кирпичиков Keyboard &amp;gt; AND&lt;br /&gt;
&amp;gt; Property. Как настраивать сенсор клавиатуры, говорилось уже&lt;br /&gt;
не раз, а сама реализация заключается в подстановке в свойстве&lt;br /&gt;
Assign названия переменной и необходимого значения. В нашем&lt;br /&gt;
случае это будут: prop: Text и Value: Start game. Вот и все!&lt;br /&gt;
&lt;br /&gt;
=== Реализация меню ===&lt;br /&gt;
На данном этапе у вас уже должна быть заготовка, состоящая&lt;br /&gt;
из новой сцены с текстурированным объектом Plane, текстом и&lt;br /&gt;
настроенной камерой. Надеюсь, вы уже дали значащие имена име-&lt;br /&gt;
ющимся сценам? Если нет, то сделайте это, так как в дальнейшем&lt;br /&gt;
нам придется как-то обращаться к ним! В нашем примере они обо-&lt;br /&gt;
значены как сцены game и mainmenu, соответственно.&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;
анимации рассказывалось в статьях серии «Blender для начинающих», публиковавшихся в [[LXF87-88:Blender|LXF87/88]]-[[LXF91:Blender|LXF91]]). Управлять анимаци-&lt;br /&gt;
ей можно посредством активатора Ipo, а именно – его подфункции&lt;br /&gt;
Property. Весь смысл заключается в том, что изменяя значение чис-&lt;br /&gt;
ловой переменной с 1 до 2, мы указываем программе, какой кадр&lt;br /&gt;
является активным.&lt;br /&gt;
Для более точного понимания работы логики воспользуемся&lt;br /&gt;
псевдокодом:&lt;br /&gt;
//Пусть указателю присвоена переменная Integer с названием Count,&lt;br /&gt;
тогда&lt;br /&gt;
Sphera.Count = 1 // активен первый пункт меню&lt;br /&gt;
ЕСЛИ нажата клавиша «Down» ТО&lt;br /&gt;
Sphera.Count = 2&lt;br /&gt;
выполнить анимацию&lt;br /&gt;
ЕСЛИ нажата клавиша «Up» ТО&lt;br /&gt;
Sphera.Count = 1&lt;br /&gt;
выполнить анимацию&lt;br /&gt;
ЕСЛИ нажата клавиша «Enter» AND Sphera.Count ==1 ТО запуск игры&lt;br /&gt;
ЕСЛИ нажата клавиша «Enter» AND Sphera.Count ==2 ТО выход из&lt;br /&gt;
игры&lt;br /&gt;
Реализация проверки курсорных клавиш и действий по ним не&lt;br /&gt;
должна представлять для вас особенных сложностей. Для настрой-&lt;br /&gt;
ки Ipo-активатора необходимо выбрать подфункцию Property и&lt;br /&gt;
указать в качестве переменной Count. Естественно, этот кирпичик&lt;br /&gt;
должен быть подсоединен к обоим логическим цепочкам, прове-&lt;br /&gt;
ряющим курсорные клавиши.&lt;br /&gt;
Куда интереснее обстоит дело с проверкой нажатия на Enter.&lt;br /&gt;
Нам необходимо проверить условие равенства переменной Count&lt;br /&gt;
значениям 1 и 2. Для этого создайте еще две логические цепочки:&lt;br /&gt;
Keyboard &amp;gt; AND &amp;gt; Scene и Keyboard &amp;gt; AND &amp;gt; Game, но так, чтобы&lt;br /&gt;
сенсор Keyboard являлся общим для обоих цепочек. Измените кон-&lt;br /&gt;
троллер AND на Expression [Выражение] и для каждого, соответ-&lt;br /&gt;
ственно, введите строки count == 1 и count == 2. Для активаторов,&lt;br /&gt;
в случае c кирпичиком Scene, выберите подфункцию Set Scene&lt;br /&gt;
[Установить сцену] и в поле SCE: укажите название сцены с самой&lt;br /&gt;
игрой (у меня SCE: game), а вот для кирпичика Game необходимо&lt;br /&gt;
выбрать пункт Quit this game [Выйти из игры] (рис. 4).&lt;br /&gt;
&lt;br /&gt;
ной сцене игры: это должно приводить к выходу обратно в меню.&lt;br /&gt;
Думаю, здесь вы справитесь и сами, так что цикл уроков по BGE&lt;br /&gt;
на этом завершается. И хотя созданная нами игра не отличает-&lt;br /&gt;
ся каким-то изыском и крутизной – рассматривайте ее как плац-&lt;br /&gt;
дарм для более продвинутых проектов. Впрочем, если добавить к&lt;br /&gt;
ней визуальные эффекты, поработать над оптимизацией и самим&lt;br /&gt;
игровым концептом, может получится интересная игрушка. Так что&lt;br /&gt;
дерзайте!&lt;/div&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	</feed>