XNA,directx,OpenGL

XNA,directx,OpenGL,opengl,directx,xna,Opengl,Directx,Xna,我很久以前就想给游戏编程,但一直没有抽出时间,我最终决定在很久以前给它。我决定尝试创建一个简单的2D平台游戏。我和XNA玩得很快,我很喜欢。我要找的是XNA、directx和OpenGL之间的比较。主要是他们之间的优势和劣势。在过去的4年里,我一直是一名.net开发人员,这是我的主要知识 如果您想使用Direct X,请与Win32和COM打招呼,作为您的新好友。您将在早期花费大量时间学习win32 API的细节。带Win32的DirectX为您提供声音、游戏输入和图形显示所需的所有功能。你也可

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

如果您想使用Direct X,请与Win32和COM打招呼,作为您的新好友。您将在早期花费大量时间学习win32 API的细节。带Win32的DirectX为您提供声音、游戏输入和图形显示所需的所有功能。你也可以用C或C++写,你可以学到所有关于内存管理和C思维的东西,而不是你应该考虑放弃的东西。在一个重大项目中学习和使用C语言是非常有启发性的,并且使您感谢现代编程语言的特性和设计元素。实际上,你并没有强制使用C或C++来开发。Direct X有各种.NET包装器和其他语言包装器,但是如果您有.NET经验,您最好使用为.NET:XNA制作的框架

XNA是一套更新得多的基于.NET的工具。它提供了许多与直接使用Win32和DirectX相同的功能(声音、输入等),但是是在托管平台上本机提供的。对于大多数游戏(尤其是刚开始玩的游戏),XNA游戏的帧速率都很高(即使本机应用程序可以提供更多帧速率),这对于了解游戏开发的来龙去脉非常有用——你不会真的出错。你需要的基本数据结构(Quad/OCT树,模型视图控制器架构,事件处理,程序结构),你仍然需要学习和实现你自己,在.NET中做这件事肯定比C和C++更容易。作为一个不错的额外奖励,如果你有一个Xbox360,XNA社区游戏,基本上,作为一个.NET开发者,你可能会觉得在这里最舒服

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


关于这一点的更多想法可以在一篇几乎相同的文章中找到,如下所示:。

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

DirectX并不意味着您必须使用本机代码,还有一些托管包装器。性能损失大约在本机DirectX的1-3%范围内,但考虑到您将节省数小时的开发时间,并且可能永远都不需要最后2%的时间,管理是一种选择


请参阅此示例:-在C#

XNA中为DirectX提供一个完全托管的包装器将是在360或Windows平台上启动和运行游戏的最简单/最快速的方法。它将允许您以您已经熟悉的方式(C#.NET)继续开发,并将为您提供一个相当大的框架,自动处理常用的内容。不过,这种简化带来了一些限制,因为您将仅限于上述平台,并且由于它是一个大型框架,因此将有大量开销,这些开销将大部分未使用,从而导致性能下降。然而,对于一个简单的2D平台,这可能不会是一个问题

DirectX也将限制您在平台中的使用,而且在其中学习和开发将更加复杂。你也很有可能在C或C++编程。优势在于性能,因为您可以处理一切,您可以控制一切,并能够根据需要优化一切。我认为在第一场比赛中,你最好先从XNA开始,在你“长大”XNA之后再转到DirectX。特别是为了创建一个简单的2D平台


OpenGL将允许您的游戏在大多数平台上运行,但将与DirectX一样复杂(如果不是更复杂的话)(虽然我应该提到OpenGL有一些图形引擎,它们使用起来非常简单。您也将使用C/C++为OpenGL开发。同样,我认为XNA将是更好的选择,直到您感觉准备好进行下一步。

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


<>你可以考虑这样做。

我开始使用DirectX,但现在已经转到XNA了,主要是因为我希望能够更多地关注实际游戏,而不是关注游戏背后的技术。当然,你仍然会。