Как управлять данными отображения объекта и логическими данными? - PullRequest
0 голосов
/ 06 июля 2011

Каков хороший способ хранения отображаемых данных объекта и логических данных объекта? Сущности должны идти на отдельных слоях (например, фоновые объекты идут за передним планом или чтобы враги всегда отображались под пулями и т. Д.). Проблема в том, как вы управляете этими списками?

Это кажется логичным решением?

У меня есть объект World. Объект World хранит список всех сущностей. Чтобы создать новую сущность, вы идете world.createEntity(type), и когда создается новая сущность, мир запускает функцию entityCreatedCallback, которая уведомляет всех слушателей о том, что была создана новая сущность. В моем классе PlayGameState я присоединяю слушателя к миру, чтобы слушать, и когда создается новая сущность, я добавляю эту сущность в соответствующий слой отображения для рисования позже.

Затем во время игрового цикла я каскадирую так:

allScreens.update() -> world.update() -> allEntities.update()

allScreens.draw() -> playGameScreen.draw() -> allLayers.draw()

Это кажется разумным?

1 Ответ

0 голосов
/ 06 июля 2011

Вы говорите о 2D-игре, верно?

Мне нравится ваша архитектура, потому что она разделяет создание сущностей с их инициализацией и использованием.Я думаю, что он чистый и расширяемый.

В игре, которую я написал, у меня был похожий подход, но мой движок рендеринга упростил для меня и поддержал DisplayGroups, который автоматически отображал объекты в правильном порядке.Я не знаю, какую технологию вы используете, но, вообще говоря, если вы используете аппаратный рендеринг с OpenGL / DirectX, вы можете использовать значения Z для достижения эффекта (буквально поместите фоновые объекты позади ).

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

HTH

...