【问题标题】:Why can't you develop XNA games in VB.Net?为什么不能在 VB.Net 中开发 XNA 游戏?
【发布时间】:2012-02-07 09:11:36
【问题描述】:

我知道 XNA 游戏没有 VB.Net 项目类型,但作为一个简单的测试,我拼凑了一个引用 Microsoft.XNA.* 的 VB 解决方案。它有一个实现Microsoft.XNA.Framework.Game 的类。然后在 C#Game1.cs 中,我简单地删除了所有样板代码并修改它以继承我的 VB 类...

namespace MyGame {
    public class Game1 : GameEngine.Engine {
    }
}

哪个是继承...

Public Class Engine
    Inherits Microsoft.Xna.Framework.Game

    Protected Overrides Sub Update(GameTime As Microsoft.Xna.Framework.GameTime)
        If GamePad.GetState(PlayerIndex.One).Buttons.Back = ButtonState.Pressed Then
            Me.Exit()
        End If

        For Each Element In Elements
            Element.Update(GameTime)
        Next

        MyBase.Update(GameTime)
    End Sub

   ...

这似乎可行,我已经能够加载内容、渲染模型、获取游戏手柄输入等...

所以我要问的是......由于 VB.Net 不支持某些高级功能,是否真的存在限制,或者仅仅是没有可用的项目模板/支持?

在编译到 MSIL 时是否有一些 VB 编译器遗漏的性能优化?

【问题讨论】:

标签: .net xna


【解决方案1】:

VB.NET 和 C# 都在语义级别编译为相同的 MSIL,因此这不是技术限制。如您所见,编写一个访问 XNA 的 VB.NET 应用程序并不难。

限制仅仅是因为示例必须由一个人用特定语言编写,并且大多数专业游戏开发人员都来自 C++ 背景。这是人力资源的限制——他们只能写这么多的示例代码。

还有一些performance differences between C# and VB.NET,可能促成了微软的决定。

更新:原来VB.NET doesn't support unsafe code。出于性能原因,您经常会发现在游戏编程中需要使用不安全代码的情况。我有一种感觉,微软的决定是基于一系列原因做出的。

【讨论】:

  • 感谢您提供有用的答案-我一直都知道不安全代码,但没有意识到其重要性-您能举例说明何时使用它吗?我猜更快的图像处理/类似?我会让这个打开一段时间,看看是否还有其他原因。
  • 不安全的数学运算要快得多,因此对于 C# 和图像处理中的着色器实现,这是一个很好的性能增强。在处理必须在紧密循环中调用的外部库时,您还会发现不安全代码 - 对于类型安全代码,p/invoke 开销非常高。
  • 谢谢 - 我想我会尝试将一些东西放在一起,看看效果如何。最坏的情况是,我总是可以将不安全的代码扔到 C# 库中。
  • @Polynomial:虽然我同意它更快,但其他人应该记住,不安全的代码不能从 XNA 部署到 Xbox 360。
  • @Nic - 感谢您提供的信息,我没有考虑过这一点。我想一个解决方案是同时拥有安全和不安全的实现,然后使用预处理器条件来激活和停用基于目标平台的不安全块。
【解决方案2】:

XNA 确实支持 VB。这是在 2011 年 5 月宣布的 -> http://blogs.msdn.com/b/vbteam/archive/2011/05/25/vb-support-for-the-xna-platform.aspx

【讨论】:

  • 我从@Polynomial 的回答中得到了一些非常有用的信息,但这是正确的(注意 Q 上的 cmets - 今天下午已链接。)
猜你喜欢
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 2011-12-28
  • 2011-11-05
相关资源
最近更新 更多