2012-02-07 9 views
13

So che non esiste un tipo di progetto VB.Net per i giochi XNA, ma come test semplice ho gettato una soluzione VB che fa riferimento a Microsoft.XNA.*. Ha una classe che implementa Microsoft.XNA.Framework.Game. Poi nel C# Game1.cs, ho semplicemente rimosso tutto il codice standard e modificato per ereditare dalla mia classe VB ...Perché non è possibile sviluppare giochi XNA in VB.Net?

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

Che è ereditando ...

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 

    ... 

Questo sembra funzionare e Sono stato in grado di caricare contenuti, renderizzare un modello, prendere input gamepad, ecc ...

Quindi quello che sto chiedendo è ... C'è davvero una restrizione a causa di alcune funzioni avanzate non supportate in VB. Net o è semplicemente che non sono disponibili modelli/supporto di progetto?

Esiste qualche ottimizzazione delle prestazioni durante la compilazione su MSIL che il compilatore VB non rileva?

+4

domanda interessante – Devjosh

+1

Mi sono appena imbattuto in questo http://blogs.msdn.com/b/vbteam/archive/2011/05/25/vb-support- for-the-xna-platform.aspx che spiega che XNA supporta/supporterà VB – Basic

risposta

14

VB.NET e C# entrambi compilano lo stesso MSIL a livello semantico, quindi non è un limite tecnico. Come hai visto, non è troppo difficile hackerare insieme un'app VB.NET che accede a XNA.

La restrizione è semplicemente perché gli esempi devono essere scritti in una determinata lingua da una persona, e la maggior parte degli sviluppatori di giochi professionali provengono da uno sfondo C++. È una limitazione delle risorse umane: possono solo scrivere tanto codice di esempio.

Ci sono anche alcuni performance differences between C# and VB.NET, che potrebbero aver contribuito alla decisione di Microsoft.

Aggiornamento: Si scopre anche che VB.NET doesn't support unsafe code. Troverai spesso casi in cui è necessario codice non sicuro nella programmazione dei giochi, per motivi di prestazioni. Ho la sensazione che la decisione di Microsoft sia stata presa sulla base di un elenco composto di ragioni.

+0

Grazie per una risposta utile - Ho sempre saputo del codice non sicuro ma non ne avevo compreso l'importanza - puoi dare un esempio di quando sarebbe essere usato? Immagino che la manipolazione delle immagini sia più veloce/simile? Lascerò questo tempo un po 'per vedere se sorgono altri motivi. – Basic

+0

La matematica non sicura è un po 'più veloce, quindi per le implementazioni shader in C# e l'elaborazione delle immagini, è un ottimo miglioramento delle prestazioni. Troverai anche codice non sicuro quando gestisci librerie esterne che devono essere chiamate in un ciclo ristretto: il sovraccarico di p/invoke è piuttosto alto per il codice typesafe. – Polynomial

+0

Grazie - Penso che avrò intenzione di lanciare qualcosa insieme e vedere come va. Nel peggiore dei casi, posso sempre rimproverare il codice non sicuro in una libreria C#. – Basic

Problemi correlati