Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - C# XNA MonoGame primi passi
Forum - C# / VB.NET - C# XNA MonoGame primi passi

Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 12:43
Mercoledì, 19/04/2023
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

  1. #----------------------------- Global Properties ----------------------------#
  2.  
  3. /outputDir:bin/$(Platform)
  4. /intermediateDir:obj/$(Platform)
  5. /platform:Windows
  6. /config:
  7. /profile:Reach
  8. /compress:False
  9.  
  10. #-------------------------------- References --------------------------------#
  11.  
  12.  
  13. #---------------------------------- Content ---------------------------------#


che significa, bisogna aggiungere i percorsi a mano? Con quale sintassi?

Ultima modifica effettuata da Carlo il 21/04/2023 alle 19:20


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:57
Giovedì, 20/04/2023
Cerco di esprimermi in meglio.

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.

Questo metodo e situato nel mio progetto su Git mmorpgmaker al file https://github.com/MakingItalia/MMORpgmaker/blob/master/Cli ... Utils.cs

Codice sorgente - presumibilmente C# / VB.NET

  1. /// <summary>
  2.         /// Load Texture from Texture Folder
  3.         /// </summary>
  4.         /// <param name="filename">Filename whit extension</param>
  5.         /// <param name="graphicsDevice">GraphicsDevice</param>
  6.         /// <returns>Texure2D</returns>
  7.         public Texture2D LoadTextureFromFile(string filename, GraphicsDevice graphicsDevice, TextureType textureType)
  8.         {
  9.             Texture2D tx = null;
  10.             FileStream fss;
  11.  
  12.             switch (textureType)
  13.             {
  14.                 case TextureType.Texture:
  15.                     fss = new FileStream(Environment.CurrentDirectory + $"/Content/Texture/{filename}", FileMode.Open, FileAccess.Read);
  16.                     tx = Texture2D.FromStream(graphicsDevice, fss);
  17.                     fss.Close();
  18.                     break;
  19.                 case TextureType.Picture:
  20.                     fss = new FileStream(Environment.CurrentDirectory + $"/Content/Picture/{filename}", FileMode.Open, FileAccess.Read);
  21.                     tx = Texture2D.FromStream(graphicsDevice, fss);
  22.                     fss.Close();
  23.                     break;
  24.                 case TextureType.SystemSkin:
  25.                     fss = new FileStream(Environment.CurrentDirectory + $"/Content/SystemSkin/{filename}", FileMode.Open, FileAccess.Read);
  26.                     tx = Texture2D.FromStream(graphicsDevice, fss);
  27.                     fss.Close();
  28.                     break;
  29.  
  30.                 case TextureType.Charaset:
  31.                     fss = new FileStream(Environment.CurrentDirectory + $"/Content/Class/{filename}", FileMode.Open, FileAccess.Read);
  32.                     tx = Texture2D.FromStream(graphicsDevice, fss);
  33.                     fss.Close();
  34.                     break;
  35.                 case TextureType.Hair:
  36.                     fss = new FileStream(Environment.CurrentDirectory + $"/Content/Class/Hair/{filename}", FileMode.Open, FileAccess.Read);
  37.                     tx = Texture2D.FromStream(graphicsDevice, fss);
  38.                     fss.Close();
  39.                     break;
  40.  
  41.             }
  42.             return tx;
  43.         }



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.

https://docs.monogame.net/articles/tools/mgcb.html

La compilazione delle risorse ovviamente devi specificarla.

Testo quotato


    Windows
    iOS
    Android
    DesktopGL
    WindowsStoreApp
    PlayStation4
    PlayStation5
    XboxOne
    Switch
    Stadia



Selezionando come detto prima DesktopGL le risorse saranno compilate per tutti i sistemi operativi Desktop
(Win,Linux,Mac)

Se vuoi approfondire un pò tutti gli argomenti,c'è un grande archivio pieno di esempi

https://github.com/CartBlanche/MonoGame-Samples





Ultima modifica effettuata da Thejuster il 21/04/2023 alle 12:21


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:48
Venerdì, 21/04/2023
:k:

Ultima modifica effettuata da Carlo il 21/04/2023 alle 19:50


in programmazione tutto è permesso
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:49
Venerdì, 21/04/2023
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.


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 22:57
Sabato, 22/04/2023
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

http://www.pierotofy.it/pages/extras/forum/viewattachment. ...

Ovviamente gli FPS calano.
Questo in GDI, immagia su Monogame, sarà almeno il triplo.

Questo per dire come in allegro o in
Net bisogna sapere ottimizzare il codice. Il resto e dato dalla GPU per il render e CPU per il calcolo.

Per toglierti ulteriori dubbi dai un occhiata al TEngine.
Un motore che io ed il caro vecchio mentore stavamo progettando .

https://youtu.be/S_qufDtK7lE

Ultima modifica effettuata da Thejuster il 22/04/2023 alle 23:10


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote