Login Form

СКАЧАТЬ

 XEngine (Object oriented Xors3d wrapper)

 

Среда разработки компьютерных игр, на уровне механизмов Xorsed 3.1

На этом рисунке действующее окно редактора.
1. Окно материалов. По кнопке New открывается визуальный редактор материала
editor31 window
В редакторе материала настраиваются свойства и текстуры. По двойном щелчке на название текстуры, можно ее изменить. В текстовое поле заносится файл текстуры и нажимается ОК. По кнопке close закрывается окно редактора и применяется материал заново ко всем своим объектам.
2. Окно предпросмотра изображения первой текстуры выбранного материала, это что бы вам легче было ориентироваться.
3. Окно визуального редактора, Правой клавишей мыши выбирается объект, левой тяните за стрелки для изменения трансформации, среднюю кнопку держите для перемещения камеры, кнопки WASD ходить.
4. Окно механизмов. При двойном щелчке открыть для редактирования, по кнопке Add добавляется новый механизм.
5. Окно каталога. Отображается дерево медиафайлов. Для добавления 3д меша на сцену перетащите из дерева в окно просмотра. Что бы добавить файлы в каталог меретащите в Media tree на пустое место
6. Дерево всех объектов. Можно регулировать паренты, простым перемещением мышью одного в другой.
7. Сначала вы выбираете объект — модель для детальной настройки каждого подобъекта и нажимаете на Texture Wrap, откроется расширеный редактор. Выбираете деталь и нажимаете Edit. В конце нажимаете save. И получается материал, который можно назначать на те объекты для которых делался Wrap
8. Окно свойств объекта. При выборе объекта появляются строки Mechanism и Material. Путем перетаскивания материала или механизма в соответствующие ячейки, они применяются к выделенному объекту
detail editor

9. Кнопка настройки материала. Откроется окно редактора материала, если это мульти материал, откроется окно редактора мульти материала. Программа может спросить для какого объекта мультиматериал. Вы должны указать имя файла, например tower1.b3d

Build->Run запуск проекта. Сохраняется в каталоге с именем a.exe

select scene

При создании сцены программа просит ввести ее имя. К имени, автоматически прибавится приставка scene_. Далее при открытии проекта программа спросит какую сцену загрузить. Скрипты и медия, доступна одинаковая из каждой сцены. Специфические функции работы со скриптами. Та сцена на которой вы сделаете Build, будет главной и запустится первой. Для запуска другой сцены которая у вас есть в проекте вы должны в нужном месте в скрипте выполнить

if(Input.isKeyDown(Xors3d.KEY_1))//например при нажатии кнопки
{
Scene.Current.Runned=false;//текущую сцену не выполнять когда закроется новая (обязательно)
Scene.Current.Clear();//очистить текущую сцену (чтобы ее объекты не были в новой сцене)
scene_2 sc2 = new scene_2();//создать сцену 2
sc2.Run();//запустить
}

 

 

 

Описание свободного движка на основе Xors3D

Движок предоставляет удобные классы для взаимодействия с движком Xors3D с использованием .NET Framework.

Getting Started.

Для работы движка помещаем в проект файл xors3deng, xors3d, и нужные dll библиотеки. Далее мы должны инициировать движок и начать работу с ним. Привожу пример шаблона.

ЛИСТИНГ:

class Program : Xors3d

     {

        static void Main(string[] args)

        {

            Engine.Init3D(800, 600, false, false);

            SceneMgr smgr = Engine.addSceneMgr()          

 

            while (!Input.isKeyHit(Xors3d.KEY_ESCAPE))

            {

                Engine.Cls();               

 

                Engine.MouseEvents();

                Engine.Update();

                Engine.Render();

 

                Engine.Flip();

            }

        }

     }

Эти строки необходимы для работы движка. Чтобы вызвать функции самого Xors3D просто нипишите Xors3D.функция(); Что делает код: Engine.Init3D(800, 600, false, false); Создает окно 800x600, не в полном экране, без VSYNC. Потом мы должны создать менеджер сцены, именно в нем мы будем создавать объекты. Никогда не создавайте объекты и менеджеры используя простой конструктор new

SceneMgr smgr = Engine.addSceneMgr()     Создаем менеджер сцены, он обычно является главным. Потом идет главный цикл приложения. while (!Input.isKeyHit(Xors3d.KEY_ESCAPE)) До тех пор пока мы не нажали ESCAPE выполнять тело цикла. Заметьте, что KEY_ESCAPE берется из класса Xors3D. Это для того что бы мне не пришлось тупо переписывать все клавиши. Engine.Cls(); Почистить экран, далее надо вызвать события мыши, если мы не используем стороннее окно, для отрисовки изображения, то вызываем функцию без параметров, иначе, нам нучно было бы указывать координаты мыши и нажатые кнопки Engine.MouseEvents(); Потом мы обновляем игровой процесс, выполняем скрипты и т.д. Engine.Update(); после этого рисуем в буфер изображение, Engine.Render(); А потом выводим буфер на экран Engine.Flip();

 

Создание объектов

Теперь опишу как создавать объекты, и работать с ними, и опишу новую фичу, называется МЕХАНИЗМ (Mechanism).

Итак создание простого куба. Запомните, что все объекты создает менеджер сцены, который мы создали из Engine. Куб создается функцией Object3D cube = smgr.addCube("cube", new Vector3(0,0,0)); Вообще при создании объектов задаются параметры, имя, должно быть уникальным в этом менеджере сцены, если имя уже существует, то движок добавит к нему _1, _2 и т. д. И выведет сообщение на консоли. Далее параметр — позиция объекта, позиции, повороты и всякое такое где используется XYZ, задается структурой Vector3, в данном случае создан куб в нулевой позиции, потом по желанию мы задаем параметр, это родитель объекта.

Опишу все функции создания различных объектов

public Object3D addCamera(String name, Vector3 position, Object3D parent)

Добавление камеры, без камеры вы ничего не увидите!

public Object3D addCube(String name, Vector3 position, Object3D parent)

Добавление простого куба

public Object3D addSphere(int segments, String name, Vector3 position, Object3D parent)

Добавление сферы, требует указать количество сегментов (детализация)

public Object3D addLight(String name, LightType type, Vector3 position, Object3D parent)

Добавить освещение, определенного типа

public Object3D addMesh(String fileName, String name, Vector3 position, Object3D parent)

Добавить модель

public Object3D addMeshAnim(String fileName, String name, Vector3 position, Object3D parent)

Добавить анимационную модель

public Object3D addInstance(Object3D master, String name, Vector3 position, Object3D parent)

Добавить экземпляр загруженного объекта (для деревьев, травы и т.д.)

    Управление объектами

            Для управления объектами существуют так называемые механизмы, но без базовых навыков вам не стоит начинать изучать механизмы. После того как вы создали какой либо объект вы естественно запомнили его в переменно, кстати можно не запоминать, а делать поиск по имени, но об этом позже. Например наш объект Object3D obj; Рассморим функции этого класса, относящиеся к управлению.

public void Turn(Vector3 vec, bool global)

поворот объекта на Vector3 градуса, второй параметр указывает относительно каких координат. Можно не указывать тогда будет локально.

public void Move(Vector3 vec, bool global)

движение объекта на Vector3, второй параметр указывает относительно каких координат. Можно не указывать тогда будет локально.

public void setScale(Vector3 vec, bool global)

установить увеличение на Vector3, второй параметр указывает относительно каких координат. Можно не указывать тогда будет локально.

public void setRotation(Vector3 vec, bool global)

установить поворот на Vector3 градуса, второй параметр указывает относительно каких координат. Можно не указывать тогда будет локально.

public void setPosition(Vector3 vec, bool global)

установить позицию на Vector3, второй параметр указывает относительно каких координат. Можно не указывать тогда будет локально.

public Vector3 getScale(bool global)

узнать увеличение параметр указывает относительно каких координат. Можно не указывать тогда будет локально.

public Vector3 getRotation(bool global)

узнать поворот параметр указывает относительно каких координат. Можно не указывать тогда будет локально.

public Vector3 getPosition(bool global)

узнать позицию параметр указывает относительно каких координат. Можно не указывать тогда будет локально.

Поиск объектов в менеджере сцены

Чтобы не заморачиваться с сохранением всё и вся в переменных, можно при вызове объекта просто пользоваться его именем, например Object3D obj = smgr.findByName("cube"); Найдет объект с именем cube. Всегда перед использованием проверяйте объект на null, что бы избежать обращения к неиспользуемой памяти и краша программы.

Какие есть еще поиски:

public Object3D findByIndex(int index)

Найти объект по порядковому номеру

public Object3D[] findByTag(int tag)

Найти несколько объектов по тэгу, тэгом является какой нибудь тип объекта, задается пользователем

       Механизмы

            Механизмы это интересная и новая для вас система организации кода. Вкратце попробую объяснить что это такое. Все объекты в повседневной жизни обладают какими то свойствами, и выполняют какую то роль. Например все люди ходят на 2 ногах, все собаки на 4 лапах. Люди например едят еду из магазинов, а дворовые собаки из помойки, перечислять можно бесконечно, но каждый тип объекта ведет себя по своему и может взаимодействовать с другими объектами. Итак определение — механизм в этом игровом движке это класс, который применяется к круппе однотипных объектов, и выполняющий свою работу, при загрузке механизма и при каждой итерации главного цикла. Механизм создается как класс который наследует родительский класс Mechanism, содержит override функции

public override void OnCreate()

Что делает механизм при создании

public override void Update()

Что делает механизм при итерации цикла

public override void callFunction(string fname)

Что делает механизм при вызове функции пользователя внутри механизма

Каждый класс механизма содержит объект obj. Это как раз тот объект которому принадлежит механизм. Опишу пример класса механизма.

 

class turnMech : Mechanism //наш механизм который будет производить поворот объекта
{
int img = 0;
public override void OnCreate() {
img = Xors3d.LoadImage(“Gui.jpg”);
}
public override void Update()//выполнение обновления действий
{
obj.Turn(new Vector3(0,1,0));

 

}

 

 

 

public override void OnGUI()//выполнение отрисовки 2D объектов
{
Xors3d.DrawImage(img,0,0);

 

}

 

 

 

public override void callFunction(string fname)//выполнение функций
{
}
}