J'ai quelques livres sur les modèles de conception et j'ai lu quelques articles, mais je ne peux pas comprendre intuitivement quels modèles de conception pourraient être utiles au développement de jeux.
Par exemple, j'ai un livre appelé ActionScript 3 avec des modèles de conception qui détaille plusieurs modèles de conception tels que le contrôleur de vue, Singleton, Factory, Command, etc.
En tant que débutant dans ce domaine, je ne sais pas lequel de ces éléments serait utile ou, en fait, si l'un d'entre eux correspond aux modèles de conception que je devrais apprendre et essayer d'utiliser. Peut-être y a-t-il d'autres modèles, plus spécifiques à la programmation de jeux, dont je ne suis même pas au courant?
Si vous avez déjà utilisé un certain modèle de conception dans le développement de jeux, j'aimerais l'entendre. Raisonner sur l'utilisation, des exemples de code ou des ressources en ligne serait également très utile si vous en avez. Je suis actuellement très intéressé par les implémentations d'ActionScript 3 et C ++, mais je pourrais certainement bénéficier de l'expérience et des exemples de tous les langages.
Merci!
Réponses:
Passons maintenant à une réponse moins désinvolte, avec quelques suggestions. Ne les prenez pas comme des recommandations de mise en œuvre, mais plutôt comme des exemples d’utilisation possible.
Certains motifs ont été omis par manque d'inspiration.
la source
J'ai écrit un livre sur exactement ce sujet: Pattern Programming Programms . Les chapitres qui y figurent pourraient vous être utiles.
la source
Brandon Eich a eu le bon sens de faire remarquer dans Coders at Work que les motifs sont des piratages et des solutions de contournement: [Les motifs] montrent une sorte de défaut dans le langage. Ces modèles ne sont pas gratuits. Il n'y a pas de repas gratuit. Nous devrions donc rechercher une évolution dans le langage qui ajoute les bons éléments.
En tant que programmeurs de jeux plutôt que de concepteurs de compilateurs, nous avons rarement la possibilité de faire évoluer les langages que nous utilisons, mais nous pouvons apprendre à faire évoluer notre propre style pour mieux correspondre à notre langage et à nos exigences. Les motifs en font partie, mais ne pas utiliser de motifs en est un autre, d'autant plus que, comme le dit Brandon, les motifs sont rarement dépourvus de performances notables, de coûts en mémoire ou en agilité de code. MVC n'est tout simplement pas un bon modèle pour beaucoup de choses dans les jeux. Singleton est une solution de contournement pour les règles d'initialisation statiques C ++ boiteux, et vous ne devriez probablement pas les faire de toute façon. Factory simplifie la création d’objets compliqués - peut-être que vos objets devraient être plus simples au début. Les modèles populaires sont des outils à utiliser lorsque nous en avons besoin pour gérer quelque chose de complexe, pas les outils que nous devrions avoir envie d'utiliser pour construire quelque chose de complexe au début.
Un bon code (de jeu) peut utiliser des modèles, ou non. Si cela utilise des modèles, très bien - ils sont un excellent outil de communication pour expliquer la structure de code aux autres programmeurs à un niveau élevé, indépendant du langage. Si vous pensez que le code est meilleur sans utiliser de modèle, ne vous en faites pas, il l'est probablement.
la source
Bien sûr, comme d’autres l’ont dit, tous les modèles sont utiles dans les bonnes circonstances, et une partie de l’apprentissage de leur utilisation consiste à savoir quand les utiliser. Cependant, l'excellent livre intitulé Techniques et algorithmes de base dans la programmation de jeux de Daniel Sanchez-Crespo Dalmau répertorie six modèles de programmation et six modèles d'utilisation particulièrement utiles dans la programmation de jeux.
Programmation:
Convivialité:
Le livre, bien sûr, va plus en détail sur chacun d'eux.
la source
Les systèmes d'entités sont un bon modèle. Ce n'est pas exactement un modèle de conception, car il ne s'agit pas de la programmation orientée objet. Cependant, vous pouvez le mélanger avec la POO.
Quelques bons liens (commencez par le haut pour l'intro):
la source
OOP design patterns
qui montrent généralement les relations et les interactions entre les classes / objets. Et il y a beaucoup d'autres modèles de conception. La POO est un ensemble de concepts, pas un modèle en réalité.Design pattern
est un concept aussi.Tous. Sauf Singleton. [/légèreté]
la source
Pas vraiment sur les motifs, mais sur les principes de base derrière eux. Dans "Design Patterns: Elements de logiciel orienté objet réutilisable" (1995) , la bande des quatre (Gamma, Erich, Richard Helm, Ralph Johnson, et John Vlissides) recommande que deux principes de conception orientée objet: (1) programme une interface et non à une implémentation et (2) privilégient la composition d'objets par rapport à l'héritage de classe.
Ces 2 principes sont très utiles dans de nombreuses tâches de développement de jeux. Par exemple, de nombreux programmeurs de jeux ont utilisé une hiérarchie de classes profonde pour représenter les entités de jeu. Il existe une autre approche basée sur la composition : les objets de jeu basés sur des composants. Article sur cette approche. Encore plus de liens . C'est un exemple de motif de décorateur .
la source
Le modèle de modèle curieusement récurrent peut s'avérer très utile pour éviter les méthodes virtuelles et les inconvénients en termes de performances pouvant découler des appels de fonctions virtuelles.
Cela peut être le modèle approprié lorsque vous n'avez pas réellement besoin d'un conteneur du type classe avec l'interface que vous recherchez, mais que vous aimeriez que les comportements et les interfaces portent le même nom.
Par exemple, vous pouvez l'utiliser lors de la compilation de classes pour plusieurs plates-formes ou moteurs (dx ou opengl) où la variance de type est connue au moment de la compilation.
la source
Un modèle de conception que j'ai développé au cours de nombreuses années et qui m'a été spectaculairement utile est ce que je nomme des "ensembles de définitions négociés"; comment le résumer en termes GOF semble être controversé, mais la question que j'ai écrite à ce sujet sur StackOverflow donne quelques détails à ce sujet.
Le concept de base est que certaines propriétés d’un modèle, comme l’espèce d’une créature, sont configurées de manière à ce que chaque valeur possible de la propriété ait un objet de définition correspondant - un seul objet partagé par valeur - qui spécifie son comportement. et ceux-ci sont accessibles via un courtier central (qui, pour GOF, peut être un registre, une usine ou les deux). Dans mon utilisation, ils sont également généralement accessibles via des clés scalaires, afin de faciliter la liaison faible à des fins de morphisme d'exécution.
la source