• Программинг

Нужны источники бесперебойного питания?

Источники бесперебойного питания от дизельстор

C# враппер для Xors3d

Доброго времени суток всем читающим данную статью! Ни для кого не секрет, что язык программирования C# приобретает всё большую популярность. В том числе и в игродельной сфере. К сожалению, игровых движков, рассчитанных на C# в данный момент не так много, как хотелось бы, но это всего лишь вопрос времени. Посему, я решил обратить ваше внимание на собственную разработку. Я решил написать враппер (обёртку) для отечественного игрового движка Xors3d. Он основан на DirectX 9.0 GAPI и повторяет синтаксис одного из самых популярных и лёгких в освоении игровых движков Blitz3D. Поэтому, он отлично подойдёт для начинающих игроделов.

Для тех, кто не знает, что такое враппер, поясняю. Враппер – это относительно простая библиотека, являющаяся промежуточным слоем между прикладной программой и другой библиотекой или API. Целью ее написания может быть обеспечение работоспособности библиотеки (API) в каком либо (чаще скриптовом) языке, в котором прямой вызов функций этой библиотеки API затруднителен или невозможен. Другой целью может быть обеспечение дополнительного удобства для прикладного программиста – адаптация библиотеки к объектно-ориентированному стилю программирования, компенсация неудобного дизайна библиотеки и т.п. В своём враппере я решил не только адаптировать Xors3d к ООП стилю программирования, но и, по мере возможностей, расширить его функционал.

Я бы хотел провести небольшой тутор для лучшего понимания работы моего враппера и создания игр в целом. Для начала расскажу, как подключить Xors3d и, собственно, мой враппер. Нам нужны xors3d.dll (можно скачать отсюда) и csXors3d.dll (доступен на моём блоге, ссылка). Первая длл – это и есть игровой движок Xors3d, а вторая – соответсвенно мой враппер. Xors3d.dll должен находиться рядом с исполняемым файлом (можно добавить через Add Existing Item и в Properties указать Copy To Output Directory – Copy always). csXors3d.dll следует добавлять через Project>Add Reference (убедитесь, что csXors3d.xml находится рядом, иначе не будет встроенной документации). Итак, давайте на примере Microsoft Visual Studio попробуем создать что-нибудь. Открываем студию, создаём пустой проект (File>New>Project>Windows>Empty Project), добавляем csXord3d.dll (Project>Add Reference) и xors3d.dll (Project>Add Existing Item), указываем в Properties>Copy To Output Directory>Copy always и добавляем CodeFile (Project>Add Item). Теперь всё готово непосредственно к написанию кода :) )).

На текущий момент использования враппера осуществляется не через using определённого пространства имён, а с помощью наследования от абстрактного класса Xors3D (возможно в последствии это изменится):

1 class SimpleGame : Xors3D
2 {
3  
4 }

Поместим в него точку входа программы:

1 class SimpleGame : Xors3D
2 {
3     static void Main()
4     {
5  
6     }
7 }

Весь последующий код будем располагать в Main(). Самое первое, с чего нужно начинать, это инициализация:

1 Graphics.Initialize(640, 480, true);

Данный метод создаст окно для отображения нашей игры с заданными параметрами (метод перегружен). В нашем случае это окно размером 640 на 480 пикселей и с включённой вертикальной синхронизацией.
Следующий шаг – создание камеры, через которую мы будем видеть наш трёхмерный виртуальный мир:

1 Camera cam = new Camera();

По-умолчанию все объекты создаются в точке с координатами 0,0,0. Добавим в сцену примитив (к примеру, конус) и расположим его впереди камеры:

1 Entity cone = Entity.CreateCone();
2 cone.SetPosition(0,0,15);

Теперь, чтобы увидеть всё это на экране нам необходимо постоянно рендерить (отрисовывать на экран) сцену:

1 // Основной цикл
2 while (!Application.CloseRequested)
3 {
4     // Рендерит текущую сцену
5     World.Render();
6  
7     // Меняет forward buffer и back buffer местами (двойная буфферизация)
8     Graphics.Flip();
9 }

Жмём F5 и любуемся картинкой ))))). Если ничего не происходит или появляется ошибка, то перечитайте внимательно весь туториал с начала и попробуйте снова. Также возможно вам следует обновить DirectX. Но я надеюсь у вас прошло всё гладко, так что переходим к следующему этапу. Сделаем наш конус управляемым. Пишем следующее в основном цикле выше World.Render (рендер должен происходить в самую последнюю очередь, после всех манипуляций с объектами):

1 if (Key.Down(Keys.LEFT)) cone.x -= 0.1f;
2 else if (Key.Down(Keys.RIGHT)) cone.x += 0.1f;
3 if (Key.Down(Keys.DOWN)) cone.y -= 0.1f;
4 else if (Key.Down(Keys.UP)) cone.y += 0.1f;

28

Запускаем и управляем конусом при помощи стрелок на клавиатуре. Как видите, всё довольно просто :) )). Конечно, это всего лишь капля всех возможностей xors3d, для более подробного изучения читайте документацию, примеры, форум по данному движку (всё это находиться на xors3d.com), а также мой блог по разработке враппера cs.xors3d.com.

Ниже я приведу полный код примера:

1 class SimpleGame : Xors3D
2 {
3     static void Main()
4     {
5         Graphics.Initialize(640, 480, true);
6         Camera cam = new Camera();
7  
8         Entity cone = Entity.CreateCone();
9         cone.SetPosition(0,0,15);
10  
11         // Основной цикл
12         while (!Application.CloseRequested)
13         {
14             if (Key.Down(Keys.LEFT)) cone.x -= 0.1f;
15             else if (Key.Down(Keys.RIGHT)) cone.x += 0.1f;
16             if (Key.Down(Keys.DOWN)) cone.y -= 0.1f;
17             else if (Key.Down(Keys.UP)) cone.y += 0.1f;
18  
19             // Рендерит текущую сцену
20             World.Render();
21  
22             // Меняет forward buffer и back buffer местами (двойная буфферизация)
23             Graphics.Flip();
24         }
25     }
26 }