Editor di livelli + Gioco -> Duplicazione del rendering / codice specifico del gioco?


14

Ho letto su come progettare il codice per un gioco. Una cosa che non sono riuscito a capire è: come riesci a scrivere un editor a livello di gioco esterno (non un "editor a livello di gioco") senza "copiare" il codice dal gioco? Ad esempio, potresti dover copiare tutto il codice sui diversi tipi di entità che puoi avere. Dovrai aggiungere il codice di rendering del gioco.

La mia ipotesi è che ciò può essere fatto creando una DLL dalla parte "motore" del gioco. Quindi, condividilo tra il gioco reale e l'editor di livelli.

O c'è un modo migliore / più semplice per farlo?

Risposte:


13

Dovrai separare il tuo codice in progetti separati (nella stessa soluzione). Di solito avresti la seguente configurazione:

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

Per progetti ancora più grandi, potresti voler separare Engine Core su più progetti come Core, Physics, Graphics, Audio, Input e Networking. Tutti questi progetti non possono fare riferimento a vicenda, ma fanno tutti riferimento a Core in cui è possibile memorizzare alcuni tipi di base comuni.

Se si riferissero a vicenda, la separazione sarebbe inutile.

Comunque, questo dovrebbe aiutarti a riutilizzare parti del tuo motore in altri progetti. Ad esempio per l'editor dovresti fare riferimento al progetto Graphics che fa riferimento a Core stesso.

Questa separazione significa anche che ora puoi utilizzare le tecnologie Solo Windows, come WPF, nel tuo editor mentre il tuo gioco può ancora scegliere come target Windows e XBLIG.

Per maggiori informazioni sull'uso di XNA all'interno di un ambiente WPF, consultare questo link: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- di-un-WPF-Application.aspx


Grazie! Guardandomi un po 'di più, ho trovato questo - create.msdn.com/en-US/education/catalog/sample/… - Sembra che WinForms sia supportato meglio di WPF!
Utkarsh Sinha,

Ehi, è vero, ma quel campione è del 2008, prima che WPF decollasse davvero. Sono passato da WinForms a WPF un anno fa e non vorrei che il mondo tornasse indietro :). Se vuoi rimanere compatibile con quell'esempio, puoi sempre usare WinFormsControlHost in un'app WPF :).
Roy T.

4

Separare la logica di rendering nel miglior modo possibile dalla logica di gioco reale durante la progettazione del motore di gioco. Un modo per farlo è usare lo schema dei componenti quando si costruisce il motore di gioco. Ad esempio, XNA utilizza questo modello a livello di framework per flessibilità. Usa la stessa base di codice per il rendering con il tuo editor di livelli; scrivere involucri se è necessario.

Allo stesso modo, un altro modello piuttosto popolare è MVC (Model-View-Controller) che potrebbe anche aiutare. Codifica il tuo motore usando MVC normalmente. È quindi possibile utilizzare lo stesso codice per Visualizza e Modello, ma iniettare un Controller personalizzato per modificare il Modello per l'editor di livelli anziché il Controller del motore di gioco che si aggiorna in base all'input del gioco. Implementa la serializzazione per i modelli di gioco per caricarli / salvarli dall'editor o dal gioco.

Mantenere i componenti in assiemi separati incoraggerà ovviamente la separazione ...

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.