Каковы хорошие методы для обработки состояния и изменения состояния в разработке игр? - PullRequest
8 голосов
/ 07 сентября 2011

Я опытный разработчик, плохо знакомый с разработкой игр, и я сделал достаточно простую, но работающую 3D-платформерную игру и ищу способы сделать архитектуру более масштабируемой.

Что такое хороший способ обработки состояния в разработке игр?
Очень наивный подход - иметь несколько логических значений, таких как:

time_stopped = True
time_slow_motion = False
level_loaded = True
level_paused = True
level_completed = False

Это очень негибко, поскольку ошибка разработчика может одновременно привести к time_stopped = True и time_slow_motion = True, что разрушит игровую логику.

Я ищу лучший подход в направлении:

class TimeState:
    STOPPED = 0
    SLOW_MOTION = 1
    NORMAL = 2
    current_state = 0

    def isStopped(self):
        if current_state == self.STOPPED: return True

Но как бы я хорошо справился с несколькими группами состояний? Я мог бы создать LevelState, который имел бы состояния LOADED, PAUSED и COMPLETED. Но как мне обрабатывать перекрывающиеся группы, например, когда LevelState и TimeState PAUSED всегда должны быть одинаковыми? Есть ли хороший шаблон проектирования или хорошая практика о том, как решить управление состоянием?

Какой хороший способ справиться с изменением состояния?
Мои мысли, чтобы либо дать объект состояния, например. LevelState функции обратного вызова для выполнения при любом изменении состояния или для опроса объекта состояния в каждом игровом цикле, например if level_state.changedTo() == LevelState.COMPLETED: doStuff(). Есть ли лучшие способы справиться с этим? Очереди сообщений / события? Я не хочу встраивать логику в объекты состояния.
Меня также интересует, нужно ли обрабатывать события changedFrom и changedTo, и что произойдет, если логика, вызванная changedFrom, изменит состояние объекта до срабатывания логики changedTo - кто победит?

Мне не нужны ответы на конкретные вопросы о реализации / языке, но даны советы о том, как правильно мыслить архитектурно.

1 Ответ

2 голосов
/ 07 сентября 2011

Это настолько распространенная вещь, что есть даже шаблон: Шаблон состояний

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

...