如何处理C 游戏中的许多对象



问题

对此表示抱歉,似乎找不到较短/更好的描述。

以下情况是:我正在制作一个简单的游戏,其中有一张大地图(简单,但大小很大)。该地图上也有很多敌人,但是动作仅围绕主角(在某个半径中,这是地图的很小比例)。

在每个" tick"(或步骤或任何您称之为)的情况下,每个对象都有一个某些功能来确定其下一步。出于绩效原因,由于我不在乎视图范围之外发生的事情(或者至少是很远的东西),所以我不想在非常异国的物体上称呼该功能。

如何管理这些对象,以确保我始终有附近对象的列表,这些对象在我绕地图移动时已更新?

(我知道它是在C 中标记的,但是任何语言都会做的 - 我并不多,而是更多的代码 - 更多关于这个想法)


我已经尝试过的

我尝试了一些替代方法:

  • 替代1:将我的地图分开在"区域"中,并在每个区域存储一个敌人列表。问题是当我在这些区域的边缘而(更糟的)我在角落(我周围的4个不同的区域)时会发生什么。另外,如果我从一个区域跑到另一个区域,则很难使敌人切换区域(但我已经弄清楚了一些可以起作用的东西...)
  • 替代性2:扫描整个地图,并在每次移动x距离时刷新活动敌人列表。这有点好一些,因为我不必像其他1一样担心范围,但是我每次都必须扫描整个地图。

我现在正在查看替代3 ,这是将这两个解决方案混合在一起。

但是,我想确保没有更明显的解决方案。

将敌人存储在k-d树中,并每次迭代进行空间范围搜索。但是,您需要一个相当复杂的实现,该实现支持条目四处移动并重新平衡 - 有时称为自适应K-d树。

好吧,如果您可以回答以下问题,我敢肯定,我们中的一些人可以帮助正确的数据结构和过程。地图有多大?实际尺寸?告诉我们一些有关敌人密度的信息?平均有多少个?我想您将为每个游戏使用随机数量的敌人,或者在每个级别上增加敌人的数量。您打算拥有的最大敌人数量?

只有所有角色/敌人四处走动而不是仅仅在主角周围时,才会真的很好。只有这会使游戏真正令人兴奋。我相信您将使用很多随机数来进行运动,但是尝试查看您是否可以为它们的动作提出简单但现实的算法,而不是完全依靠随机运动。我已经有点随机了,它们绝对没有有趣的地方。角色慢慢,很快就会遥远。您可以随着水平的增加而增加敌人的速度和力量。试图使其尽可能令人兴奋。但真的很好。最重要的是考虑一下您将如何移动敌人,并尽可能地尝试将所有敌人移动到每个刻度上,以使游戏真正令人兴奋。

200x200不大。foreach位置,如果它在范围内,则更新敌人将有效

不要过度工程师,请保持简单。只需在需要的情况下就可以轻松更改即可。

最新更新