我正在做一个城市建筑游戏,所有的建筑都是轴线对齐的矩形。目前,我正在使用空间散列来检测一个建筑物的插入是否与板子中的建筑物相交。
现在,我正在实施一个效果系统,在这个系统中,每个放置的建筑物都有一些影响,它们可以在特定范围内对其他建筑物产生影响。这种情况发生在将一栋新建筑安置到董事会中时。
基本上,如果我把一幢建筑物放在另一座建筑物的板上,则该建筑物应该会受到我刚才所放置的建筑物所产生的影响,而我所放置的建筑物亦应会受到板内建筑物的影响。就像握手一样。这应该发生在每一个建筑物范围内的另一个建筑物,并将发生和计算时,一个新的建筑物被插入董事会。
另一件要紧记的是,如果一幢楼宇已在楼板内,而另一幢新建筑物则位于其范围内,则即使另一幢楼宇不在其范围内,该新建筑物亦应受到已在楼板内的建筑物的影响。因此,这将是一个单向的效果转移,而不是“握手”。
我目前有交换的效果,它应该工作,但这是缓慢的,因为我正在检查每一个建筑物的范围与每一个建筑物。因此,你放置的建筑物越多,得到的速度就越慢。
我正在寻找一种方法,使这更快,无论它是否意味着从空间哈希到其他空间分区。我目前正在阅读分层哈希网格,但我不知道这是否会使我受益。
发布于 2022-06-14 21:24:00
听起来像是影响力地图的用例。
当效果是简单的on/off时,您可以在该影响映射中的值> 0时给出奖励。您可能会想,为什么不使用bool数组呢?当玩家在附近放置3座建筑,然后移除2座时,你仍然想知道还有1座建筑覆盖着瓷砖。所以你需要准确地计算出每个瓷砖覆盖的建筑数量,即使你不在乎它是否超过一个。但是你也可以把它用在更复杂的力学上。就像测量多个建筑物在范围和模型上的累积效应一样,这些效应随着距离的增加而减弱。
从性能上来说,这很便宜。对影响图进行采样是一种固定时间的操作.而且您只需要在增加或移除建筑物时更改它,在这种情况下,性能成本取决于所加/移的建筑物所覆盖的面积。
要获得更多关于你可以使用影响力地图做什么的灵感,请看下面的GDC对话:基于模块化可扩展影响映射的空间知识表示
发布于 2022-06-17 12:57:08
目前,我正在使用空间散列来检测一个建筑物的插入是否与板子中的建筑物相交。
...
我有效应可以正常工作,但速度很慢,因为我正在检查每一栋建筑的范围。因此,你放置的建筑物越多,得到的速度就越慢。
空间散列根据对象之间的紧密程度来组织对象。您已经使用它来进行碰撞检测,所以也可以使用它来获取在您刚刚放置的建筑物(或即将放置的)的最大影响范围内的建筑物列表。
https://gamedev.stackexchange.com/questions/201323
复制相似问题