Éditeur de niveau + jeu -> Duplication du code spécifique rendu / jeu?

14

J'ai lu comment concevoir du code pour un jeu. Une chose que je n'ai pas pu comprendre est - comment gérez-vous l'écriture d'un éditeur de niveau extérieur au jeu (pas un «éditeur de niveau en jeu») sans «copier» le code du jeu? Par exemple, vous devrez peut-être copier tout le code sur les différents types d'entités que vous pouvez avoir. Vous devrez ajouter le code de rendu du jeu.

Je suppose que cela peut être fait en créant une DLL à partir de la partie «moteur» du jeu. Ensuite, partagez-le entre le jeu réel et l'éditeur de niveau.

Ou existe-t-il un moyen meilleur / plus facile de le faire?

Utkarsh Sinha
la source

Réponses:

13

Vous devrez séparer votre code en projets distincts (dans la même solution). Habituellement, vous auriez la configuration suivante:

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

Pour des projets encore plus grands, vous souhaiterez peut-être séparer le noyau du moteur sur plusieurs projets tels que le noyau, la physique, les graphiques, l'audio, l'entrée et la mise en réseau. Tous ces projets ne peuvent pas se référencer, mais ils font tous référence à Core où vous pouvez stocker certains types de base courants.

S'ils se référaient, la séparation serait inutile.

Quoi qu'il en soit, cela devrait vous aider à réutiliser des parties de votre moteur dans d'autres projets. Par exemple, pour l'éditeur, vous devez référencer le projet Graphics qui référence Core lui-même.

Cette séparation signifie également que vous pouvez désormais utiliser les technologies Windows uniquement, comme WPF, dans votre éditeur tandis que votre jeu peut toujours cibler Windows et XBLIG.

Pour plus d'informations sur l'utilisation de XNA dans un environnement WPF, consultez ce lien: http://blogs.msdn.com/b/nicgrave/archive/2010/07/07/25/rendering-with-xna-framework-4-0-inside- of-a-wpf-application.aspx

Roy T.
la source
Merci! Un peu plus en regardant autour et j'ai trouvé cela - create.msdn.com/en-US/education/catalog/sample/… - Il semble que WinForms est mieux supporté que WPF!
Utkarsh Sinha
Hé c'est vrai, mais cet échantillon date de 2008, avant que WPF ne décolle vraiment. Je suis passé de WinForms à WPF il y a un an et je ne reviendrais pas pour le monde :). Si vous souhaitez rester compatible avec cet exemple, vous pouvez toujours utiliser WinFormsControlHost dans une application WPF :).
Roy T.
4

Séparez au mieux la logique de rendu de la logique de jeu réelle lors de la conception de votre moteur de jeu. Une façon de procéder consiste à utiliser Component , vous pouvez modèle de lors de la création de votre moteur de jeu. Par exemple, XNA utilise ce modèle au niveau du framework pour plus de flexibilité. Utilisez la même base de code pour le rendu avec votre éditeur de niveau; écrire des wrappers si nécessaire.

De même, un autre modèle quelque peu populaire est MVC (Model-View-Controller) qui pourrait également aider. Codez votre moteur à l'aide de MVC normalement. Vous pouvez ensuite utiliser le même code pour la vue et le modèle, mais injectez un contrôleur personnalisé pour éditer le modèle de votre éditeur de niveau au lieu du contrôleur du moteur de jeu qui se met à jour en fonction de l'entrée du jeu. Implémentez la sérialisation pour les modèles de jeu pour les charger / les enregistrer depuis l'éditeur ou le jeu.

Garder les composants dans des assemblages séparés encouragera bien sûr la séparation ...

XiaoChuan Yu
la source