XNA, прямой X, OpenGL

Я давно хотел дать игровое программирование, но так и не дошел до этого, и я, наконец, решил отдать его назад. Я решил попробовать создать простой платформер в 2D. Я быстро поигрался с XNA, и мне это нравится. Я ищу сравнение между XNA, directx, OpenGL. в основном сильные и слабые стороны между ними. Я был разработчиком .net в течение последних 4 лет, и в основном это мои знания.

Ответов (6)

Решение

Если вы хотите использовать Direct X, поздоровайтесь с Win32 и COM как с вашими новыми лучшими друзьями. С самого начала вы потратите много времени на изучение тонкостей Win32 API. DirectX с Win32 предоставляет все функции, необходимые для звука, ввода в игру и отображения графики. Вы также будете писать на C или C++, и вы узнаете все об управлении памятью и мышлении C - не то, от чего вам следует отказаться легкомысленно. Изучение и использование C в качестве языка для крупного проекта может быть очень полезным и побудить вас поблагодарить за современные функции языка программирования и элементы дизайна. На самом деле вас здесь не заставляют использовать C или C++ для разработки; существуют различные оболочки .NET и другие языковые оболочки для Direct X, но если у вас есть опыт работы с .NET, вы также можете использовать платформу, созданную для .NET: XNA.

XNA - это гораздо более новый набор инструментов на основе .NET. Он предоставляет многие из тех же функций, что и при прямом использовании Win32 и DirectX (звук, ввод и т. Д.), Но изначально на управляемой платформе. Для большинства игр (особенно для начинающих) вы можете получить отличную частоту кадров с игрой на XNA (даже если собственное приложение может дать вам больше), и это очень хорошо для изучения тонкостей разработки игр - вы можете ' т действительно пойти не так, как надо. Большинство фундаментальных структур данных, которые вам понадобятся (деревья quad / oct, архитектура модель-представление-контроллер, обработка событий, структура вашей программы), вам все равно нужно будет изучить и реализовать самостоятельно, а выполнение этого в .NET будет больше всего конечно будет проще, чем в C и C++. В качестве приятного дополнительного бонуса, если у вас есть Xbox 360, игры сообщества XNA.могут, с некоторой доработкой, быть выпущены через Xbox Live Marketplace. В принципе, как разработчик .NET, вы, вероятно, будете чувствовать себя здесь наиболее комфортно.

OpenGL - это кросс-платформенная библиотека для рисования полигонов. Он имеет другую структуру и API, чем Direct X, и не предоставляет никаких инструментов взаимодействия с ОС. Существуют пакеты, позволяющие программировать на OGL на многих разных языках. Однако, как говорили другие, это, вероятно, будет такой же большой работой, как и написание с Win32 и DirectX. Для других функций, помимо графики (клавиатура, мышь, джойстик, звук), вы можете рассмотреть возможность использования такой инфраструктуры, как SDL, с некоторыми из недостающих функций DirectX. Вокруг библиотеки есть довольно приличное сообщество, которое может дать вам указатели и подсказки, если вы пойдете по этому пути.

Дополнительные мысли по этому поводу можно найти в почти идентичной статье здесь: Предлагаемая игровая платформа для изучения direct-x, C Open GL или XNA .

DirectX не означает, что вам нужно использовать собственный код, существует несколько управляемых оболочек. Потеря производительности находится где-то в диапазоне 1-3% от встроенного DirectX, но, учитывая, что вы сэкономите часы и часы времени разработки и, вероятно, никогда не понадобятся эти последние 2%, управляемый - это путь.

См. Этот пример: SlimDX - полностью управляемая оболочка для DirectX на C#

XNA станет самым простым и быстрым способом запустить игру для платформ 360 или Windows. Это позволит вам продолжить разработку уже знакомым способом (C# .NET) и предоставит вам значительную структуру, которая автоматически позаботится о часто используемых материалах. С этой легкостью возникают некоторые ограничения, поскольку вы будете ограничены только вышеупомянутыми платформами, и из-за того, что это большая структура, будет много накладных расходов, которые будут в значительной степени неиспользованными, что приведет к снижению производительности, однако с простым 2D-платформером это вероятно, не будет проблемой.

DirectX также ограничит вас в платформе, и его будет намного сложнее изучать и развивать. Кроме того, вы, скорее всего, будете программировать здесь на C или C++. Преимущества будут в производительности, поскольку вы управляете всем, вы будете все контролировать и сможете оптимизировать все для того, что вам нужно. Я думаю, что для первой игры вам будет намного лучше начать с XNA и перейти на DirectX после того, как вы «перерастете» XNA. Особенно с целью создать простой 2D платформер.

OpenGL позволит вашей игре работать на большинстве платформ, но будет таким же сложным (если не более), как DirectX (хотя я должен упомянуть, что есть графические движки для OpenGL, которые довольно просты в использовании, например OGRE . Вы также будете разрабатывать на C) / C++ для OpenGL. Я снова думаю, что XNA будет лучшим выбором, пока вы не почувствуете, что готовы к следующему шагу.

Если ваш опыт в основном связан с .NET, как вы говорите, XNA будет иметь кратчайший барьер для входа, хотя вы не получите такой высокой производительности, как при других вариантах. Однако, когда вы говорите, что планируете создать 2D-платформер (при условии, что здесь подразумевается «нехватка оборудования»), то XNA будет более чем достаточным и, вероятно, наиболее подходящим выбором для вашего проекта.

Один из вариантов - написать свой движок на .NET, но реализовать средство визуализации с помощью C++ / CLI. Я делаю это для одного из своих проектов. XNA, OpenGL и DX слишком низкоуровневые для того, что я хочу. Я не хочу писать рендерер, я хочу использовать уже существующий. Обертка Ogre3D, Mogre, кажется, представляет собой полный беспорядок (не уверен, является ли это дизайн Mogre, Ogre3D или обоих), а большинство других оболочек безнадежно устарели. Вместо этого я реализую рендерер с использованием C++ / CLI и Irrlicht , который, кажется, быстрее и лучше спроектирован, чем Ogre3D.

Вы можете подумать о том, чтобы сделать что-то подобное.

Я начал использовать DirectX, но теперь перешел на XNA, в основном потому, что я хочу иметь возможность больше сосредоточиться на реальном игровом процессе, а не на технологии, лежащей в основе игры. Конечно, вам все равно придется кодировать движок, но очень помогает наличие фреймворка, который предоставляет готовые функции, специально созданные для программирования игр.