У меня есть несколько книг по шаблонам проектирования, и я прочитал несколько статей, но не могу интуитивно понять, какие шаблоны проектирования программирования будут полезны при разработке игр.
Например, у меня есть книга под названием ActionScript 3 с шаблонами проектирования, в которой подробно описаны некоторые шаблоны проектирования, такие как Model View Controller, Singleton, Factory, Command и т. Д.
Как кто-то новичок в этом, я не могу понять, какой из них будет полезен, или на самом деле, если какой-то из этих шаблонов дизайна я должен изучать и пытаться использовать. Возможно, есть другие, более специфичные для игрового программирования шаблоны проектирования, о которых я даже не подозреваю?
Если у вас есть опыт использования определенного шаблона проектирования в разработке игр, я бы хотел это услышать. Рассуждение о том, почему оно использовалось, примеры кода или онлайн-ресурсы также будут очень полезны, если они у вас есть. В данный момент меня больше всего интересуют реализации ActionScript 3 и C ++, но я определенно могу извлечь пользу из опыта и примеров из любого языка.
Спасибо!
Ответы:
Теперь для менее легкомысленного ответа, с некоторыми предложениями. Не принимайте их как рекомендации по реализации, а скорее как примеры возможного использования.
Некоторые модели не учтены из-за недостатка вдохновения.
источник
Я написал книгу именно на эту тему: шаблоны программирования игр . Главы, которые там есть, могут быть полезны для вас.
источник
Брэндон Айх хорошо понимал, что паттерны в Coders at Work - это хаки и обходные пути: [паттерны] показывают какой-то дефект в языке. Эти шаблоны не являются бесплатными. Там нет бесплатного обеда. Таким образом, мы должны искать эволюцию в языке, который добавляет правильные моменты.
Как программисты игр, а не дизайнеры компиляторов, мы редко получаем возможность развивать языки, которые мы используем, но мы можем научиться развивать наш собственный стиль, чтобы лучше соответствовать нашему языку и требованиям. Шаблоны - это часть этого, но не использование шаблонов - это еще одна часть, тем более что, как говорит Брэндон, шаблоны редко обходятся без заметной производительности, затрат памяти или гибкости кода. MVC просто не подходит для многих вещей в играх. Singleton - это обходной путь для слабых правил статической инициализации C ++, и вам, вероятно, не следует делать это в любом случае. Фабрика упрощает создание сложных объектов - возможно, ваши объекты должны быть проще для начала. Популярные шаблоны - это инструменты, к которым нужно прибегать, когда они нам нужны. чтобы управлять чем-то сложным, а не инструментами, которые мы должны стремиться использовать для создания чего-то сложного в начале.
Хороший (игровой) код может использовать шаблоны или нет. Если он использует шаблоны, хорошо - они являются отличным средством коммуникации, чтобы объяснить структуру кода другим программистам на высоком, независимом от языка уровне. Если вы думаете, что код лучше без использования паттерна, не мучайтесь из-за него - возможно, так оно и есть.
источник
Конечно, как уже говорили другие, все шаблоны полезны при правильных обстоятельствах, и часть обучения тому, как их использовать, - это изучение того, когда их использовать. Тем не менее, в превосходной книге Даниэля Санчеса-Креспо Далмау « Базовые методы и алгоритмы в игровом программировании » перечислены шесть шаблонов программирования и шесть шаблонов удобства использования, которые особенно полезны в программировании игр.
Программирование:
Удобство использования:
Книга, конечно, более подробно описывает каждый из них.
источник
Системы сущностей - хороший вид паттерна. Это не совсем шаблон дизайна, так как это не странно ООП. Однако вы можете смешать его с ООП.
Несколько хороших ссылок (начните с начала для вступления):
источник
OOP design patterns
которые обычно показывают отношения и взаимодействия между классами / объектами. И есть много других шаблонов дизайна. ООП - это набор концепций, а не шаблон.Design pattern
это тоже концепцияВсе они. Кроме Синглтона. [/ Легкомыслие]
источник
Не совсем о шаблонах, но об основных принципах, лежащих в их основе. В «Шаблонах проектирования: элементы многоразового объектно-ориентированного программного обеспечения» (1995) банда из четырех человек (Гамма, Эрих; Ричард Хелм, Ральф Джонсон и Джон Влиссидес) рекомендует только два принципа для объектно-ориентированного проектирования: (1) программа для интерфейс, а не реализации, и (2) предпочитают композицию объектов наследованию классов.
Эти 2 принципа очень полезны во многих задачах разработки игр. Например, многие программисты игр использовали глубокую иерархию классов для представления игровых сущностей. Существует еще один подход, основанный на композиции - компонентные игровые объекты. Статья об этом подходе. Еще больше ссылок . Это пример шаблона Decorator .
источник
Любопытно повторяющаяся картина шаблона может быть очень полезной для предотвращения виртуальных методов и потери производительности , которые могут исходить от вызовов виртуальных функций.
Это может быть подходящим шаблоном, когда вам на самом деле не нужно иметь контейнер типа базового класса, который имеет интерфейс, который вам нужен, но вы хотели бы иметь поведения и интерфейсы с аналогичными именами.
Например, вы можете использовать это при компиляции классов для нескольких платформ или механизмов (dx против opengl), где дисперсия типа известна во время компиляции.
источник
Шаблон дизайна, который я развивал в течение многих лет и который был чрезвычайно полезен для меня, - это то, что я называю «набором определений при посредничестве»; то, как его обобщить в терминах GOF, кажется спорным, но этот вопрос, который я написал об этом в StackOverflow, подробно расскажет об этом.
Основная идея заключается в том, что некоторое свойство модели, например вид существа, устанавливается таким образом, чтобы каждое возможное значение свойства имело соответствующий объект определения - один общий объект на значение - который определяет его поведение, и доступ к ним осуществляется через центрального брокера (который, GOF, может быть реестром, фабрикой или обоими). В моем использовании они также обычно доступны через скалярные ключи, чтобы облегчить слабое связывание для целей морфизма во время выполнения.
источник