0

我在一个静态盒子内创建了一个动态圆圈(四个静态墙来制作一个盒子)。对世界施加负重力。

现在的效果是圆形物体应该从内壁反弹并最终稳定下来。

在restituion=1 的情况下,我得到的效果是:从墙上反弹的次数不断增加,而且永远不会停止。

我究竟做错了什么?我认为 resitution=1 意味着无限弹跳(相同距离),但这里弹跳距离逐渐增加。

// create ground (box-type object)
function createGround(x, y, width, height, rotation) {
// box shape definition
var groundSd = new b2BoxDef();
groundSd.extents.Set(width, height);
groundSd.restitution = 0.0;

var groundBd = new b2BodyDef();
groundBd.AddShape(groundSd);
groundBd.position.Set(x, y);
groundBd.rotation = rotation * Math.PI / 180;
return world.CreateBody(groundBd);
}


function createCircleAt(x, y, r) {
var boxSd = new b2CircleDef();
boxSd.density = 1.0;
boxSd.friction = 1.0;
boxSd.restitution = 1.0;
boxSd.radius = r;

// add to world as shape
var boxBd = new b2BodyDef();
boxBd.AddShape(boxSd);
boxBd.position.Set(x,y);
return world.CreateBody(boxBd);
}

使用 box2d.js

4

2 回答 2

0

我想这取决于你墙壁的恢复价值。球在有自己“行为”的墙上弹跳,如果我没记错的话,它会计算 2 之间的比率。您是否尝试更改墙恢复值?

于 2013-09-17T21:16:26.363 回答
0

Box2d 没有给出精确的模拟。将恢复原状设置为 1.0 只会使物理看起来“足够接近”。

于 2013-09-13T10:21:45.303 回答