我应该如何让我的游戏实体了解周围的事物?

时间:2009-07-12 16:52:08

标签: iphone architecture

我游戏中的每个敌人类型都是不同的类,实例存储在C数组中。在主游戏循环中,为每个敌人/项目实例运行update(),并运行draw()。某些update()命令需要知道主要播放器的位置。将信息传递给实例的最佳途径是什么?我不认为全局变量是这样做的明智之举,因为以后可能会添加多人游戏选项。

这只是一个更大问题的一个例子,即游戏中的事物应该如何相互了解。例如,敌人如何知道他们正在与其他敌人发生碰撞。

4 个答案:

答案 0 :(得分:3)

使搜索更有效的一种方法是将正在更新的实体拆分为四叉树。树将根据屏幕上的位置或您设置的游戏世界进行划分。通过这种方式,您可以将其设置为仅靠近实体更新。因此,例如,如果您正在进行命中检测,则可以完全忽略大组。

quad trees

希望有所帮助

答案 1 :(得分:3)

您需要构建一个多分支树型结构(不是简单的二叉树)。节点是游戏中的位置。每个节点可以包含多个简单的结构/对象指针(取决于您的编程语言)。当玩家在游戏中移动时,您将玩家位置指针移动到表示位置的树节点。当你开始游戏时,这个树型结构中会填充拾取的东西,怪物等。随机种子也可以用于散布怪物。

这有助于提高游戏速度,因为您只需要从当前位置/节点一步搜索当前节点和节点。触发怪物前进或后退的任何例程只是将怪物指针移动到下一个或多个节点。如果使用med包,则其指针将从其所在的房间/节点中销毁。

祝你好运

答案 2 :(得分:0)

Controller实体?

您需要仔细考虑使用普通数组,通过大型数组进行线性搜索可能非常耗时,以便搜索碰撞等事情。

答案 3 :(得分:0)

游戏中的所有实体(包括播放器)都应位于同一容器中。你的AI会在每一帧中循环遍历它们并调用一些执行每个实体所有目标的函数。

实体(如播放器)可以通过同一个容器访问所有其他实体。

然而,您必须聪明地了解容器才能使实体有效地访问容器。