¿Diseño de nivel en el juego con XNA?


10

Me pregunto sobre el diseño de nivel en el juego. Mi situación actual gira en torno a Tiled: tengo muchas capas diferentes con diferentes tipos de objetos (para cualquiera que no esté familiarizado con Tiled, un objeto no es más que una coordenada con propiedades arbitrarias asignadas a él).

Actualmente estoy volviendo a compilar el juego cada vez que hago un pequeño cambio en mi archivo de mapa para ver si todo está colocado correctamente. ¿Hay alguna manera de que mi juego vuelva a cargar automáticamente el nivel si se detecta un cambio en el archivo del mapa? ¿XNA incluso permite esto, o la forma en que funciona la canalización de contenido no permite el contenido dinámico de esa manera? Cualquier sugerencia o sugerencia es absolutamente bienvenida.

Respuestas:


8

Supongo que sus archivos de mapa se procesan a través de Content Pipeline y luego se cargan en tiempo de ejecución con Content.Load. Tienes dos opciones:

  • Guarde sus mapas como un archivo XML, a través de IntermediateSerializer.Serialize. Luego, en tiempo de ejecución, puede leerlos con IntermediateSerializer.Deserialize para ver los cambios.
  • Este es más difícil: llamar a MSBuild en tiempo de ejecución para recompilar sus archivos en XNB adecuados y volver a cargarlos con ContentManager. Esta muestra hace eso.

Entre los dos, estoy seguro de que podré resolver algo. ¡Gracias!
Christopher Horenstein

2

También podría usar Karvonite si desea obtener esto y ponerlo en marcha muy rápido.

Es un marco de persistencia ágil. No estoy seguro de si la nueva versión funcionará en Windows Phone 7 o Xbox.

Crearía una definición de persistencia con su editor de persistencia (es bastante fácil, solo importa el ensamblaje y verifica los campos / propiedades en las clases / estructuras que desea persistir) Inicia un ObjectSpace en el código y agrega / elimina / obtiene objetos de él . (estos objetos son persistentes)

Si pudieras crear una abstracción para que el motor de mosaico o como se llame no le importe exactamente cómo obtiene el mapa, solo que obtiene el que solicitó. Luego puede regresar y usar el XmlSerializer o el Intermedio. (lo que prefiera) Todo lo que tendría que hacer para implementar esos otros serializadores es crear otra implementación de la abstracción (una interfaz o clase abstracta).

Creo que hay un ejemplo de cómo crear contenido en tiempo de ejecución en el sitio web del club de creadores de XNA. Sin embargo, podría no estar construido con el último marco. De esa manera, podría mantener su código anterior si ya usa la canalización de contenido. Aquí está el enlace: Winform Series 2: carga de contenido


Me siento un poco tonto preguntando esto, pero ¿puedes describir cómo imaginas el flujo de trabajo utilizando este marco? Suena muy bien, pero no estoy seguro de cómo abordarlo.
Christopher Horenstein el

1
Bueno, usted define la serialización en su editor de persistencia. (es realmente fácil, solo importa el ensamblaje de objetos y marca algunas casillas en las estructuras / clases y los campos / propiedades que desea que persistan) Una vez que haya hecho eso, puede inicializar un espacio de objetos que serializará / deserializará sus objetos . Es bastante ordenado y rápido para ponerse en marcha.
Michael Coleman

1
También puede ver este proyecto en codeplex para obtener un mejor ejemplo de cómo crear contenido fuera de Visual Studio. ( xnadevru.codeplex.com/… )
Michael Coleman
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.