Ant*_*n B 8 language-agnostic architecture design-patterns state-machine
我是一名经验丰富的游戏开发开发人员,我制作了一个相当简单但工作正常的3D平台游戏,并且正在寻找使架构更具可扩展性的方法.
在游戏开发中处理状态的好方法是什么?
一个非常天真的方法是有多个布尔值,如:
time_stopped = True
time_slow_motion = False
level_loaded = True
level_paused = True
level_completed = False
Run Code Online (Sandbox Code Playgroud)
这是非常不灵活,因为开发人员的错误可能会导致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
Run Code Online (Sandbox Code Playgroud)
但是我如何以一种好的方式处理多组国家?我可以创建一个LevelState其中有LOADED,PAUSED和COMPLETED状态.但是,如何处理重叠组,比如何时LevelState和TimeState PAUSED应该始终相同?如何解决国家管理是否有良好的设计模式或良好实践?
处理状态变化的好方法是什么?
我的想法是要么给出状态对象,例如.LevelState回调函数在任何给定的状态更改时执行 - 或者在每个游戏循环中轮询状态对象if level_state.changedTo() == LevelState.COMPLETED: doStuff().有没有更好的方法来处理这个?消息队列/事件?我不想将逻辑嵌入到状态对象中.
我也有兴趣在如果要同时处理changedFrom和changedTo活动,如果逻辑通过触发会发生什么changedFrom变化前的对象的状态changedTo逻辑被触发-谁赢了?
我不希望实现/语言特定的答案,但提示一个好的方式来思考架构明智.
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |