2012-02-07 14 views
13

Sé que no hay ningún tipo de proyecto VB.Net para los juegos XNA, pero como una simple prueba, lancé una solución VB que hace referencia al Microsoft.XNA.*. Tiene una clase que implementa Microsoft.XNA.Framework.Game. Luego, en el C# Game1.cs, simplemente me quité todo el código repetitivo y lo modificó para heredar de mi clase VB ...¿Por qué no puedes desarrollar juegos XNA en VB.Net?

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

¿Qué se hereda ...

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 

    ... 

Esto parece funcionar y He podido cargar contenido, renderizar un modelo, tomar entrada de gamepad, etc.

Entonces, lo que estoy preguntando es ... ¿Existe realmente una restricción debido a algunas características avanzadas no admitidas en VB. ¿Net o es simplemente que no hay plantillas de proyectos/soporte disponibles?

¿Existe alguna optimización del rendimiento al compilar en MSIL que el compilador de VB falla?

+4

pregunta interesante – Devjosh

+1

Acabo de tropezar con este http://blogs.msdn.com/b/vbteam/archive/2011/05/25/vb-support- for-the-xna-platform.aspx que explica que XNA soporta/apoyará VB – Basic

Respuesta

14

VB.NET y C# compilan el mismo MSIL en un nivel semántico, por lo que no es una limitación técnica. Como has visto, no es demasiado difícil hackear juntos una aplicación VB.NET que accede a XNA.

La restricción se debe simplemente a que los ejemplos deben ser escritos en un idioma en particular por una persona, y la mayoría de los desarrolladores de juegos profesionales provienen de un fondo de C++. Es una limitación de recursos humanos; solo pueden escribir tanto código de muestra.

También hay algunos performance differences between C# and VB.NET, que pueden haber contribuido a la decisión de Microsoft.

Actualización: También resulta que VB.NET doesn't support unsafe code. A menudo encontrará casos donde el código inseguro es necesario en la programación de juegos, por razones de rendimiento. Tengo la sensación de que la decisión de Microsoft se basó en una lista compuesta de razones.

+0

Gracias por una respuesta útil. Siempre he sabido sobre el código inseguro pero no me había dado cuenta del significado. ¿Puedes dar un ejemplo de cuándo lo haría? ¿ser usado? Supongo que una manipulación de imagen más rápida/similar? Dejaré esto abierto un tiempo para ver si surgen otros motivos. – Basic

+0

La matemática insegura es bastante más rápida, por lo que para implementaciones de sombreado en C# y procesamiento de imágenes, es una gran mejora de rendimiento. También encontrará un código inseguro al tratar con libs externas que deben ser llamadas en un ciclo cerrado: la sobrecarga de p/invoke es bastante alta para el código de tipo seguro. – Polynomial

+0

Gracias - Creo que voy a probar algo y ver cómo va todo. En el peor de los casos, siempre puedo arrojar el código inseguro en una biblioteca de C#. – Basic

Cuestiones relacionadas