Design a livello di gioco con XNA?


10

Mi chiedo il design a livello di gioco. La mia situazione attuale ruota attorno a Tiled: ho molti livelli diversi con diversi tipi di oggetti (per chiunque non abbia familiarità con Tiled, un oggetto non è altro che una coordinata con proprietà arbitrarie assegnate ad esso).

Attualmente sto ricompilando il gioco ogni volta che apporto una piccola modifica al mio file della mappa per vedere se tutto è posizionato correttamente. Esiste un modo per consentire al mio gioco di ricaricare automaticamente il livello se viene rilevata una modifica del file della mappa? XNA lo consente, o il modo in cui la pipeline di contenuto funziona non consente il contenuto dinamico in questo modo? Eventuali suggerimenti o suggerimenti sono assolutamente benvenuti.

Risposte:


8

Presumo che i file delle mappe vengano elaborati tramite la pipeline di contenuti e quindi caricati in fase di esecuzione con Content.Load. Hai due opzioni:

  • Salva le tue mappe come file XML, tramite IntermediateSerializer.Serialize. Quindi, in fase di esecuzione, puoi leggerli con IntermediateSerializer.Deserialize per vedere le modifiche.
  • Questo è più difficile: chiamare MSBuild in fase di runtime per ricompilare i file in XNB corretti e ricaricarli con ContentManager. Questo esempio lo fa.

Tra i due, sono sicuro che sarò in grado di risolvere qualcosa. Grazie!
Christopher Horenstein,

2

Puoi anche usare Karvonite se vuoi alzarlo e andare molto veloce.

È un quadro di persistenza agile. Non sono sicuro se la nuova versione funzionerà su Windows Phone 7 o Xbox.

Dovresti creare una definizione di persistenza con il loro editor di persistenza (è abbastanza facile, devi solo importare l'assemblaggio e controllare i campi / proprietà sulle classi / strutture che vuoi che persistano) Avvii un ObjectSpace nel codice e aggiungi / rimuovi / ottieni oggetti da esso . (questi oggetti sono persistenti)

Se potessi creare un'astrazione in modo tale che il motore delle tessere o qualunque cosa tu chiami, non importa esattamente come ottiene la mappa, solo che ottiene quello che ha richiesto. Quindi è possibile tornare indietro e utilizzare XmlSerializer o quello intermedio. (qualunque preferiate) Tutto ciò che dovreste fare per implementare quegli altri serializzatori è creare un'altra implementazione dell'astrazione (un'interfaccia o una classe astratta).

Penso che ci sia un esempio di come costruire contenuti in fase di esecuzione sul sito Web del club del creatore di XNA. Tuttavia, potrebbe non essere realizzato con il framework più recente. In questo modo è possibile conservare il vecchio codice se si utilizza già la pipeline di contenuti. Ecco il link: Winform Series 2: caricamento dei contenuti


Mi sento un po 'sciocco chiederlo, ma puoi descrivere cosa pensi che sia il flusso di lavoro usando questo framework? Sembra davvero pulito, ma non sono sicuro di come affrontarlo.
Christopher Horenstein,

1
Bene, definisci la serializzazione nel loro editor di persistenza. (è molto semplice, basta importare l'assemblaggio di oggetti e selezionare alcune caselle sulle strutture / classi e sui campi / proprietà che si desidera persistere) Una volta fatto, è possibile inizializzare uno spazio oggetti che serializzerà / deserializzerà gli oggetti . È abbastanza pulito e veloce per iniziare a correre.
Michael Coleman,

1
Puoi anche guardare questo progetto su codeplex per un esempio migliore di come creare contenuti al di fuori di Visual Studio. ( xnadevru.codeplex.com/… )
Michael Coleman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.