模拟离散房间的减压

时间:2017-07-27 06:58:59

标签: c# algorithm game-physics

我正在尝试建造一个具有可破坏部件的自上而下的太空飞船游戏。我需要模拟船体破裂情况下的减压过程。

我有一个平铺地图,其中包含房间分区代码设置:  Tiled map

我想要做的是建立某种矢量场,这将确定空气离开减压室的方式。因此,如果您打破连接真空和房间的瓷砖(与紫色和绿色房间相邻),您最终会得到这样的矢量地图:

Air flow in a depressurized room

我的想法是实现某种标量场(类似于潜在场)以帮助确定气流(基本上用欧氏距离(考虑到障碍物)填充网格到已知的零电位点然后通过考虑当前图块具有较低潜在值的所有相邻图块来计算向量:

Scalar field and vector calculation

然而,这种方法存在一个缺陷,即在某一点施加到身体上的力的大小并没有真正考虑到气流瓶颈和距离,所以在真空砖旁边的瓷砖中的力应该是相同的。以及在房间的另一端。

有没有更好的方法来模拟这种行为,或者可能是对算法的更改,尽管这样做或多或少会真实地考虑到距离和瓶颈?

1 个答案:

答案 0 :(得分:2)

从评论收集的算法升级想法:

(...)你想要一种逼真的“力量”感觉。在这种情况下,它应该不仅仅基于距离,而是像你说的那样,气流。您需要在某种程度上对其进行估计并注意它在电子学中的行为类似于基尔霍夫规则。让我们说洞很小 - 然后每秒吸入的空气量很小。第一个最近的瓷砖必须覆盖它,它们每秒失去X空气。他们周围的瓷砖也必须会聚 - 它们总共每秒失去X空气。和他们的邻居......等等。它像Dijkstra距离一样工作,但倒计时。

示例:假设没有墙壁,在零点处以16 /秒开始指向地面上的洞,周围8个瓦片将获得2 /秒指向零点瓦片。周围12个瓷砖的下一层将达到1.33 /秒等等。现在改变它,即(1)考虑各种初始孔尺寸(2)由于小通道导致的气流中的各种大的无通过障碍物(3)限制 - 这表现得像新的起点。

另一个例子(来自相关地图):值为零的图块的值为1000单位/秒。它下面的每个将是500 / s,下一个也是1000 / s,连接到它的三个将分别为333 / s。

在那之后,我们可以将矢量系数基于这个标量值的差异,因为它考虑了障碍和距离,它或多或少会有现实作用。

关于上面的第(3)点,想象一下,您还可以使用中间选项来代替确定的100%-pass和nope-0%-wall。而不仅仅是走廊和墙壁,你也可以拥有30%通风的破窗。例如,在距离为[0]的地图上,您已经获得了产生通量1000 /秒的初始孔。然而,在距离[2]处,存在小气孔或具有30%气流调节器的破窗。这意味着它将限制从进入(2x500 = 1000)到0.3x(2x500)= 300 /秒的量,现在将进一步流向下一个区域。这将允许您以不同的速度对隔间进行减压,这样前几块瓷砖将迅速失去所有空气,而甲板的其余部分将花费更多时间(除非点[2]处的30% - 修改器窗口完全断开等)。