gpt4 book ai didi

javascript - Matter.js 如何使物体(圆圈)在重力为 0 的盒子中无限弹跳(完美弹性)

转载 作者:行者123 更新时间:2023-12-04 17:46:30 26 4
gpt4 key购买 nike

我正在专门寻找当世界引力(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
}

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

感谢您的宝贵时间。

贾里德

最佳答案

替换

    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 方向的插入运动

问候,亚采克

关于javascript - Matter.js 如何使物体(圆圈)在重力为 0 的盒子中无限弹跳(完美弹性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48288413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com