2012-02-07 60 views
13

我知道XNA游戏没有VB.Net项目类型,但作为一个简单的测试,我把一个VB解决方案放在一起,其中引用了Microsoft.XNA.*。它有一个类实现Microsoft.XNA.Framework.Game。然后在C#Game1.cs,我只是删除了所有的样板代码并修改它从我的VB类继承...为什么你不能在VB.Net中开发XNA游戏?

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中。网络还是只是没有项目模板/支持可用?

当编译到MSIL时,VB编译器错过了一些性能优化吗?

+4

有趣的问题 – Devjosh 2012-02-07 09:16:26

+1

我刚刚偶然发现这个http://blogs.msdn.com/b/vbteam/archive/2011/05/25/vb-support- for-the-xna-platform.aspx,它解释了XNA会/将支持VB – Basic 2012-02-07 15:07:08

回答

14

VB.NET和C#都在语义层面编译到同一个MSIL,所以它不是技术限制。正如你所看到的,将一个访问XNA的VB.NET应用程序连接在一起并不难。

限制仅仅是因为例子必须由某人以特定语言编写,而大多数专业游戏开发人员将来自C++背景。这是一个人力资源限制 - 他们只能编写如此多的示例代码。

也有一些performance differences between C# and VB.NET,这可能有助于微软的决定。

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

+0

感谢您提供了一个有用的答案 - 我一直都知道不安全的代码,但没有意识到它的重要性 - 您能举一个例子说明什么时候会使用?我猜想更快的图像处理/类似?我会留下一段时间,看看是否有其他原因出现。 – Basic 2012-02-07 10:23:37

+0

不安全的数学速度比较快,因此对于C#和图像处理中的着色器实现来说,这是一个很好的性能增强。在处理必须在紧密循环中调用的外部库时,您还会发现不安全的代码 - 类型安全代码的p/invoke开销相当高。 – Polynomial 2012-02-07 15:26:38

+0

谢谢 - 我想我会尽力把东西扔在一起,看看它是怎么回事。最坏的情况下,我总是可以将不安全的代码放在C#库中。 – Basic 2012-02-07 15:42:27