Level Editor + Game -> ¿Duplicar renderizado / código específico del juego?

14

He estado leyendo sobre cómo diseñar código para un juego. Una cosa que no he podido entender es: ¿cómo se las arregla para escribir un editor de nivel externo (no un "editor de nivel interno") sin "copiar" el código del juego? Por ejemplo, es posible que deba copiar todo el código sobre los diferentes tipos de entidades que puede tener. Tendrás que agregar el código de representación del juego.

Supongo que esto se puede hacer haciendo una DLL fuera de la parte 'motor' del juego. Luego, compártelo entre el juego real y el editor de niveles.

¿O hay una manera mejor / más fácil de hacer esto?

Utkarsh Sinha
fuente

Respuestas:

13

Deberá separar su código en proyectos separados (en la misma solución). Por lo general, tendría la siguiente configuración:

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

Para proyectos aún más grandes, es posible que desee separar Engine Core en varios proyectos como Core, Física, Gráficos, Audio, Entrada y Redes. Todos estos proyectos no pueden referenciarse entre sí, pero todos hacen referencia a Core, donde puede almacenar algunos tipos básicos comunes.

Si se hicieran referencia mutuamente, la separación sería inútil.

De todos modos, esto debería ayudarlo a reutilizar partes de su motor en otros proyectos. Por ejemplo, para el editor, debe hacer referencia al proyecto de gráficos que hace referencia al núcleo mismo.

Esta separación también significa que ahora puede usar tecnologías de Windows Only, como WPF, en su editor, mientras que su juego aún puede apuntar a Windows y XBLIG.

Para obtener más información sobre el uso de XNA dentro de un entorno WPF, consulte este enlace: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- of-a-wpf-application.aspx

Roy T.
fuente
¡Gracias! Un poco más mirando alrededor y encontré esto: create.msdn.com/en-US/education/catalog/sample/… - ¡Parece que WinForms es mejor que WPF!
Utkarsh Sinha
Hola, eso es cierto, pero esa muestra es de 2008, antes de que WPF realmente despegara. Me cambié de WinForms a WPF hace un año y no volvería para el mundo :). Si desea seguir siendo compatible con esa muestra, siempre puede usar WinFormsControlHost en una aplicación WPF :).
Roy T.
4

Separe la lógica de renderizado lo mejor que pueda de la lógica real del juego al diseñar su motor de juego. Una forma de hacerlo es usar el patrón Componente al construir el motor del juego. Por ejemplo, XNA usa este patrón a nivel de marco para flexibilidad. Use la misma base de código para renderizar con su editor de niveles; escribe envoltorios si es necesario.

Del mismo modo, otro patrón algo popular es MVC (Modelo-Vista-Controlador) que también podría ayudar. Codifique su motor usando MVC normalmente. Luego puede usar el mismo código para Ver y Modelo, pero inyectar un Controlador personalizado para editar el Modelo para su editor de niveles en lugar del Controlador del motor del juego que se actualiza de acuerdo con la entrada del juego. Implemente la serialización de modelos de juegos para cargarlos / guardarlos desde el editor o el juego.

Por supuesto, mantener los componentes en conjuntos separados fomentará la separación ...

XiaoChuan Yu
fuente