Журнал LinuxFormat - перейти на главную

LXF107:Ни строчки кода!

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{Цикл/Ни строчки кода}} == Не желаете ли меню? == : ''ЧАСТЬ 4 Здравствуйте, уважаемые телезрители! В эфире п...)

Версия 22:17, 18 апреля 2009

Игрострой: Ни строчки кода!
Игрострой: Шейдеры

Не желаете ли меню?

ЧАСТЬ 4 Здравствуйте, уважаемые телезрители! В эфире программа «Смак» с Андреем... простите, рубрика «Игрострой» с Андреем Праховым. И сегодня мы займемся игровым меню.

Вот мы и вышли на финишную пря- мую – осталось доделать совсем чуть-чуть, и наша игра будет готова увидеть белый свет. Давайте приступим к созданию игрового меню. Как вы, наверное, помните, в концепт-плане программы глав- ное и единственное меню игры состояло всего из двух элементов: Start и End game. Пунктов, конечно, чертовски мало, и они не отражают всего того, что хотелось бы видеть, однако для понятия самой идеи реа- лизации их вполне хватит.

Прежде чем начать кодирование, необ- ходимо разобраться, как мы планируем выводить меню на экран. Имеется два вари- анта. Первый – выделить область на игро- вом пространстве и добавить туда еще одну камеру, а далее, в нужный момент, просто переключаться с игровой камеры на добавочную. Второй вариант – воспользоваться тем, что Blender уме- ет создавать различные сцены и работать с ними. Что это такое? Вкратце можно объяснить так: в пределах одного проекта воз- можно существование подпроектов с уникальными свойствами, но общими глобальными настройками. Если смотреть на это сквозь призму игростроя, то концепция сцен позволяет реализовать меха- низм игровых уровней. А чем меню не игровой уровень?

(thumbnail)
Рис. 1. Концепция сцен позволяет по максимуму использовать пространство и создавать уровни.

Чтобы создать новую сцену, необходимо выбрать соответству- ющий пункт из выпадающего меню вверху программы (рис. 1). Естественно, там же вы можете переключаться с одной сцены на другую. Но запомните, что при генерации двоичного файла игры активная в текущий момент сцена считается главной и запускает- ся первой.

При добавлении сцены вам будет предложено несколько вариантов ее создания:

  • Empty [Пустая] – равноценно сбросу Blender для нового проекта;
  • Link Objects [Присоединить объекты] – содержание копируется, однако изменения в одной сцене отражаются и в других, созданных таким способом;
  • Link ObData [Присоединить данные объектов] – в отличие от Link Objects, вы можете перемещать объекты, но изменения самих mesh’ей или материалов отразится во всех сценах;
  • Full Copy [Полная копия] – создается независимая копия текущей сцены.

В нашем случае оптимальным вариантом является пустая сце- на. Для нормального функционирования движка необходимо соз- дать хотя бы одну камеру и один источник света. Как это сделать, описывалось в предыдущих уроках по Blender. Поэтому не будем отвлекаться, а займемся созданием основы нашего меню. Итак, добавьте камеру, свет и примитив Plane. Расположите их пример- но так, как показано на рис. 2. Источник, для лучшего освещения, желательно поместить вблизи от камеры. Впрочем, это несуще- ственно, и вы сами сможете отрегулировать его интенсивность и местоположение. Теперь необходимо расположить примитив так, чтобы он занимал всю активную область, отмеченную в проекции камеры пунктирными линиями. Запустите движок и удостоверь- тесь, что цвет примитива закрасил всю видимую область игрового пространства.

Чтобы наше меню выглядело не столь уж унылым, я создал простой фон (mainmenu.tga), который вы сможете найти в каталоге textures файлов этого урока, расположенных на LXFDVD. Для раз- мещения его на плоскости воспользуйтесь режимом Face Select и редактором UVEditor. Более подробно о работе с текстурами в BGE рассказывалось в LXF105. Вот теперь заготовка для меню почти готова, но стоп... отсут- ствует самое главное – текст.

Да будет текст!

Спешу обрадовать любителей трудностей: работа с текстом в Blender, а тем более в GE, изобилует непонятными моментами. Да и литературу по этой части отыскать весьма сложно. Опять-таки имеется несколько вариантов. Например, для меню и контента со статичным содержимым можно использовать стандартный способ работы с титрами Blender. Создайте заготовку, выбрав из меню, вызываемого по клавише Пробел, функцию Text. На экране должна появится строка Text, сигнализирующая о запуске встроенного текстового редактора. Одновременно на панели управления откроются инструменты, необходимые для работы (рис. 3). Возможности, предлагаемые программой, достаточно широки для комфортной правки текста. Вы можете выбрать подходящий шрифт, воспользовавшись кла- вишей Load, загрузить сторонний текст из файла командой Insert text, форматировать начинку, как вам заблагорассудится, и многое другое. Но запомните следующий момент: все манипуляции с текстом можно проводить только в режиме редактирования. Однако, если вы попробуете запустить игровой движок, то на экране вас встретит кро- мешная пустота. Дело в том, что GE не умеет работать с тем форма- том, в котором в данный момент хранится наш текст. Единственный вариант – преобразовать его в обычный mesh. Естественно, в этом случае отредактировать текст будет уже невозможно. Для конвер- тации выйдите из режима редактирования клавишей Tab и нажмите Alt+C. Из предложенных пунктов меню выберите Mesh. Полученные титры будут выглядеть гораздо эффективнее, если придать им объем. Обычная функция Extrude позволит достичь задуманного. Войдите в режим редактирования, затем выделите весь объект и нажмите клавишу E. Именно подобным образом сде- ланы титры в меню демонстрационной версии игры. Второй вариант использования текста завязан исключительно на игровой движок. В качестве исходного шрифта используется обычный файл .tga, содержащий все необходимые изображения букв. Пример такого файла – font.tga – вы опять же сможете най- ти в подкаталоге textures файлов этого урока. Подобный подход используют многие игровые движки, так что сложностей с поиском подходящего шрифта у вас возникнуть не должно. Как говорится, Google вам в помощь! После проведения необходимых манипуляций (см. врезку Создаем текст в стиле BGE) необходимо создать текстовую пере- менную с именем Text (именно так и не иначе!), а в качестве ее содержания впечатать желаемый текст. Естественно, используя логические блоки работы с переменными, вы можете с легкостью, динамически, изменять это содержимое в процессе игры. Давайте рассмотрим это на простом примере. Итак, предположим, вы создали заготовку по приведенной схе- ме. По нажатию клавиши Пробел текущее содержание необходимо изменить на фразу Start game. Для этого добавьте к объекту Plane логическую цепочку, состоящую из кирпичиков Keyboard > AND > Property. Как настраивать сенсор клавиатуры, говорилось уже не раз, а сама реализация заключается в подстановке в свойстве Assign названия переменной и необходимого значения. В нашем случае это будут: prop: Text и Value: Start game. Вот и все!

Реализация меню

На данном этапе у вас уже должна быть заготовка, состоящая из новой сцены с текстурированным объектом Plane, текстом и настроенной камерой. Надеюсь, вы уже дали значащие имена име- ющимся сценам? Если нет, то сделайте это, так как в дальнейшем нам придется как-то обращаться к ним! В нашем примере они обо- значены как сцены game и mainmenu, соответственно.

В качестве указателя мы будем использовать обычную сферу. Расположите ее между основой и камерой так, чтобы она по умол- чанию указывала на первый пункт меню. Рассмотрим логику работы. Для перемещения курсора будем использовать однокадровую ключевую анимацию, настроенную таким образом, чтобы в начальном кадре сфера указывала на пер- вый пункт меню, а в следующем – на второй (подробно о ключевой анимации рассказывалось в статьях серии «Blender для начинающих», публиковавшихся в LXF87/88-LXF91). Управлять анимаци- ей можно посредством активатора Ipo, а именно – его подфункции Property. Весь смысл заключается в том, что изменяя значение чис- ловой переменной с 1 до 2, мы указываем программе, какой кадр является активным. Для более точного понимания работы логики воспользуемся псевдокодом: //Пусть указателю присвоена переменная Integer с названием Count, тогда Sphera.Count = 1 // активен первый пункт меню ЕСЛИ нажата клавиша «Down» ТО Sphera.Count = 2 выполнить анимацию ЕСЛИ нажата клавиша «Up» ТО Sphera.Count = 1 выполнить анимацию ЕСЛИ нажата клавиша «Enter» AND Sphera.Count ==1 ТО запуск игры ЕСЛИ нажата клавиша «Enter» AND Sphera.Count ==2 ТО выход из игры Реализация проверки курсорных клавиш и действий по ним не должна представлять для вас особенных сложностей. Для настрой- ки Ipo-активатора необходимо выбрать подфункцию Property и указать в качестве переменной Count. Естественно, этот кирпичик должен быть подсоединен к обоим логическим цепочкам, прове- ряющим курсорные клавиши. Куда интереснее обстоит дело с проверкой нажатия на Enter. Нам необходимо проверить условие равенства переменной Count значениям 1 и 2. Для этого создайте еще две логические цепочки: Keyboard > AND > Scene и Keyboard > AND > Game, но так, чтобы сенсор Keyboard являлся общим для обоих цепочек. Измените кон- троллер AND на Expression [Выражение] и для каждого, соответ- ственно, введите строки count == 1 и count == 2. Для активаторов, в случае c кирпичиком Scene, выберите подфункцию Set Scene [Установить сцену] и в поле SCE: укажите название сцены с самой игрой (у меня SCE: game), а вот для кирпичика Game необходимо выбрать пункт Quit this game [Выйти из игры] (рис. 4).

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

Персональные инструменты
купить
подписаться
Яндекс.Метрика