Как организовать игровой движок - PullRequest
3 голосов
/ 03 августа 2011

Я работаю над небольшим игровым движком и столкнулся с проблемой.

Пока у меня есть класс окна, который является оболочкой для окна Win32. У меня также есть класс Window Manager (это одноэлементный класс), который управляет созданием окон и обработкой сообщений окон. Затем у меня есть класс двигателя, который до сих пор является самым важным классом, так как это интерфейс для двигателя. Этот класс движка содержит основной цикл и устройство direct3d, а также код для его создания и уничтожения. Этот класс движка также содержит объект класса Window, который действует как главное / главное окно для устройства direct3d.

Моя проблема заключается в том, что движок должен реагировать на некоторые сообщения Windows (например, WM_SIZE или WM_ACTIVATEAPP), но обработчик сообщений является частью класса Widnow, который является «уровнем» ниже класса Engine. Я также думаю, что мне следует создать другой класс для инкапсуляции рендеринга / графики движка, а затем добавить этот класс в основной класс движка.

Так что я не уверен, должен ли я иметь класс Graphics внутри класса Window или класс Window внутри класса Graphics или иметь их рядом в главном классе Engine.

Ответы [ 3 ]

4 голосов
/ 03 августа 2011

Вы живете в мире событий, поэтому используйте события.Сделайте так, чтобы ваш упаковщик окон предоставил события, на которые игровой движок может перехватить и отреагировать.

1 голос
/ 03 августа 2011

У вас когда-нибудь будет несколько Windows? Мультимонитор все шире используется в различных играх.

Будете ли вы когда-нибудь запускать несколько графических объектов в одном окне? Довольно маловероятно. Это говорит о том, что Window должен быть в графике, а не наоборот.

1 голос
/ 03 августа 2011

Не делайте объект, управляющий взаимодействием вашего игрового движка с базовой операционной системой, дочерним по отношению к объекту движка.Уровень ОС должен управлять движком, а не наоборот.

(Между прочим, большинство движков и программистов ошибаются.)

...