2013-03-12 17 views
7

Realizzo un gioco XNA, in cui testo spesso cose che non possono essere modificate senza ricostruire l'intera applicazione di gioco (modifica e continua non funziona). Arrivare al punto in cui effettivamente collaudo le cose può richiedere un po 'di tempo, perché il gioco ha bisogno di caricare le sue risorse.Accesso agli oggetti da un altro processo

Quello che mi piacerebbe fare è essere in grado di caricare risorse su qualche applicazione di supporto e accedervi dall'app di gioco in qualche modo, eliminando la necessità di ricaricare le risorse di gioco il più delle volte. È possibile nelle applicazioni .Net, o c'è qualche altro approccio che dovrei sapere?

Il mio gioco XNA fa molto affidamento sulle istanze Texture2D, in particolare una classe di libreria con diversi oggetti Dictionary<string, Texture2D>.

Penso che quello che mi piacerebbe essere in grado di fare è avere accesso diretto a quei dizionari nell'app di supporto dall'app di gioco. I giochi XNA possono essere indirizzati solo a piattaforme a 32 bit e vorrei che l'app di supporto fosse a 64 bit, quindi potrebbe contenere più di 1 (.5) Gigabyte di dati di risorse (se possibile).


approccio Unit testing (o qualsiasi altra cosa implica non utilizzando alcune delle risorse) non funziona per me in questo caso, dal momento che sto sviluppando effetti visivi, e coinvolge ogni trama che ho.

+0

Forse è possibile progettare test di unità migliori che non caricano le enormi risorse e utilizzano dati fittizi invece di grandi quantità di dati necessari per la versione di produzione. http://stackoverflow.com/questions/14087/automated-testing-a-game#14136. http://stackoverflow.com/questions/32835/xna-unit-testing – Despertar

risposta

-1

Tutto si riduce al tipo di risorse che si desidera caricare in fase di esecuzione. Se vuoi solo testare le proprietà di texture/suoni, allora questo può essere affrontato con l'uso dei metodi Texture2D.FromFile e SoundEffect.FromStream (DEVE essere PCM wave file). Tuttavia, se si desidera caricare i modelli in modo dinamico, è necessario un piccolo sforzo in più. L'adattamento di questo sample dovrebbe essere in grado di realizzare ciò di cui hai bisogno.

+0

Non c'è alcuna differenza significativa tra il caricamento di risorse compilate o file di immagini raw, in entrambi i casi ci vuole un sacco di tempo per caricarli tutti prima che l'applicazione arrivi a il primo schermo Mi piacerebbe evitare di farlo tutto il tempo, e invece caricare le risorse solo una volta e tenerle disponibili per le app di gioco appena compilate. – user1306322

+0

Bene, se si tratta di un problema di velocità/blocco si può provare a contenere tutta la gestione del contenuto in un thread separato (con un wrapper mutex Cell) e sondare per verificare se le risorse sono completamente caricate. Questo post sul blog offre una buona panoramica del caricamento di contenuti thread-safe in XNA: http://konaju.com/?p=27. Tuttavia, XNA impone una sezione critica su qualsiasi utilizzo di un dispositivo Graphics, quindi se si sta tentando di eseguire una grande quantità di animazione/caricamento delle risorse ciò potrebbe rallentare notevolmente il progetto. In tal caso, questo potrebbe funzionare meglio: http://theinstructionlimit.com/a-shared-content-manager-for-xna. –

+0

Questo è 2688 file di immagine separati, non si può fare nulla per accelerare * che * su abbastanza. A meno che non siano già caricati e disponibili in qualsiasi momento. – user1306322

0

Se desideri disporre di un provider/server dinamico per le tue risorse, hai un sacco di possibilità. Con C# potresti usare f.e. WCF per fornire le tue risorse. Ma come detto prima forse dovresti provare a disaccoppiare il tuo design in modo che tu possa effettivamente usare il test dell'unità invece di iniziare l'intero gioco.

http://en.wikipedia.org/wiki/Unit_testing

+0

Sfortunatamente, la maggior parte delle nuove funzionalità è strettamente correlata a tutti gli aspetti del gioco, quindi ho bisogno di quasi tutto per essere caricato in modo da poter vedere con i miei occhi le modifiche, che richiedono anche tutte le trame. – user1306322

+0

Quali cose stai cambiando? – SACO

+0

I menu che dispongono di pulsanti che eseguono metodi che eseguono tutti i tipi di meccaniche di gioco, creano una serie di proiettili, eseguono alcune animazioni, modificano le proprietà delle particelle e ciò significa che ho bisogno di vederli, il che significa trame caricate. – user1306322

2

Se si desidera scaricare una ricarica compilato DLL piena di risorse, allora si potrebbe desiderare di guardare domini applicazione. Ad esempio, è possibile scaricare e ricaricare gli assiemi con esso. Ma devi accedere ai loro contenuti tramite un "proxy". Non è possibile scaricare gli assembly direttamente, motivo per cui sono necessari i domini.

L'idea sarebbe quella di caricare un'applicazione master che non si chiude mai. Quindi hai un file Game.dll separato che si carica nel proprio dominio dell'applicazione. Quindi carichi tutte le risorse nell'applicazione principale. Quindi è necessario creare un'interfaccia "proxy" per il gioco per ottenere le risorse, ma dovrebbe essere fattibile.

La cosa buona è che si interrompe la game.dll, la si ricompila, si ricarica l'assembly e si assegnano le risorse ancora caricate.

Un percorso possibile.

+0

Suona come quello che avevo in mente, ma come faccio esattamente? – user1306322

+0

Bene, devi chiedere/rispondere ad un'altra domanda: _Puoi condividere le risorse XNA cross domain tramite proxy_. Se vuoi seguire questa strada devi chiedere prima questo. Non posso aiutarti con quello. –

+0

Penso che * le risorse XNA * rientrino nella categoria * .Net resources *, almeno non penso che ci dovrebbero essere altri problemi con la condivisione delle istanze di 'Texture2D' rispetto a' System.Drawing.Bitmap's. – user1306322

0

perché non utilizzare la pipa denominata WCF?

solo fare l'applicazione come WCF server utilizzando named pip e fornire Set (spriteName stringa, Texture2D texture)

che cambierà le texture ..

Problemi correlati