Уголок tool-программСтатьи

[Конкурс] Простой редактор уровней на основе существующих пакетов. Часть 1

Автор:

Простой редактор уровней средствами 3D Studio Max

Редактирование и экспорт  игровых сцен из 3D Studio Max
Наказненко Павел Анатольевич, aka “Crio”
Специально для конкурса проводимого сообществом «Уголок tool-программистов»
www.gamedev.ru

Введение
Основная идея
Редактор объектов
Как пользоваться Object Editor
Экспортер уровней
Как пользоваться Scene Exporter
Загрузчик
Заключение

Введение

То, что редактор уровней – суровая необходимость, не для кого уже не секрет. Неопытные разработчики предпочитают разрабатывать собственные программные пакеты для создания игровых уровней, однако это не всегда приемлемо, с точки зрения сроков и бюджета.

Дело в том, что 90% времени левел-дизайнера занимает работа с геометрией, а остальное время уходит на установку триггеров, различных гейм-объектов, назначения свойств отдельным объектам сцены, а так же на балансировку.  Поскольку разработать удобный редактор уровней – дело довольно трудоемкое и затратное,  возникает необходимость в более простом и недорогом решении. Альтернативный метод рассматриваемый в данной статье - доработка определенной среды моделирования под свои нужды. В частности, ниже будет описан способ, как можно превратить 3D Studio Max в довольно простой, но очень удобный редактор уровней.

Примечание:
Стоит заметить, что сам по себе 3D Studio Max не является недорогим решением, однако, это всего лишь пример того, как можно воспользоваться иными программными пакетами.

В этой статье не будут объясняться принципы программирования, а так же синтаксические особенности языков программирования высокого уровня. Поэтому, несмотря на открытый исходный код, прилагающейся к статье, для четкого понимания статьи желательно знание основ написания скриптов MaxScript. Так же необходимы базовые навыки работы в пакете 3d Studio Max.

Основная идея

В пакете 3DSMAX, каждый объект сцены имеет определенные стандартные свойства, присваиваемые ему пакетом по умолчанию. В том числе есть, так называемые, User-Defined свойства. Чтобы убедиться в этом, достаточно выбрать любой объект на сцене, нажать на нем правой клавишей, выбрать пункт меню Properties. В появившемся диалоговом окне есть та самая вкладка User-Defined. Само по себе это свойство – ни что иное, как текстовое поле, в котором мы можем хранить дополнительную информацию об объекте.

Поскольку 3DSMAX – очень удобный инструмент по работе с геометрией, нам остается всего лишь реализовать назначение свойств объектам. В итоге мы получим простой и удобный редактор уровней.

Для написания дополнительного инструментария, мы воспользуемся встроенным интерпретатором MaxScript. Основное преимущество script’а перед ‘plug-in’ом в том, что он не зависит (в общем случае) от версии пакета 3D Studio Max, а так же предоставляет бОльшую скорость выполнения, нежели plug-in.

Примечание:
Конечно, разница в производительности варьируется, в зависимости от рода задач. В данном случае удобнее и быстрее вести разработку именно с помощью средств MaxScript

Для большего удобства, предлагаю разделить редактор уровней на две части: Object Editor и Scene Exporter. Итак, первым делом, нам необходимо определить, какие характеристики\свойства мы будем назначать объектам. Возьмем, к примеру, следующие параметры:

Name
char[255] 
Имя объекта

ObjectType
int 
Число, обозначающее тип объекта

Params
int
Число, которое содержит биты флагов некоторых свойств

FileName
char[255]
На тот случай, если для отображения объекта потребуется считать некоторый файл (модель скрипт и т. д.)

Transform
float[16] 
Трансформация объекта

Color
Float[3]
Цвет объекта

Пусть на нашем уровне присутствует всего четыре вида объекта:

Model
Загружается из файла
Некоторая модель, которую мы подгружаем из файла

Cube
Обычный кубик

Sphere
Обычная сфера

ParticleEffect
Загружается из файла
Некоторый эффект отображающийся с помощью системы частиц. Все параметры грузятся из файла

Отдельно стоит заметить, что свойство Params содержит в себе несколько флагов. Среди них:
Visible – является ли объект видимым или нет,
Alpha Test – необходимо ли включать alpha test при отображении объекта,
Depth Test - ли включать depth test при отображении объекта,
Culling : No, Back, Front – отсечение невидимых граней

Все эти флаги «упаковываются» в одно число типа int с помощью побитовых операций. Предположим есть некоторые флаги:

#define idVisible 1 << 6
#define idDepthTest  1 << 7
#define idAlphaTest 1 << 8

Тогда чтобы активировать флаг Visible (например) достаточно написать конструкцию следующего вида

Params |= (idVisible  | … другие флаги … | … );

чтобы деактивировать флаг

Params &= ~(idVisible | … другие флаги … | …);

Проверить активность флага:

If (Params & idVisible) // если флаг активирован, условие выполнится
Страницы: 1 2 3 Следующая »

#3D Studio MAX, #editor, #level, #MAX Script, #конкурс

25 июня 2007 (Обновление: 27 сен 2007)

Комментарии [10]