Доброго времени суток всем читающим данную статью! Ни для кого не секрет, что язык программирования 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 |
Поместим в него точку входа программы:
1 |
class SimpleGame : Xors3D |
Весь последующий код будем располагать в 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); |
Теперь, чтобы увидеть всё это на экране нам необходимо постоянно рендерить (отрисовывать на экран) сцену:
2 |
while (!Application.CloseRequested) |
Жмём 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; |

Запускаем и управляем конусом при помощи стрелок на клавиатуре. Как видите, всё довольно просто :) )). Конечно, это всего лишь капля всех возможностей xors3d, для более подробного изучения читайте документацию, примеры, форум по данному движку (всё это находиться на xors3d.com), а также мой блог по разработке враппера cs.xors3d.com.
Ниже я приведу полный код примера:
1 |
class SimpleGame : Xors3D |
5 |
Graphics.Initialize(640, 480, true ); |
6 |
Camera cam = new Camera(); |
8 |
Entity cone = Entity.CreateCone(); |
9 |
cone.SetPosition(0,0,15); |
12 |
while (!Application.CloseRequested) |
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; |