La forma en que me he estado acercando a esto es tener una capa de visualización que no sabe nada sobre el mundo del juego en sí. su único trabajo es recibir una lista ordenada de objetos para dibujar en la pantalla que encajen en un formato uniforme para un objeto gráfico. así, por ejemplo, si se trata de un juego en 2D, la capa de visualización recibirá una lista de imágenes junto con su factor de escala, opacidad, rotación, volteo y textura de origen, y cualquier otro atributo que pueda tener un objeto de visualización. La vista también puede ser responsable de recibir interacciones de mouse de alto nivel con estos objetos mostrados y distribuirlos en algún lugar apropiado. Pero es importante que la capa de vista no sepa nada de lo que está mostrando. Solo que es una especie de cuadrado con un área de superficie y algunos atributos.
Luego, la siguiente capa hacia abajo es un programa cuyo trabajo es simplemente generar una lista de estos objetos en orden.Es útil si cada objeto en la lista tiene algún tipo de ID único, ya que hace posibles ciertas estrategias de optimización en la capa de visualización. Generar una lista de objetos de visualización es una tarea mucho menos desalentadora que tratar de descubrir para cada tipo de personaje cómo se renderizará físicamente.
La clasificación Z es bastante simple. El código de generación de objetos de visualización solo necesita generar la lista en el orden que desee, y puede usar cualquier medio que necesite para llegar allí.
En nuestro programa de lista de objetos de visualización, cada carácter, prop y NPC tiene dos partes: un asistente de base de datos de recursos y una instancia de carácter. El asistente de la base de datos presenta para cada personaje una interfaz simple desde la que cada personaje puede obtener cualquier imagen/estadística/animación/disposición, etc. que el personaje necesite. Probablemente desees encontrar una interfaz bastante uniforme para buscar los datos, pero va a variar un poco de un objeto a otro. Un árbol o una roca no necesita tantas cosas como un NPC totalmente animado, por ejemplo.
Luego necesita alguna forma de generar una instancia para cada tipo de objeto. Puede implementar esta dicotomía utilizando los sistemas de clase/instancia integrados de su idioma, o según sus necesidades, es posible que deba trabajar un poco más allá de eso. por ejemplo, que cada base de datos de recursos sea una instancia de una clase de base de datos de recursos, y que cada instancia de caracteres sea una instancia de una clase de "caracteres". Esto le ahorra escribir un trozo de código para cada pequeño objeto en el sistema. De esta forma, solo necesita escribir código para categorías amplias de objetos, y solo cambia pequeñas cosas como la fila de una base de datos para buscar imágenes.
Entonces, no se olvide de tener un objeto interno que represente su cámara. Luego, es tarea de su cámara preguntar a cada personaje dónde están en relación con la cámara. Básicamente, está repasando cada instancia de personaje y preguntando por su objeto de visualización. "¿Cómo te ves y dónde estás?"
Cada instancia de personaje, a su vez, tiene su propio pequeño asistente de base de datos de recursos para consultar. Así que cada instancia de personaje tiene a su disposición toda la información que necesita para decirle a la cámara lo que necesita saber.
Esto te deja con un conjunto de instancias de personajes en un mundo que es más o menos ajeno a los detalles de cómo se van a mostrar en una pantalla física, y más o menos ajeno a la esencia de cómo buscar datos de imagen del disco duro. Esto es bueno, te deja con la pizarra lo más limpia posible para una especie de mundo platónico "puro" de personajes en el que puedes implementar tu lógica de juego sin preocuparte por cosas como caerse del borde de la pantalla. Piensa en qué tipo de interfaz te gustaría si pusieras un lenguaje de scripting en tu motor de juego. Lo más simple posible ¿no? Tan arraigados en un mundo simulado como sea posible, sin preocuparse por los pequeños detalles técnicos de implementación ¿no? Eso es lo que esta estrategia te permite hacer.
Además, la separación de preocupaciones le permite cambiar la capa de visualización con la tecnología que desee: Open GL, DirectX, software de renderizado, Adobe Flash, Nintendo DS, lo que sea- Sin tener que preocuparse demasiado con las otras capas .
Además, puedes cambiar la capa de la base de datos para hacer cosas como reskinar todos los personajes- o dependiendo de cómo lo construyas, cambiar un juego completamente nuevo con nuevo contenido que reutilice la mayor parte de las interacciones de los personajes/código de detección de colisión/buscador de ruta que escribió en la capa intermedia.
también puede verificar cómo está estructurado un motor 3D, p. este: http://www.ogre3d.org/docs/manual/manual_4.html#SEC4 – galambalazs