Gano mi dinero en C # Generalmente en ese lenguaje me gusta desacoplar todo a los cielos usando interfaces. Esto me ha servido bien en el código de la empresa, pero al escribir juegos en C # me encuentro con tendencia a la herencia debido a la capacidad de definir algunos comportamientos predeterminados para las clases base. Sin embargo, me siento sucio haciendo esto, como si estuviera desobedeciendo a un dios de la arquitectura que una vez dijo "favorecer la composición sobre la herencia". Sé que no es en blanco y negro, pero también siento que podría usar interfaces con un poco más de trabajo y lograr aproximadamente lo mismo.
¿Qué hacen otras personas? ¿Es la herencia el enfoque correcto para los juegos o debería refactorizar en algunas interfaces?
fuente
Respuestas:
La herencia en los juegos es en realidad una de las peores cosas que puedes hacer, en particular con respecto a las entidades. Lea esto por qué. La composición sobre la herencia te lleva muy lejos con los juegos. En cuanto a otras áreas de su motor, realmente no importa. Digamos, por ejemplo, que está llamando a algún tipo de servicio de red externo, luego puede heredar un servicio de tipo genérico, por ejemplo. HTTPService y SocketService, tanto como en las aplicaciones empresariales a las que está acostumbrado.
A menos que su juego es muy simple, que se desea utilizar una entidad arquitectura basada en componentes (CBE). La idea general es que con las entidades, la razón por la que se componen tan comúnmente en lugar de heredarse es porque no se puede saber hasta el tiempo de ejecución qué capacidades tendrá una entidad determinada. Por ejemplo, toma la nave del jugador en un tirador espacial. No sabes hasta algún momento durante el juego, qué armas, armaduras, sistemas (es decir, componentes) que el jugador va a recoger, comprar, vender, perder, haber destruido, etc. Así que la única forma realista de modelar esto es a través de la composición de objetos. El lado positivo de este escenario es que también puedes tener enemigos totalmente personalizables, construidos de la misma manera, en lugar de enemigos que siempre son exactamente iguales cada vez que ves ese tipo de enemigo. Entonces, con CBE, es posible que vea un Carguero marciano y piense: "Ah, solo tiene láseres pequeños, lo desmontaré", y generalmente eso sería cierto, pero cuando se pone al alcance de repente, se da cuenta de que tiene un gran culo pistola de agujero de gusano. ¡Sorpresa sorpresa!
La componente es eliminar el acoplamiento implícito de la lógica, y eso es BUENO.
fuente
Para quienes hablan alemán, un libro interesante: http://www.amazon.com/Architektur-Kerns-einer-Game-Engine-Implementierung/dp/3639324471/ref=sr_1_1?ie=UTF8&qid=1314875533&sr=8-1
Una mirada más cercana sobre cuándo y por qué usar qué arquitectura se puede encontrar aquí: /programming/1901251/component-based-game-engine-design
Por mí mismo, decido mi arquitectura dependiendo del tamaño del proyecto y la posibilidad de extender o reutilizar el código. ¿Por qué invertir horas y horas en la arquitectura de un microproyecto donde no hay posibilidad de que vuelva a usar el código? Al mismo tiempo, puede finalizar el proyecto.
Composición vs Componentes Los componentes son cosas geniales, pero en la mayoría de los proyectos / arquitecturas, la composición también lo hará (sin gastos generales basados en componentes). Depende de lo que su sistema de componentes pueda proporcionar que la composición no pueda.
todo eso fue posible sin componentes hace mucho tiempo también
fuente