Я опытный разработчик, плохо знакомый с разработкой игр, и я сделал достаточно простую, но работающую 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
- кто победит?
Мне не нужны ответы на конкретные вопросы о реализации / языке, но даны советы о том, как правильно мыслить архитектурно.