Matter.js 如何让物体(圆圈)在0重力的盒子里无限弹跳(完美弹性)

Jar*_*ski 5 javascript matter.js

我专门寻找在世界重力(x 和 y)为 0 时有效的主体选项。我当前的主体选项如下:

physics: {
    frictionAir: 0,
    friction: 0,
    frictionStatic: 0,
    inertia: Infinity,
    restitution: 1,
    label: 'circle'+Date.now()+Math.random(),
    collisionFilter: {
      mask: 0x001
    },
},
Run Code Online (Sandbox Code Playgroud)

尝试了各种组合,包括连续应用 setVelocity 和/或 applyForce,但这些组合无法按预期工作。我希望仅应用一次 setVelocity 就能使所有物体永远保持移动。所以在我的update函数中我做了这样的事情:

        if(!this.setInMotion){
            Matter.Body.setVelocity(myBody, 
                {x: (Math.random() - 0.5) * 2, 
                y: (Math.random() - 0.5) * 2})
            this.setInMotion = true
        }
Run Code Online (Sandbox Code Playgroud)

但物体只是(缓慢地)移动到盒子(由静态矩形组成)的侧面,然后沿着它们滑动到其角落,或者完全停止而根本不弹跳。设置 setAngularVelocity 确实会使物体反弹,但每次碰撞后的方向和速度就会变得不符合预期。

感谢您的时间。

贾里德

小智 0

您需要将frictionStatic设置为1

physics: {
    frictionAir: 0,
    friction: 0,
    frictionStatic: 1,
    inertia: Infinity,
    restitution: 1,
    label: 'circle'+Date.now()+Math.random(),
    collisionFilter: {
       mask: 0x001
    },
},
Run Code Online (Sandbox Code Playgroud)