我在一个静态盒子内创建了一个动态圆圈(四个静态墙来制作一个盒子)。对世界施加负重力。
现在的效果是圆形物体应该从内壁反弹并最终稳定下来。
在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