«Лучший» довольно субъективен. Не являясь профессиональным разработчиком игр, я не могу точно ответить на ваш вопрос, но я слышал о компонентных игровых движках и (функциональных) реактивных движках. Есть также возможность использования иерархии сущностей, как описано, например, в «Развивайте свою иерархию» , но, как я видел, это упало в пользу движков на основе компонентов.
Иерархический: используйте наследование для обеспечения функциональности («Развитие вашей иерархии» показывает пример Car
подкласса Vehicle
, который подклассов Moveable
с подклассами Entity
). Как описано выше, проблема состоит в том, чтобы решить, куда следует поместить функциональность: если поместить ее выше в дереве наследования, это обременяет подклассы функциональностью, которая может не использоваться; слишком низко, и вы в конечном итоге дублируете / реорганизуете код, чтобы получить функциональность там, где это необходимо.
На основе компонентов: каждый игровой объект / сущность представляет собой композицию "компонентов", которые предоставляют многократно используемые специфические функции, такие как анимация / движение, реагируют на физику, активируются игроком и т. Д. "На основе компонентов Дизайн игрового движка ", еще один вопрос SO, подробно описывает его и дает ссылки на документы и т. д., которые должны помочь.
(функциональный) реактивный: часто изучается в контексте функциональных языков, таких как Haskell. Насколько я понимаю, центральным понятием являются первоклассные изменяющиеся во времени значения, при этом поведение описывается в терминах этих значений и других строительных блоков, таких как события для представления дискретных событий. «Что такое функционально-реактивное программирование» дает лучшее описание, чем я могу. Я считаю, что привязка данных .NET WPF является примером концепции. Насколько я знаю, это все еще экспериментируется с / исследуется, но статья Википедии по реактивному программированию (не FRP, обратите внимание) ссылается на библиотеки, написанные для Lisp, Python, Java и других языков.