如何使用 Matter.js 与大型瓦片地图发生冲突

How to use matter.js for collisions with large tilemaps

提问人:Olivia Smith 提问时间:11/9/2023 最后编辑:Olivia Smith 更新时间:11/9/2023 访问量:28

问:

要求:碰撞系统应能够处理至少 100x100 个瓦片图,其中包含至少 5 个动态实体,最好是 50 个与瓦片图有效交互的动态实体。还会有一些可以与玩家互动的瓷砖,这些瓷砖必须有自己独立的碰撞体。关卡也将是滚动的,因此它应该能够处理动态加载的图块,并能够处理碰撞器的池化。

是否有任何碰撞器或插件可以使用 matter.js 处理此问题,如果没有,在 matter.js 中处理此类瓦片图冲突的首选或标准算法是什么?

我正在考虑存储一个 x 和 y 坐标的 2d 字典,其中包含基于 bresenham 的线算法和“半径”(它们将是方形对撞机,但我将使用半径使它们更容易处理)的 x 和 y 坐标,这将只允许使用最少数量的图块。主体被重用或禁用,以便能够将它们汇集在一起,而不必每次都分配更多的碰撞体,这样在同一位置与瓦片图交互的大量动态实体将只使用相同的主体。尽管如此,我还是有点担心动态实体尽管在平坦的表面上却卡在瓷砖的边缘,是否有任何其他方法可以处理与瓷砖地图的碰撞,尤其是在通常首选的 matter.js 中?

javascript 游戏-物理 问题 .js

评论

0赞 ggorlen 11/9/2023
55 个实体几乎算不上什么。这对 MJS 来说似乎没有问题,除非我理解不正确。
0赞 Olivia Smith 11/9/2023
idk .mjs 应该如何帮助解决这个问题。在处理瓦片图时,问题在于碰撞和物理,而不是存储实体或瓦片图。
0赞 ggorlen 11/9/2023
也许我不懂瓦片地图,但这不是 MJS 中的概念。瓦片地图是如何实现的?归根结底,MJS 只处理身体,那么这些瓦片地图是由身体组成的吗?如果是这样,有多少?就目前而言,这个问题对于目前形式的网站来说有点宽泛和投机。
0赞 Olivia Smith 11/9/2023
哦,对不起,我以为你的意思是 .mjs 无关紧要.js。瓦片映射是作为包含代表瓦片的 id 的 UintArray 实现的,尽管我确实在问题中提出了处理冲突的想法,但冲突系统尚未实现。另外,我已经说过至少 100x100 又名 10000 块瓷砖的瓷砖数量。
0赞 ggorlen 11/9/2023
很抱歉造成混淆,我指的是 Matter.js。我仍然不明白 UintArrays 与 Matter.js 的关系。为什么地图不是由 Matter.js 主体组成的?MJS 不能与它自己的 MJS 身体物体以外的任何东西发生碰撞。遍历 MJS 主体以实现与非 MJS 对象的碰撞对我来说没有意义,因为没有更多的动机或围绕用例的清晰度。这听起来像是重新实现 MJS 的意图。如果您已经实现了切片系统,为什么不将其作为最小的可重现示例共享,以便我们知道我们正在处理什么?谢谢。

答: 暂无答案