2017-02-11 59 views
1

对于我的游戏,我使用状态模式来处理我的屏幕。屏幕需要更新和渲染每一帧。游戏循环在Game类中。游戏开发 - 更新方法和状态模式

但我也需要在实体类中的更新和渲染方法。我应该在屏幕和实体类(例如FrameProcess)中使用接口吗?或者我可以像这样离开它(见图)?

面向对象的最佳实践是什么?这有什么模式吗?

这个问题的基本UML:

enter image description here

+0

其用法示例(或多个)以非常明确的方式,如果得到的实体会发生什么,你从屏幕递给你的游戏对象,而不是GameScreen实体或MenuScreen? –

+0

是的,有一种状态机的模式,我甚至为此提供了一个抽象[framework](http://makulik.github.io/sttcl/)。 –

+0

@DanielT。我想在我的游戏中拥有不同的屏幕。标题屏幕,菜单屏幕和游戏屏幕。而在我的GameScreen中,我将拥有包含玩家,敌人等实体的关卡。 – Liddelfranks

回答

1

我会为Entity类中的update()render()方法创建纯虚函数,并让从它继承的类定义它们自己的行为,这将允许系统以多态方式行为。然后在Game类或一些其他类型的处理程序类调用update()draw()方法基于系统的当前状态,使用状态模式决定它。

顺便说一句,它告诉更多的国家模式,在http://gameprogrammingpatterns.com/state.html

1

这取决于你所说的 “实体” 在这方面的意思。如果一个实体覆盖可呈现和可更新的所有内容,为两者创建一个虚拟函数都可以(如果您计划派生其他类型的实体,如车辆或武器)。如果你有除Entity以外的其他可渲染和可更新的类型,在我看来,一个界面会是更好的选择。

您可能还有更好的选择https://gamedev.stackexchange.com/以获取更多Q & A关于gamedev。

+0

实体是抽象的,因此必须已经可以推导出来。 –