将XNA + VB.Net游戏转换为MonoGame

时间:2014-11-11 12:55:02

标签: vb.net xna monogame

我正在用XNA和VB.NET编写策略游戏。这个技术组合看起来是一个很好的选择,直到我决定切换到MonoGame(但保持我在VB.Net中的游戏逻辑完好无损)。

问题是MonoGame目前不支持VB.Net。我做了一些研究,似乎我基本上有两个选择:

  1. 将我的代码改写为C#
  2. 在MonoGame周围编写一个小型C#包装器,将我的Game Logic代码转换为库
  3. 毋庸置疑,这两种选择都很糟糕。我在这里错过了另一种选择吗?我不介意花大力气让这个东西在MonoGame中运行,但重写不是一个选择。


    到目前为止我的发现:

    在浏览网页时,我偶然发现a MonoGame template for VB.Net。虽然它看起来正是我所需要的,但即使在运行一个普通的新项目之后它也会在加载时崩溃。然后我继续谷歌搜索错误,但没有接近运行的东西。


    解释我的技术选择(因为某人询问):

    为什么选择XNA?我之前使用过它,我对它很熟悉,即使它已经过时了,它也能很好地满足我的需求,并且应该可以使用几年。

    为什么选择VB.Net?我对它有丰富的经验,我更喜欢它的语法而不是C#。这对我来说很重要,因为我正在编写一个相当大规模的策略游戏,并且保持代码清洁和可理解是必不可少的。

    为什么不用C#?经验。我和C#合作了一年多一点,但这还不自然。 VB是。

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。我之前提到的MonoGame template是一种失败的无痛方式。这种方法存在一些小问题,但没有什么问题。

问题#1:启动MonoGame项目时出错。
运行新的VB MonoGame模板项目后,启动时会抛出一个讨厌的错误(mscorlib.dll中的System.TypeLoadException)。这是因为模板引用了一个不正确版本的MonoGame库(我使用的是Windows,并且有一个链接到项目的android库)。 解决方案:从新项目中删除MonoGame引用,并使用browse添加正确的版本。

问题#2:MonoGame中缺少内容项目。
MonoGame没有内容项目,而是一个名为“内容”的文件夹,诚实地表现得像项目一样。只需将XNA内容项目中的所有内容添加到此文件夹即可。惊人!

但它未能做的是从未编译的内容文件(例如myFont.spriteFont)加载声音和字体。对于MonoGame内容,声音和字体文件必须用XNA项目中的编译版本替换。

另外还有一个小麻烦 - 每个内容文件必须标记为“始终复制”或“如果更新则复制”(默认为“从不复制”)。我并没有真正找到一种方法来同时为所有这些改变它,但它不会花费那么多时间。

问题#3:XNA项目自动解析导入。
XNA项目有一个'Syntactic Sugar'优势。直到我切换到mono,我才意识到这一点,但我从未在XNA项目中看到过一行名为'imports'的行。我大量使用了这个,有许多小类,只包含几行,并使用了'Vector2'的'列表'等。在移植到MonoGame之后,由于缺少导入,我不得不经历几百个编译错误。

我仍然想知道这是由XNA项目还是Visual Studio本身的其他配置引起的,但我必须说我喜欢它。如果您对此有所了解,请分享。

<强>结论:
回顾过去,移植到MonoGame的过程花了我一个月的时间来弄清楚 - 但是当我最终获得所有部分时,整个过程花费了大约4个小时来完成100多个源文件+100个内容文件项目。我会说MonoGame的工作人员做了大量的工作,修改模板以与VB.Net合作的绅士也是如此。