当前位置 : 主页 > 编程语言 > c语言 >

将XNA VB.Net游戏转换为MonoGame

来源:互联网 收集:自由互联 发布时间:2021-06-24
我正在用XNA和VB.NET编写策略游戏.这个技术组合看起来是一个很好的选择,直到我决定切换到MonoGame(但保持我的游戏逻辑在VB.Net中完好无损). 问题是MonoGame目前不支持VB.Net.我做了一些研究
我正在用XNA和VB.NET编写策略游戏.这个技术组合看起来是一个很好的选择,直到我决定切换到MonoGame(但保持我的游戏逻辑在VB.Net中完好无损).

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

>将我的代码重写为C#
>在MonoGame周围编写一个小型C#包装器,将我的Game Logic代码转换为库

毋庸置疑,这两种选择都很糟糕.我在这里错过了另一种选择吗?我不介意花大力气让这个东西在MonoGame中运行,但重写不是一个选择.

到目前为止我的发现:

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

解释我的技术选择(因为有人会问):

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

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

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

我找到了解决方案.一个失败的无痛方式来完成这项工作是我之前提到的 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合作的绅士也是如此.

网友评论