¿Cuál es la mejor manera de separar el código de representación del código del motor/lógica del juego? ¿Y es incluso una buena idea separarlos?Separación de lógica de juego y representación
Supongamos que tenemos un objeto de juego llamado Knight. El Knight tiene que mostrarse en la pantalla para que el usuario lo vea. Ahora nos quedan dos opciones. O le damos al Knight un método Render/Draw
al que podemos llamar, o creamos una clase de renderizador que se encarga de representar a todos los caballeros.
En el escenario en el que los dos están separados, el Caballero debería el Caballero aún contener toda la información necesaria para representarlo, ¿o debería separarse también?
En el último proyecto que creamos, decidimos dejar toda la información necesaria para representar un objeto dentro del objeto, pero teníamos un componente separado para leer esa información y representar los objetos. El objeto contendría información tal como el tamaño, la rotación, la escala y qué animación se estaba reproduciendo en ese momento y, en base a esto, el objeto del procesador debería componer la pantalla.
Frameworks como XNA parecen pensar que unir el objeto y renderizar es una buena idea, pero tememos estar atados a un marco de renderizado específico, mientras que construir un componente de renderización separado nos da más libertad para cambiar el marco en en cualquier momento.
Ignorar las implementaciones de XNA. Por mucho que me guste, la forma "predeterminada" de ver ejemplos en la web y en los libros es horrible. Cada objeto conoce la clase base del juego y, a su vez, todo sabe cómo dibujar, etc. Esto no está bien. La solución de Thomas es ideal y lo que mucha gente hace. – Finglas