Javascript box2dweb:Walls don';不要让慢的物体反弹

Javascript box2dweb:Walls don';不要让慢的物体反弹,javascript,html,box2d,Javascript,Html,Box2d,我使用box2dweb进行游戏。我找到了一个圆周围的四个盒子,给了这个圆一个初始速度。我原以为圆会从墙上反弹,但碰撞后圆会与墙平行移动。只有当一个圆移动缓慢时才会发生这种情况。圆圈最后总是停在墙上。我怎样才能使圆正确运行?下面的脚本显示了问题 <!DOCTYPE HTML> <html lang="ja-JP"> <head> <meta charset="UTF-8"> <script type="text/javascri

我使用box2dweb进行游戏。我找到了一个圆周围的四个盒子,给了这个圆一个初始速度。我原以为圆会从墙上反弹,但碰撞后圆会与墙平行移动。只有当一个圆移动缓慢时才会发生这种情况。圆圈最后总是停在墙上。我怎样才能使圆正确运行?下面的脚本显示了问题

<!DOCTYPE HTML>
<html lang="ja-JP">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="http://jsdo.it/Kon/box2dweb/js"></script>
    <script type="text/javascript">

var Ball_Speed = 2.0;

var b2Vec2 = Box2D.Common.Math.b2Vec2;
var b2Body = Box2D.Dynamics.b2Body;
var b2World = Box2D.Dynamics.b2World;
var b2CircleShape = Box2D.Collision.Shapes.b2CircleShape;
var b2DebugDraw = Box2D.Dynamics.b2DebugDraw;

$(function(){    
    "use strict";
    var canvas = $("#canvas");
    canvas.css("width", 500);
    canvas.css("height", 500);
    canvas.get(0).width  = 500;
    canvas.get(0).height = 500;

    var world = new b2World(new b2Vec2(0, 0), true);

    var debugDraw = new b2DebugDraw();
    debugDraw.SetSprite(canvas.get(0).getContext("2d"));
    debugDraw.SetDrawScale(100);
    debugDraw.SetFillAlpha(0.9);
    debugDraw.SetLineThickness(1.0);
    debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
    world.SetDebugDraw(debugDraw);

    var fixDef = new Box2D.Dynamics.b2FixtureDef;
    fixDef.restitution = 1;

    var bodyDef = new Box2D.Dynamics.b2BodyDef;
    bodyDef.linearDamping = 0.2;

    // Create Wall //////////////////////////////////////////////////////////////////
    function createWall(x, y, w, h){
        bodyDef.type = b2Body.b2_staticBody;
        bodyDef.position.x = x + w / 2;
        bodyDef.position.y = y + h / 2;
        fixDef.shape = new Box2D.Collision.Shapes.b2PolygonShape;
        fixDef.shape.SetAsBox(w / 2, h / 2);
        world.CreateBody(bodyDef).CreateFixture(fixDef);
    }    
    createWall(0, 0, 2, 0.1);
    createWall(0, 0, 0.1, 2);
    createWall(2, 0, 0.1, 2);
    createWall(0, 2, 2, 0.1);

    // Create Ball
    fixDef.shape = new b2CircleShape(0.2);
    bodyDef.type = b2Body.b2_dynamicBody;
    bodyDef.position = new b2Vec2(1.5, 1.0);
    bodyDef.linearVelocity = new b2Vec2(Ball_Speed, Ball_Speed);
    world.CreateBody(bodyDef).CreateFixture(fixDef);

    (function loop(){
        world.Step(1 / 60, 10, 10);
        world.DrawDebugData();
        world.ClearForces();
        setTimeout(loop, 15);
    })();
});    

    </script>
</head>
<body>
    <canvas id="canvas"></canvas>
</body>
</html>

var Ball_速度=2.0;
var b2Vec2=Box2D.Common.Math.b2Vec2;
var b2Body=Box2D.Dynamics.b2Body;
var b2World=Box2D.Dynamics.b2World;
var b2CircleShape=Box2D.Collision.Shapes.b2CircleShape;
var b2DebugDraw=Box2D.Dynamics.b2DebugDraw;
$(函数(){
“严格使用”;
var画布=$(“#画布”);
css(“宽度”,500);
css(“高度”,500);
canvas.get(0).width=500;
canvas.get(0).高度=500;
var world=新b2World(新b2Vec2(0,0),真);
var debugDraw=new b2DebugDraw();
debugDraw.SetSprite(canvas.get(0.getContext)(“2d”);
debugDraw.SetDrawScale(100);
debugDraw.SetFillAlpha(0.9);
debugDraw.SetLineThickness(1.0);
debugDraw.SetFlags(b2DebugDraw.e|u shapeBit | b2DebugDraw.e_jointBit);
SetDebugDraw(debugDraw);
var fixDef=新的Box2D.Dynamics.b2FixtureDef;
fixDef.Restoration=1;
var bodyDef=新的Box2D.Dynamics.b2BodyDef;
bodyDef.linearDamping=0.2;
//造墙//////////////////////////////////////////////////////////////////
函数createWall(x,y,w,h){
bodyDef.type=b2Body.b2_静态体;
车身定义位置x=x+w/2;
车身定义位置y=y+h/2;
fixDef.shape=新的Box2D.Collision.Shapes.b2PolygonShape;
固定定义形状设置框(w/2,h/2);
CreateBody(bodyDef).CreateFixture(fixDef);
}    
createWall(0,0,2,0.1);
createWall(0,0,0.1,2);
createWall(2,0,0.1,2);
createWall(0,2,2,0.1);
//创造球
fixDef.shape=新的b2CircleShape(0.2);
bodyDef.type=b2Body.b2_dynamicBody;
bodyDef.position=新b2Vec2(1.5,1.0);
bodyDef.linearVelocity=新b2Vec2(球速、球速);
CreateBody(bodyDef).CreateFixture(fixDef);
(函数循环(){
世界。步骤(1/60、10、10);
world.DrawDebugData();
世界;
设置超时(循环,15);
})();
});    

尝试将Box2D.Common.b2Settings.b2\u velocityThreshold的值更改为零


谢谢。对于libGDX,等价物似乎是com.badlogic.gdx.physics.box2d.World.setVelocityThreshold(0);