游戏开发——更新方法和状态模式

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版本实现

策略模式的双胞胎:状态模式

游戏设计模式之三 状态模式有限状态机 & Unity版本实现

生命游戏 Java

设计模式 --- 状态模式