12

很久以前就想给游戏编程了,一直没搞定,最后还是决定先给。我决定尝试创建一个简单的 2D 平台游戏。我快速玩过 XNA,我很喜欢它。我正在寻找的是 XNA、directx、OpenGL 之间的比较。主要是他们之间的优势和劣势。在过去的 4 年里,我一直是一名 .net 开发人员,这就是我的主要知识。

4

6 回答 6

12

如果您想做 Direct X,请向 Win32 和 COM 打个招呼,成为您最好的新伙伴。您将在早期花费大量时间来学习 win32 API 的来龙去脉。DirectX with Win32 为您提供声音、游戏输入和图形显示所需的所有功能。您还将使用 C 或 C++ 编写代码,并且您将学习所有有关内存管理和 C 思维方式的知识——这不是您应该考虑轻易放弃的东西。学习和使用 C 作为主要项目的语言可能非常有启发性,并使您感谢现代编程语言的特性和设计元素。您实际上并没有被迫在这里使用 C 或 C++ 进行开发;Direct X 有各种 .NET 包装器和其他语言包装器,但如果您有 .NET 经验,不妨使用为 .NET 制作的框架:XNA。

XNA 是一套更新的、基于 .NET 的工具。它提供了许多与直接使用 Win32 和 DirectX 相同的功能(声音、输入等),但在托管平台上本机。对于大多数游戏(尤其是刚开始的游戏),您可以通过 XNA 游戏获得出色的帧速率(即使本机应用程序可以为您提供更多),并且非常适合学习游戏开发的来龙去脉——您可以真的不会出错。您需要的大多数基本数据结构(四叉树/八进制树、模型-视图-控制器架构、事件处理、程序结构)您仍然需要自己学习和实现,并且在 .NET 中进行最当然比 C 和 C++ 更容易。作为一个不错的附带奖励,如果您有 Xbox 360、XNA 社区游戏可以通过一些工作通过 Xbox Live 市场发布。 基本上,作为 .NET 开发人员,您在这里可能会感觉最舒服。

OpenGL 是一个用于绘制多边形的跨平台库。它具有与 Direct X 不同的框架和 API,并且不提供任何操作系统交互工具。有一些包可以让你用许多不同的语言在 OGL 中编程。然而,正如其他人所说,这可能与使用 Win32 和 DirectX 编写一样多。对于图形以外的其他功能(键盘、鼠标、操纵杆、音频),您可以考虑使用像SDL这样的框架,其中一些缺少的 DirectX 功能。图书馆周围有一个相当不错的社区,如果你走这条路,可以给你指点和提示。

更多关于这方面的想法可以在几乎相同的文章中找到,这里是:学习 direct-x、C Open GL 或 XNA 的建议游戏平台

于 2009-02-23T18:32:41.200 回答
5

XNA 将是为 360 或 Windows 平台启动和运行游戏的最简单/最快的方法。它将允许您以您已经熟悉的方式(C#.NET)继续开发,并且它将为您提供一个相当大的框架,该框架将自动处理常用的东西。但是,这种轻松带来了一些限制,因为您将仅限于上述平台,并且由于它是一个大型框架,因此会有很多开销在很大程度上未使用,从而导致性能下降,但是使用简单的 2D 平台游戏,这可能不会成为问题。

DirectX 也会限制您在平台上的使用,并且在学习和开发方面会变得更加复杂。您也很可能在这里使用 C 或 C++ 进行编程。优势在于性能,因为您正在处理所有事情,您将控制所有事情并能够根据您的需要优化所有内容。我认为对于第一场比赛,你会从 XNA 开始,在你“超越”​​XNA 之后转向 DirectX 会好得多。特别是为了创建一个简单的 2D 平台游戏。

OpenGL 将允许您的游戏在大多数平台上运行,但会像 DirectX 一样复杂(如果不是更复杂的话)(尽管我应该提到 OpenGL 的图形引擎,它们像OGRE一样使用起来非常简单。您还将使用 C 进行开发/C++ for OpenGL. 我认为 XNA 会是更好的选择,直到你觉得你已经准备好进行下一步了。

于 2009-02-23T18:45:17.610 回答
3

如您所说,如果您的经验主要是使用 .NET,那么 XNA 的进入门槛将是最短的,尽管您不会获得与使用其他选项一样好的性能。然而,正如您所说,您正计划制作 2D 平台游戏(假设这里的含义是“非硬件密集型”),那么 XNA 将绰绰有余,并且可能是您项目的最合适的选择。

于 2009-02-23T18:38:13.480 回答
2

DirectX 并不意味着您必须使用本机代码,那里有几个托管包装器。性能损失在原生 DirectX 的 1-3% 范围内,但考虑到您将节省数小时和数小时的开发时间,并且可能永远不需要最后的 2%,管理是要走的路。

请参阅此示例:SlimDX - C# 中 DirectX 的完全托管包装器

于 2009-02-23T18:45:12.433 回答
1

一种选择是在 .NET 中编写引擎,但使用 C++/CLI 实现渲染器。我正在为我的一个项目做这个。XNA、OpenGL 和 DX 对于我想要的来说都太低级了。我不想编写渲染器,我想使用现有的渲染器。Ogre3D 包装器 Mogre 看起来完全是一团糟(不确定是 Mogre、Ogre3D 还是两者的设计),而且大多数其他包装器已经过时了。相反,我使用 C++/CLI 和Irrlicht来实现渲染器,这似乎比 Ogre3D 更快且设计得更好。

你可以考虑做这样的事情。

于 2009-02-23T18:51:45.507 回答
1

我开始使用 DirectX,但现在转向 XNA,主要是因为我希望能够更多地关注实际的游戏玩法,而不是游戏背后的技术。当然,您仍然需要进行一些引擎编码,但是拥有一个框架来提供专门为游戏编程制作的现成功能会大有帮助。

于 2009-03-06T14:06:54.100 回答