首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >城市建设者影响范围的表现

城市建设者影响范围的表现
EN

Game Development用户
提问于 2022-06-14 20:45:13
回答 2查看 80关注 0票数 1

我正在做一个城市建筑游戏,所有的建筑都是轴线对齐的矩形。目前,我正在使用空间散列来检测一个建筑物的插入是否与板子中的建筑物相交。

现在,我正在实施一个效果系统,在这个系统中,每个放置的建筑物都有一些影响,它们可以在特定范围内对其他建筑物产生影响。这种情况发生在将一栋新建筑安置到董事会中时。

基本上,如果我把一幢建筑物放在另一座建筑物的板上,则该建筑物应该会受到我刚才所放置的建筑物所产生的影响,而我所放置的建筑物亦应会受到板内建筑物的影响。就像握手一样。这应该发生在每一个建筑物范围内的另一个建筑物,并将发生和计算时,一个新的建筑物被插入董事会。

另一件要紧记的是,如果一幢楼宇已在楼板内,而另一幢新建筑物则位于其范围内,则即使另一幢楼宇不在其范围内,该新建筑物亦应受到已在楼板内的建筑物的影响。因此,这将是一个单向的效果转移,而不是“握手”。

我目前有交换的效果,它应该工作,但这是缓慢的,因为我正在检查每一个建筑物的范围与每一个建筑物。因此,你放置的建筑物越多,得到的速度就越慢。

我正在寻找一种方法,使这更快,无论它是否意味着从空间哈希到其他空间分区。我目前正在阅读分层哈希网格,但我不知道这是否会使我受益。

EN

回答 2

Game Development用户

发布于 2022-06-14 21:24:00

听起来像是影响力地图的用例。

  1. 对于你所拥有的每一种建筑效果,你都会创建一个二维的整数数组,其大小与你的地图大小相当。这些是“影响地图”,它代表每个地图瓷砖的每个效果的强度。
  2. 当你放置一个建筑物发出这种效果时,在相应的影响地图上添加1到每个瓷砖,这是在建筑物的影响范围范围内。(如果你不想让一座建筑受益于它自身的效果,跳过建筑物本身占用的瓷砖(S))。
  3. 当您移除发出效果的建筑物时,从范围内的每个瓷砖中减去1。
  4. 当您想检查建筑物是否受到某种影响时,请在其坐标处检查相应的影响图(S)。它代表了影响它的重叠建筑物的数目。

当效果是简单的on/off时,您可以在该影响映射中的值> 0时给出奖励。您可能会想,为什么不使用bool数组呢?当玩家在附近放置3座建筑,然后移除2座时,你仍然想知道还有1座建筑覆盖着瓷砖。所以你需要准确地计算出每个瓷砖覆盖的建筑数量,即使你不在乎它是否超过一个。但是你也可以把它用在更复杂的力学上。就像测量多个建筑物在范围和模型上的累积效应一样,这些效应随着距离的增加而减弱。

从性能上来说,这很便宜。对影响图进行采样是一种固定时间的操作.而且您只需要在增加或移除建筑物时更改它,在这种情况下,性能成本取决于所加/移的建筑物所覆盖的面积。

要获得更多关于你可以使用影响力地图做什么的灵感,请看下面的GDC对话:基于模块化可扩展影响映射的空间知识表示

票数 3
EN

Game Development用户

发布于 2022-06-17 12:57:08

目前,我正在使用空间散列来检测一个建筑物的插入是否与板子中的建筑物相交。

...

我有效应可以正常工作,但速度很慢,因为我正在检查每一栋建筑的范围。因此,你放置的建筑物越多,得到的速度就越慢。

空间散列根据对象之间的紧密程度来组织对象。您已经使用它来进行碰撞检测,所以也可以使用它来获取在您刚刚放置的建筑物(或即将放置的)的最大影响范围内的建筑物列表。

票数 0
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/201323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档