我特别寻找在世界引力(x和y)都为0时可行的身体选项。 我目前的身体选项如下:
physics: {
frictionAir: 0,
friction: 0,
frictionStatic: 0,
inertia: Infinity,
restitution: 1,
label: 'circle'+Date.now()+Math.random(),
collisionFilter: {
mask: 0x001
},
},
尝试了各种组合,包括不断应用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
}
但是这些物体只是(缓慢地)移动到盒子的侧面(由静态矩形构成),并且沿着它们向其角落滑动,或者完全停止而不会弹跳。 设置setAngularVelocity会使事情反弹,但每次碰撞后的方向和速度都不会达到预期的效果。
感谢您的时间。
贾里德
答案 0 :(得分:0)
您需要将frictionStatic设置为 1
physics: {
frictionAir: 0,
friction: 0,
frictionStatic: 1,
inertia: Infinity,
restitution: 1,
label: 'circle'+Date.now()+Math.random(),
collisionFilter: {
mask: 0x001
},
},
答案 1 :(得分:0)
替换
if(!this.setInMotion){
Matter.Body.setVelocity(myBody,
{x: (Math.random() - 0.5) * 2,
y: (Math.random() - 0.5) * 2})
this.setInMotion = true
}
与
if (!this.setInMotion) {
this.setInMotion = true
var vx = 0.001 * (Math.random() - 0.5)
var vy = 0.001 * (Math.random() - 0.5)
Matter.Engine._bodiesApplyGravity([myBody], { x: vx, y: vy })
}
这个hack将使用applyGravity inner matterjs引擎函数在world.gravity设置为0时正确地应用vx方向的推动,vy
此致,Jacek