Box2D – 这些简单的对象是否需要在模拟中?

我想从社区获得关于如何最好地表示基于Box2D的模拟中的简单对象的input。

一些背景:
不要过多细节,想想一个有角色和一些“食物”的自上而下的游戏。 你甚至可以 PacMan™。 假设我会模拟角色和墙壁是Box2D,所以这个家伙不能离开迷宫,我得到了碰撞反馈等。

我的问题:
“食物”应该是Box2D模拟的一部分吗?

我的想法:

食物不需要在模拟中,因为..
它不动。
一旦角色与食物碰撞,就会从游戏中移除。
它不应该施加任何武力给这个家伙,或任何事情。
也不应该有任何事情需要施加武力。
这是额外的计算是没有必要的。

食物可能在模拟中,因为..
我已经在使用Box2D了。
Box2D可以为我处理碰撞事件。
再次, Box2D可以为我处理碰撞事件 ; 我真的不想自己检查碰撞。
Box2D应该让食物“睡觉”,这样不会有太多额外的计算,对吗?

你们有什么感想? 这样的好处是否大于成本? 还有其他我缺less的优点/缺点吗?

我期待得到反馈。

这一切都取决于你的模拟的复杂性。 你有更多的对象有更多的时间来解决冲突。

你可以设置你的食物filter只与你的玩家碰撞,你的食物types为静态。

然后,当你碰撞时,只需禁用冲突解决scheme,并将食物对象添加到“生存结束”列表。

你可能有很多这样的对象,所以这个过程将很容易设置和重复。


如果你的模拟开始放慢速度,或者如果你想提高性能,所有你需要做的就是使用一个位置,并检查所有食物与玩家的距离。 这是一个非常小的操作,并会比让box2d处理它快。

你的食物甚至可以减less到一系列可回收的vec2。 他们将在内存和处理时间上占用更less的空间。


这也取决于你的游戏的结构。 如果您可以简单地添加一个新的系统和组件到您的实体中,您可能会发现使用自己的系统进行食物更简单。 看看基于组件的实体系统


关于javascript,我会用我自己的解决scheme作为垃圾收集器和js中的其他机制,往往会创建一些不一致的结果与大量的机构。

我想你应该在模拟中包括食物。

如果你这样做,你将已经有效率的检查与球员身体的碰撞,否则你将需要做出自己的判断。 如果你没有在模拟中使用它,你可能需要自己实现一个清除和修剪algorithm(或者可能是一些空间分区或类似的东西),box2d已经为你做了。

你需要的是使用传感器来检测碰撞而没有“响应”。

谁知道,有一天你可能想让不同types的物理学也适用于食物呢? 磁铁,爆炸等可能需要施加力量/冲动,然后你已经有了很多的结构。

我的想法是,你可以使用它 – 说作为一个静态的身体,并将其分配给一个对其他身体没有影响的影响组。 但是就像你说的那样,box2d会为你做碰撞,所以这会让pacman吃掉食物更容易。 而且就像你说的那样,它会睡着,所以在计算上不会花费太多。

为什么使它更困难 – 你应该使用引擎,因为它做了很多繁重的工作,这样做不应该增加太多(如果有的话)给处理器使用。