【发布时间】:2013-02-14 20:57:42
【问题描述】:
我正在做一个模拟,我需要能够处理更新每个循环的数千个潜在的数百万个对象。 所有对象都需要具有称为(AI)的逻辑功能。 但是根据对象的位置决定了逻辑的详细程度。例如:
[使用 100 个对象保持简单]
- 所有对象都有一个位置 (x,y)
-
20对象距离 500 点 从“兴趣点”位置。 -
50对象为 500 分 来自20对象(1000 点外)。 -
30对象在 100 以内 从兴趣点出发。
现在说这是一个详细的城市模拟,对象是虚拟公民。 下午 6 点是每个人下班回家睡觉的时间。
所以我们遍历所有公民,但我希望他们做不同的事情。
- 最远的物体 (50) 下班回家睡觉 直到早上。
- 较近的物体 (20) 下班回家,有一个 吃点东西然后睡到早上。
- 最近的物体 (30) 去 下班回家,吃点东西,刷牙然后睡觉直到 早上。
如您所见,它们越靠近兴趣点,逻辑就越详细。
我正在尝试找出迭代所有对象的最佳和最高效的方法。 用满手的物体这会相对容易,但由于这需要有效地处理至少 500,000 个物体,我需要一些建议。
此外,我不确定是否应该在每个循环中遍历所有对象,或者最好在每个循环中遍历最近的对象,但每 10 个循环仅遍历更远的对象?
由于需要对象在靠近它们的其他对象之间进行交互的额外要求,我一直在想最好的方法可能是将它们组织在四叉树中,但我不确定。似乎四叉树更适合静态内容,但我正在处理的对象,如前所述,有一个位置,需要移动到其他位置。 我是否走在正确的思考轨道上?还是有“更好”的方法?
如果有人认为它相关,我也在使用 c++。
任何建议将不胜感激。
注意:
- 兴趣点定期变化,把它想象成一个相机 查看。
- 对象是动态创建和销毁的
【问题讨论】: