2D软体:Gelly和可塑?

时间:2016-10-16 19:25:16

标签: javascript physics game-physics phaser-framework matterjs

我正在使用Matter.js物理来创建柔体。我能够创建这样的身体:

matter.js soft body

但是我不确定这是否是我想要的“软体”。确实,这个身体并不是完全僵硬的,并且当它碰撞并被拖拽时具有那种有弹性的感觉。我正在寻找一个与凝胶有相似之处的身体。这个图像可能在视觉上有助于解释这个概念:

wanted-gelly-body

我想知道如何制作这些类型的尸体。它与as matter.js软体相同,但具有非常特殊的属性类型吗?我只能让身体变得僵硬,而不是像我希望的那样可塑造和圆形。

我也很有兴趣通过游戏中的相互作用来操纵物理体,这会增加或减少物理体的大小,这使我再次得出结论,我想要的身体类型必须是相当可塑的。

可以问.js处理这个还是我必须更改物理引擎?有任何解决方案吗?

注意:我使用Phaser.js作为游戏中的一些组件,但是物理操作的物理因素是物理操作,因为我相信Phaser集成的物理学不能模拟这种复杂的物体。

谢谢

编辑:它与此Box2d :roll soft body ball非常相似。我想我只需要使用js引擎。有没有?

1 个答案:

答案 0 :(得分:5)

正如我在评论中提到的,我不熟悉phaser或者你如何在Javascript框架中实现它。我的目标是给你一些关于不同方法的想法,所以希望你能找到这个答案。

我会尽力回答这个问题:

  

我想知道如何制作这些类型的尸体。 ......我只能让身体变得僵硬,而不是像我希望的那样可塑造和圆形。

对于这句话,你不一定清楚你想要什么。正如我在评论中所指出的那样,我认为你正在寻找可塑性,我将描述一种你可以做到的方式"作弊"看起来有点简单的工具。

此刻,你用#34来描述你的身体运动; 这个身体确实不是完全僵硬的,并且当它碰撞并被拖拽时具有那种有弹性的感觉。&#34 ;。目前您的模型如下:

  1. 一个点连接到网格中给出的所有其他点。
  2. 每一步,每对之间计算一个力。关节(或点)上的总力是所有这些配对力的总和。
  3. 每个关节都与身体的一部分相关联(即它有一些质量m)并且您使用acceleration = force/m计算其加速度。从那里开始,我们计算velocity,最后计算position
  4. 上述步骤中最有趣的部分是nr 2,因为这将极大地影响整个身体的运动。实现它的一种非常常见的方式是弹性潜力,对于两点之间的某个distance,可以得到一些force。像这样:

    function elasticPotential(p1, p2) {
        // Given two positions p1 and p2 we calculate a force between them
        distance = sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2) + pow(p1.z - p2.z, 2));
        force = force_given_distance(distance); // A popular choice here is for example a spring force
        return force;
    }
    

    现在,您已经在框架中内置了上述功能,因此您不必实现它。我之所以这样描述,是因为了解我们如何创造可塑性至关重要。上面的问题是没有什么能保持变形 ---弹性潜力的本质是它有一些休息配置(很可能是你的第一个配置)它总会试着回到那个形状。我们希望形状记住它是如何形状错误的。这就是可塑性。

    简单的可塑性

    首先请注意,可塑性问题是一个很大的研究课题,在很多情况下都是微不足道的。我的想法如下:如果两个连接点之间的距离大于某个阈值,重新映射当前配置中的点。也就是说,

    for each pair(p1, p2):
        if distance(p1, p2) > threshold:
            recalculate_connection(p1, p2)
    

    正如您所看到的,这是一个非常简单的可塑性模型,很可能不是物理上正确的。但是,应该可以通过重新拼写以及您选择的弹性潜力来获得有趣的行为。

    如果你向我提供更多详细信息,我可以进一步讨论这个问题,但是现在我觉得这个答案已经比它应该更长了。

    <强> TL; DR: 创造一个可塑造的&#34;在变形过程中重新塑造你的身体。获得一个确切的理想物理行为可能很棘手,但应该有可能创造出类似于&#34;凝胶状的东西&#34;。