6

问题

抱歉标题,似乎找不到更短/更好的描述..

情况如下:我正在制作一个简单的游戏,其中有一张大地图(简单,但尺寸非常大)。那张地图上也有很多敌人,但行动完全围绕主角(在一定半径内,占地图的一小部分)。

在每个“滴答”(或步骤,或任何你称之为的)处,每个对象都会调用一个特定的函数来确定它们的下一步动作。出于性能原因,由于我不关心在我的视野范围之外发生的事情(或者至少是非常遥远的事情),我不想在非常陌生的对象上调用该函数。

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

(我知道它是用 C++ 标记的,但任何语言都可以——我不是在寻找那么多代码——更多的是关于这个想法)


我已经尝试过的

我尝试了一些替代方案:

  • 备选方案 1:将我的地图分成“区域”并在每个区域中存储敌人列表。问题是当我在这些区域的边缘和(更糟)我在拐角处(我周围的 4 个不同区域)时会发生什么。此外,如果我从一个区域跑到另一个区域,就更难让敌人切换区域(但我已经想出了一些可行的方法......)
  • 备选方案 2:每次移动x距离时扫描整个地图并刷新活动敌人列表。这要好一些,因为我不必担心像备选方案 1 这样的边界,但我每次都必须扫描整个地图。

我现在正在研究Alternative 3,即将这两种解决方案混合在一起。

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

4

3 回答 3

4

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

于 2012-12-31T18:21:15.330 回答
2

好的,如果您能回答以下问题,我相信我们中的一些人可以帮助您解决正确的数据结构和过程。地图有多大?实际尺寸?告诉我们一些敌人的密度?平均有多少?我猜你会在每场比赛中使用随机数量的敌人,或者可能会增加每个级别的敌人数量。无论如何您计划拥有的最大敌人数量?

只有当所有角色/敌人都移动而不是围绕主角移动时才会非常好。只有这样才能让游戏真正令人兴奋。我相信你会使用很多随机数来移动,但试着看看如果你能为他们的动作想出简单而现实的算法,而不是完全依赖随机动作。我用了一点随机,他们绝对没有什么有趣的地方。也许你可以慢慢地将那些非常靠近主角移动离得很远的人很快。你可以随着等级的增加增加敌人的速度和力量。尽量让它尽可能的刺激。你可以试试凯撒三世的游戏,看看人的动作有多好,简单的动作但真的很好. 底线是想想你将如何移动敌人,

于 2012-12-31T18:27:11.797 回答
0

200x200 不大。对于每个位置,如果它在范围内,更新敌人将起作用,除非您计划在计算器上运行它,或者希望每秒更新 1000 次。

不要过度设计,保持简单。只需在需要时轻松更改即可。

于 2012-12-31T20:42:18.807 回答