Tengo algunos libros sobre Patrones de diseño, y he leído algunos artículos, pero no puedo entender intuitivamente qué patrones de diseño de programación serían útiles en el desarrollo de juegos.
Por ejemplo, tengo un libro llamado ActionScript 3 con patrones de diseño que detalla varios patrones de diseño como Model View Controller, Singleton, Factory, Command, etc.
Como alguien nuevo en esto, no puedo entender cuál de estos sería útil, o de hecho si alguno de estos son los patrones de diseño que debería aprender y tratar de usar. ¿Quizás hay otros patrones de diseño más específicos de programación de juegos que ni siquiera conozco?
Si tienes experiencia usando un cierto patrón de diseño en el desarrollo de juegos, me encantaría escucharlo. Razonar sobre por qué se usó, ejemplos de código o recursos en línea también sería muy útil si los tiene. En este momento estoy más interesado en las implementaciones de ActionScript 3 y C ++, pero definitivamente podría beneficiarme de la experiencia y los ejemplos de cualquier lenguaje.
¡Gracias!
Respuestas:
Ahora para una respuesta menos impertinente, con algunas sugerencias. No los tome como recomendaciones de implementación, más como ejemplos de posible uso.
Algunos patrones quedaron fuera por falta de inspiración.
fuente
Escribí un libro sobre exactamente ese tema: Patrones de programación de juegos . Los capítulos que están allí pueden ser útiles para usted.
fuente
Una cosa que Brandon Eich tuvo el buen sentido de mencionar en Coders at Work es que los patrones son hacks y soluciones alternativas: [los patrones] muestran algún tipo de defecto en el lenguaje. Estos patrones no son gratuitos. No hay almuerzo gratis. Por lo tanto, deberíamos buscar la evolución en el lenguaje que agrega los bits correctos.
Como programadores de juegos en lugar de diseñadores de compiladores, rara vez tenemos la opción de desarrollar los idiomas que usamos, pero podemos aprender a desarrollar nuestro propio estilo para que se adapte mejor a nuestro idioma y requisitos. Los patrones son parte de esto, pero no usar patrones es otra parte, especialmente porque, como dice Brandon, los patrones rara vez pasan sin un rendimiento notable o un costo de memoria o agilidad de código. MVC simplemente no es un gran patrón para muchas cosas en los juegos. Singleton es una solución alternativa para las reglas de inicialización estáticas de C ++, y probablemente no debería hacerlo de todos modos. Factory simplifica la creación de objetos complicados, tal vez tus objetos deberían ser más simples para comenzar. Los patrones populares son herramientas a las que recurrir cuando los necesitamos para administrar algo complejo, no herramientas que deberíamos desear usar para construir algo complejo desde el principio.
Un buen código (de juego) puede usar patrones, o puede que no. Si usa patrones, está bien: son una excelente herramienta de comunicación para explicar la estructura del código a otros programadores en un nivel alto e independiente del lenguaje. Si crees que el código es mejor sin usar un patrón, no te rindas, probablemente lo sea.
fuente
Por supuesto, como han dicho otros, todos los patrones son útiles en las circunstancias correctas, y parte de aprender a usarlos es aprender cuándo usarlos. Sin embargo, el excelente libro Core Techniques and Algorithms in Game Programming de Daniel Sanchez-Crespo Dalmau, enumera seis patrones de programación y seis patrones de usabilidad como especialmente útiles en la programación de juegos.
Programación:
Usabilidad:
El libro, por supuesto, entra en más detalles sobre cada uno de estos.
fuente
Los sistemas de entidades son un buen tipo de patrón. No es exactamente un patrón de diseño, ya que no es llamativamente OOP. Sin embargo, puedes mezclarlo con OOP.
Algunos buenos enlaces (comience desde arriba para la introducción):
fuente
OOP design patterns
que suelen mostrar relaciones e interacciones entre clases / objetos. Y hay muchos otros patrones de diseño. OOP es un conjunto de conceptos, no un patrón realmente.Design pattern
También es un concepto.Todos ellos. Excepto Singleton. [/ligereza]
fuente
No se trata realmente de patrones, sino de principios básicos detrás de ellos. En "Design Patterns: Elementos de software reutilizables orientada a objetos" (1995) , la banda de los cuatro (Gamma, Erich; Richard Helm, Ralph Johnson y John Vlissides) recomienda sólo dos principios para orientado a objetos de diseño: (1) programa para una interfaz y no a una implementación y (2) favorecen la composición de objetos sobre la herencia de clases.
Estos 2 principios son muy útiles en muchas tareas de desarrollo de juegos. Por ejemplo, muchos programadores de juegos han usado una jerarquía de clases profunda para representar entidades de juegos. Existe otro enfoque basado en la composición : los objetos de juego basados en componentes. Artículo sobre este enfoque. Aún más enlaces . Es un ejemplo de patrón Decorador .
fuente
El patrón de plantilla curiosamente recurrente puede ser realmente útil para evitar métodos virtuales y la penalización de rendimiento que puede provenir de las llamadas a funciones virtuales.
Este puede ser el patrón apropiado cuando en realidad no necesita tener un contenedor del tipo de clase base que tenga la interfaz que busca, pero le gustaría tener comportamientos e interfaces con nombres similares.
Por ejemplo, puede usar esto al compilar clases para múltiples plataformas o motores (dx vs. opengl) donde la variación de tipo se conoce en tiempo de compilación.
fuente
Un patrón de diseño que desarrollé a lo largo de muchos años, y que me ha sido espectacularmente útil, es algo a lo que me refiero como "conjuntos de definiciones de intermediación"; cómo resumirlo en términos de GOF parece ser controvertido, pero esta pregunta que escribí al respecto en StackOverflow entra en algunos detalles al respecto.
El concepto central es que alguna propiedad de un modelo, como la especie de una criatura, se configura de modo que cada valor posible para la propiedad tenga un objeto de definición correspondiente, un objeto único y compartido por valor, que especifique su comportamiento, y se accede a ellos a través de un intermediario central (que, según GOF, puede ser un Registro, una Fábrica o ambos). En mi uso, generalmente también se accede a ellos a través de teclas escalares, para facilitar el enlace débil para fines de morfismo en tiempo de ejecución.
fuente