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