gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:13:51 24 4
gpt4 key购买 nike

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

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

  • 将我的代码重写为 C#
  • 围绕 MonoGame 编写一个小的 C# 包装器并将我的游戏逻辑代码转换为库

  • 不用说,这两种选择都很糟糕。我在这里错过了另一个选择吗?我不介意付出相当大的努力使这个东西在 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 引用,并使用浏览添加回正确的版本。

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

    然而,它没有做的是从未编译的内容文件(例如 myFont.spriteFont)加载声音和字体。对于 MonoGame 内容,声音和字体文件必须替换为它们来自 XNA 项目的编译版本。

    另外还有一个小麻烦——每个内容文件都必须标记为“始终复制”或“如果更新则复制”(默认为“从不复制”)。我并没有真正找到一种方法来一次为所有这些人改变这一点,但这并不需要太多时间。

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

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

    结论:
    回想起来,移植到 MonoGame 的过程花了我大约一个月的时间才弄明白——但是当我终于有了所有的部分时,对于 100+ 源文件 + 100+ 内容文件项目,整个过程花了大约 4 个小时。我想说 MonoGame 的人做得非常出色,修改模板以与 VB.Net 一起工作的那位先生也是如此。

    关于vb.net - 将 XNA + VB.Net 游戏转换为 MonoGame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26865443/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com