破损的box2d机身,找到特定的固定装置,单独的固定装置

时间:2017-09-24 14:29:44

标签: java libgdx box2d

我已经尝试了几件事,包括: 传感器,光线投射,夹具距离,AABB,重叠夹具顶点,交叉器。不幸的是,我无法在这里找到一个近乎工作的代码示例。我也在寻找所有可能的来源,十次。

来自多个资源的切片/分割方法并不完全符合我需要实现的内容,它通过实际夹具进入和退出点。在我的情况下,有空的空间," cut"需要是。

图片:

destruction example 1

destruction example 2

你在这里看到的是一个三角形的单体,里面有几个固定装置。这些图片代表了玩家切入之后的可能状态。我正在使用dermetfan的易碎类来摆脱碰撞时的夹具。

我想检测身体的各个部分(固定装置)是否松动/远离每个人,而不是连接在身体内部,如图所示。由于在移除固定装置后身体物理仍然完好无损,它会旋转并移动,因为它没有以任何方式破坏。

如果我有这些装置我会克隆它们摧毁原始并创建一个新的身体,以便让#34;破坏"部分表现为一个单独的。

更新: 请记住,有可能有X"边/件"因为对破坏/路径没有限制。问题是识别视觉上分离的那些部件/灯具集合。它不是最初的一次冲动,每个夹具三角形在当时单独销毁。

2 个答案:

答案 0 :(得分:0)

听起来你需要实现 post solve 方法并将该实现挂钩到世界各地。这些源代码可以在Box2D Testbed演示的 Breakable 演示中进行演示。我不知道演示的Java端口是否只有C++ code for demoing breakable behavior is available。如果那已经不是你已经看过了,我建议这样做。

无论如何,基本上,你实现了一个post解决方法并将其挂钩到世界各地。然后通过联系信息和冲动信息调用它。您可以解释这些信息,以识别与穿透体的固定装置(子弹或地面或您想要破坏主体的任何东西)接触的初始固定装置以及所涉及的冲量。您可能希望在计算max 正常脉冲量(与正切脉冲量相反)方面做类似于演示代码的操作,并且只启动休息时间如果该最大值超过阈值金额。

如果您希望在超过您的冲动阈值的第一个接触点上发生分离,那么您可以使用 post solve 方法中的联系信息来取出接触歧管并获得正常接触联系方式。使用正常情况,您可以编写一个算法,基本上遵循其通过主体的路径来确定破坏路径中的装置。可以移除那些固定装置,并将路径两侧的其余固定装置克隆成两个新的独立主体并移除旧主体。然后给两个新的物体,每个物体的冲力小于原始压裂脉冲的一半,并带有一点向外的冲动,使分离速度加快。只要你的结尾组合冲动不超过原来的破碎冲量,事情应该看起来很现实。

如果您希望仅在一个或多个灯具不再连接到其他灯具后发生分离 - 这是基于您的编辑的声音 - 我可以完全看到使用其他策略。我没有将初始可破坏对象创建为单个主体,而是尝试将每个夹具放在自己的主体内,并使用类似距离关节的东西连接相邻的固定装置/主体。这在计算上会更加密集,但如果在每个阈值超过另一个身体的影响,该集合中的一个身体被破坏,模拟最终将分离碎片作为不再具有将这些碎片连接在一起的约束的自然结果。当然,您必须在预期的硬件上进行尝试,以确定这是否足以满足您的需求。

根据我自己的建议,我将后一种策略的演示放在一起,看看它是如何运作的。我没有像你那样使用圆形图案中的三角形,而只是在20×20配置中使用了400个正方形。我也使用焊接接头代替距离接头,因为焊接接头使得模拟看起来更像是整个物体分裂的情况通过炸弹。每个方形都属于自己的身体,每个身体都通过焊接接头连接到它的近邻。模拟似乎永远不会低于60 FPS,即使没有对新分离的零件施加任何额外的冲动,我也很喜欢结果。

这是一个屏幕截图,显示大型聚合对象被轰炸后演示的样子:

Testbed Breakable Two Demo

不可否认,我这样做了within the Testbed of my own physics enginesource code for the demo is available online如果有帮助的话 - 虽然它在C ++中,所有概念也应该适用于Java Box2D。

希望这有帮助。

答案 1 :(得分:0)

您似乎想要构建切片机制,为此,我不确定可破解方法是否正确。您可能希望查看此article,看看是否可能需要采用不同的方法。如果您正在使用固定装置网格,那么这是一种可能有用的一般方法。

为了解决这个问题,我希望得到一个帮助我做到这一点的数据结构。为此,节点和边的图形似乎是理想的。作为固定装置和边缘的节点存在于仍然附着的相邻固定装置之间。

我会在创建我的身体时构建此图形,并使用我的灯具中的用户数据来存储它。使用灯具的视觉重叠在“切片”时间构建它会更昂贵,并且可能更加不稳定。

当您制作切片时,您可以破坏边缘,最后使用连接的图形查找算法来识别您的碎片。谷歌搜索有很多结果,但here是你可以从中开始的答案。

一旦你有了你的作品,你就可以为每件作品创造新的身体和固定装置。如果你的新作品中有每个灯具的顶点,你可以使用this方法来获得新的外边缘并以与构建父作品相同的方式构建作品。