Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
XNA è un ambiente per VS adatto a programmare giochi in Windows?
MonoGame è un Framework che permette di compilare anche per altre piattaforme lo stesso sorgente realizzato per WinXNA?
Tutto si configura facilmente in VS installando i giusti pacchetti NuGet, ho trovato: xnafx40_redist.msi che significa che chi dovrà eseguire l'exe prima deve installare XNA?
Ho fatto dei primi test.
Su VS2022 cliccando il file: Content.mgcb si apre la finestra con tutte le scelte per cercare la risorsa voluta.
Su VS2017 se clicco Content.mgcb, si apre l'editor di testo:
Codice sorgente - presumibilmente C# / VB.NET
#----------------------------- Global Properties ----------------------------#
Monogame, e un wrapper basato sul framework XNA 4.0
Così come XNA è un wrapper delle DirectX.
Anni fa, per rendere XNA compatibile e avviabile da browser o da steam, crearono JSIL che è un interprete JavaScript che trasforma un gioco di XNA in webgl usando un'altra libreria chiamata FNA e di EmScripten.
In parallelo girava Monogame ancora alle prime fasi.
Richiedeva il framework Mono, per poter eseguire giochi su Linux e Mac.
Insomma un bel casino.
Dopodiché e nato Net Core.
Che grazie al Roslin, sono riusciti a portare la compilazione di Monogame in modo nativo.
Rispondendo alle tue domande,
Se il gioco, viene realizzato con XNA 4.0,
Il computer di destinazione, dovrà avere le runtime di XNA installate.
Se invece si usa Monogame un progetto Desktop GL usando il .net core, bisogna avere solo il net core installato nulla più.
Per le risorse, usare il Content mgcb e facoltativo.
Il percorso si può scrivere anche manualmente,
Ma dovrai anche compilare
La risorsa Manualmente.
Da PNG esempio a XNB.
Il mgcb non e altro che un content compiler.
Cosa che in XNA veniva fatta in automatico, mentre su Monogame bisogna compilare prima la risorsa e poi utilizzarla.
Come dicevo prima "e opzionale" perché:
Si può creare un metodo ad hoc per caricare direttamente la risorsa in una texture senza compilare il file in XNB.
public Texture2D LoadTextureFromFile(string filename, GraphicsDevice graphicsDevice, TextureType textureType)
{
Texture2D tx = null;
FileStream fss;
switch (textureType)
{
case TextureType.Texture:
fss = new FileStream(Environment.CurrentDirectory + $"/Content/Texture/{filename}", FileMode.Open, FileAccess.Read);
tx = Texture2D.FromStream(graphicsDevice, fss);
fss.Close();
break;
case TextureType.Picture:
fss = new FileStream(Environment.CurrentDirectory + $"/Content/Picture/{filename}", FileMode.Open, FileAccess.Read);
tx = Texture2D.FromStream(graphicsDevice, fss);
fss.Close();
break;
case TextureType.SystemSkin:
fss = new FileStream(Environment.CurrentDirectory + $"/Content/SystemSkin/{filename}", FileMode.Open, FileAccess.Read);
tx = Texture2D.FromStream(graphicsDevice, fss);
fss.Close();
break;
case TextureType.Charaset:
fss = new FileStream(Environment.CurrentDirectory + $"/Content/Class/{filename}", FileMode.Open, FileAccess.Read);
tx = Texture2D.FromStream(graphicsDevice, fss);
fss.Close();
break;
case TextureType.Hair:
fss = new FileStream(Environment.CurrentDirectory + $"/Content/Class/Hair/{filename}", FileMode.Open, FileAccess.Read);
tx = Texture2D.FromStream(graphicsDevice, fss);
fss.Close();
break;
}
return tx;
}
In modo da caricare texture senza compilare.
Ho usato questo metodo perché ignaro degli utenti normali e non programmatori se sanno compilare una risorsa o meno.
Per importare una risorsa invece,
Devi scaricare il mgcb dal sito monogame.
Altrimenti fai sul file mgcb apri con... E vai a selezionare il programma apposta.
I file le aggiungi dal programma.
Dal menù add file e nelle varie opzioni indichi il tipo di risorsa.
Grazie, tutto chiaro.
Il progetto che avevo fatto per Allegro5 in C ora l'ho anche realizzato con XNA in C#.
Si raggiungono prestazioni di tutto rispetto con XNA, lo sfondo, due immagini in scroll, tre sprites in movimento, un carro armato animato, 50 missili sparati che viaggiano da dx a sx, 50 bombe sganciate che cadono, non sono sufficienti per decretare chi sia più efficiente.
Appena ho tempo farò qualche prova più decisiva.
Tieni presente che ci ho realizzato sopra un engine per sviluppare giochi hehe.
Per la mia esperienza, si tende a guardare prestazioni dove realmente sono necessarie.
Che poi la differenza è veramente poca.
La velocità di calcolo attuale e 100 volte maggiore di quando era stato progettato tutto il sistema.
Entrambi fanno uso della GPU.
Quindi bisogna guardare ad altro.
Nell'altro mio test GDI Engine, sfruttando al massimo le GDI del net ed ottimizzando al massimo le possibilità, riesco a disegnare a video più di 300 o 3000 Sprite in tempo reale. ( Non ricordo bene)
Trovata la screen