【问题标题】:XNA 3.1 vs. SDLXNA 3.1 与 SDL
【发布时间】:2010-11-21 13:40:08
【问题描述】:

我已经尝试了这两种方法,虽然 XNA 3.1 更吸引我,因为它可以轻松地喷出代码,而不必担心内存和垃圾清理以及所有琐碎的废话。您可以编写代码中有趣的部分(如果那甚至存在的话:D)。然而,XNA 限制了我,因为我无法将我用它编写的任何东西移植到 Linux 或 Mac OSX,即使这样,它也让想要玩我的游戏的人不得不下载 .NET 3.5 Redistributable 和 XNA 3.1 Redistributable,这不应该发生。我应该能够只在其中包含一些 DLL,而不是让我的游戏玩家上网下载东西。即便如此,由于 XNA 的整个“游戏一个文件”默认策略,随着时间的推移,代码仍然会变得一团糟。

你觉得哪个更好?

【问题讨论】:

  • 您可以将 .NET 2.0 框架(捆绑在 Vista 和 7 上)与 XNA 结合。而 3.5 中大部分相关的好东西(例如:扩展方法、lambdas)实际上是 语言 特性,而不是运行时特性。
  • 我不知道您从哪里得知 XNA 对您的游戏有一个文件的政策。 XNA 设计者假设您将根据需要创建额外的文件,而不是简单的游戏。您的游戏类只是您和 XNA 之间的主要控制界面。

标签: c# .net c++ xna sdl


【解决方案1】:

真的,这将取决于您使用 C++ 的经验水平,以及您是否真的认为无法移植您的代码是一个大问题。至于内存管理的东西...... 当您使用 C++0x 标准中的一些新功能(例如 shared_ptr 和 unique_ptr、lambdas 等)时,SDL 会变得容易得多。即使 SDL 中需要原始指针的东西也可以使用 .get()智能指针上的功能,您的生活会更轻松。

简而言之:擅长 C++,如果您真的有兴趣轻松地将游戏移植到其他系统,那么我会选择 SDL。如果您只真正了解 C# 并涉足 C++,并且只在 Windows 和 Xbox 上玩游戏并不是什么大不了的事,那么绝对会选择 XNA。

【讨论】:

  • 我非常了解 C++ 几乎所有的东西;我在一些高级内存概念上苦苦挣扎,即:堆栈/堆等,即使我不知道 C# 的废话,我仍然可以在 XNA 中制作一个原型模拟终端,它可以接受字母和数字输入,并会相应地更新屏幕关于你输入的内容。我花了一两天时间。我需要出去学习C#。一个有趣的因素是,我的一些开发合作伙伴可能会因为我选择使用仅 Windows 专有的东西而感到恼火。但是无所谓。真的不是他们的问题吗?
【解决方案2】:

我个人更喜欢 XNA。无论个人偏见如何,微软都知道如何制作一些非常卑鄙的软件开发工具。 XNA 非常无缝,尽管有其局限性,但它仍然是一种美妙的体验。虽然缺乏便携性令人沮丧,但至少你可以把它放在 xbox 上:)

你是什么意思'一个文件为你的游戏'政策?您可以像创建任何其他 VS 项目一样创建。

【讨论】:

  • 我在试用 XNA 时感觉非常有限。我当时想“好吧……Game.cs,对……为什么所有功能都在这个文件中?为什么不在多个文件中以减少混乱?”我觉得我被限制在一个文件中(即使我没有)这样做更容易,因为所有预制功能都在那里。
  • 嗯.. 你可以随意拆分它们。不要因为默认模板就放弃 XNA!
  • @Lemmons:考虑部分类或使用GameComponent。有很多方法可以重组事物。
【解决方案3】:

从个人经验来看,远在XNA。能够 - 用你的话来说 - “只是喷出代码”并快速将东西放在一起是游戏开发中的巨大好处。

显然我不主张所有代码都被“喷出”。但是关于 C# 和 XNA 的好处是,它们为您提供了 选项,让您在编写代码时不那么小心 - 然后您可以在适当的地方进行练习。

使用 C++ 和 SDL,您必须“小心”地编写绝大多数代码。 (更不用说你在某些时候弄错了,而 C++ 对此更加无情。)

您提到的一些问题(“游戏的一个文件”,需要 .NET 3.5 可再发行组件)实际上并不是 XNA 的问题 - 正如 Veered 和我在 cmets 中所讨论的那样。此外,如果您使用 ClickOnce 分发游戏,那么它将为您处理必要的 XNA 和 .NET Framework 下载和安装。

如果您确定需要移植到 Linux 和 Mac,那么我仍然主张使用 C#(通过 Mono)作为开发语言 - 即使您必须在这些平台上使用 XNA 以外的其他语言。

XNA 和 C# 还有很多其他优点——编译时间快得多、内容管道、微软的支持/更新、移植到 Xbox 360 和 Windows Phone 的便利性、良好的库——写的例子等等。

【讨论】:

    【解决方案4】:

    我投票给 XNA。

    我实际上是使用SDL.NET + C# 开始我的游戏的(其中涵盖了您所描述的内存管理,同时保持了对 SDL 的忠诚度),不久前开始学习 C#。因此,如果您确实喜欢 .Net 的好处,您可以检查一下。然而,当我发现 XNA 并搞砸了一些小型测试游戏后,我决定将我的工作移植到 XNA 上是值得的(因为无论如何我都不关心跨平台)。

    当您说“一个文件方法”时,我确实理解您的意思。尽管正如其他人所提到的,这不是实际的最终结果,只是它的呈现方式就像“嘿,看看一切都是多么容易,现在更新和绘制,你有一个小家伙四处走动,从他的眼睛里射出火球!” XNA 中的东西感觉比 SDL 更有条理,如果你愿意的话,更多的手持。 XNA 易于上手并完成需要完成的工作,让您的良好编码实践在此过程中发挥作用。

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 1970-01-01
      • 2023-03-12
      • 2011-05-31
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多