0

我很好奇是否有一个很好的策略来处理在同一个主游戏循环中运行的游戏中的各种游戏类型?换句话说,我有一个包含三种不同游戏类型的游戏。每种类型之间只有一些细微差别,因此它们当前使用相同的循环/类运行。一个是“在时间用完之前你能得到多少个 X”,另一个是“你需要多长时间才能捕捉到 10 个 X”,最后一个是“练习/无限时间”游戏类型。现在我的策略是运行 if, then, else 检查游戏的所有不同部分,并为每种游戏类型执行适当的逻辑。

if (gameType == INFINITE)
{...}
else if (gameType == TIMED)
{...}
else
{...} 

这对我来说似乎是非常错误的,而且效率低下。当我似乎可以进行一次检查并继续前进时,我不想让所有这些不必要的检查使 CPU 陷入困境。我也不想复制粘贴我的所有课程,只对每个课程进行细微的更改。有没有好的方法来做到这一点?

4

1 回答 1

3

处理这个问题的一种方法是创建一个屏幕管理器系统。这实质上意味着您有一个具有更新和绘制操作的抽象类。然后,您拥有的每个游戏(屏幕)都继承自此,允许每个游戏(屏幕)都有自己的更新/绘制行为。最终,您需要有一个 if-else 或 switch 语句来决定绘制/更新哪个。最小化这种情况的一种方法是使用抽象类型的变量来跟踪当前的“屏幕”,然后您可以多态地将需要更新/绘制的任何屏幕分配给该变量。然后,当您在当前屏幕上调用 update 或 draw 时,您不需要知道它的具体类型。

那里有很多示例,可以在以下位置找到一个不错的 XNA:http: //xbox.create.msdn.com/en-US/education/catalog/sample/game_state_management

这个想法是完全可以转移的。大多数人使用这个系统来添加菜单屏幕和东西,但没有理由不能将它用于您的目的。

于 2013-03-06T18:42:59.393 回答