游戏开发——更新方法和状态模式
Posted
技术标签:
【中文标题】游戏开发——更新方法和状态模式【英文标题】:Game development - Update method and State pattern 【发布时间】:2017-02-11 12:34:59 【问题描述】:对于我的游戏,我使用状态模式来处理我的屏幕。屏幕需要更新和渲染每一帧。并且游戏循环在 Game 类中。
但我还需要 Entity 类中的更新和渲染方法。我应该在 Screen 和 Entity 类中使用接口(例如 FrameProcess)吗?或者我可以这样离开(见图)?
OOP 的最佳实践是什么?有什么模式吗?
这个问题的基本UML:
【问题讨论】:
如果从 Screen 派生实体并将您的游戏对象交给实体而不是 GameScreen 或 MenuScreen,您会发生什么? 是的,有一种状态机模式,我什至为此提供了一个摘要 framework。 @DanielT。我想在我的游戏中有不同的屏幕。标题画面、菜单画面和游戏画面。在我的 GameScreen 中,我的游戏关卡中包含玩家、敌人等实体。 【参考方案1】:我将为Entity
类中的update()
和render()
方法创建纯虚函数,并让从它继承的类定义它们自己的行为,这将使系统以多态方式运行。然后在Game
类或其他类型的处理程序类中调用update()
和draw()
方法,根据系统的当前状态使用状态模式来决定它。
顺便说一句,它在http://gameprogrammingpatterns.com/state.html 上以非常清晰的方式详细介绍了状态模式及其示例用法
【讨论】:
【参考方案2】:这取决于您在这种情况下所说的“实体”是什么意思。如果一个实体涵盖了所有可渲染和可更新的内容,那么为两者创建一个虚拟函数就可以了(如果您计划派生其他类型的实体,如车辆或武器)。如果你有实体以外的其他可渲染和可更新类型,我认为接口会是更好的选择。
您最好还是查看https://gamedev.stackexchange.com/ 以了解有关 gamedev 的更多问答。
【讨论】:
以上是关于游戏开发——更新方法和状态模式的主要内容,如果未能解决你的问题,请参考以下文章
游戏设计模式之三 状态模式有限状态机 & Unity版本实现