2013-11-21 41 views
0

當我有一對問題時,我正在用kripken的box2d「玩」。我選擇了這個分支,因爲它似乎是最快和最常用的。Box2d.js衝動/部隊和初始位置

  1. API定義了bodyDef上的位置,但是您必須將它放在body上。
  2. 力量,衝動,...保持附着在身體上,以令人意想不到的速度。

以前有人得到這些行爲嗎?有人有任何提示嗎?

這來自於一個複雜的應用程序,但我已經簡化了演示:

<html> 
<head> 
    <script src="http://kripken.github.io/box2d.js/box2d.js"></script> 
</head> 
<body> 
<script> 
    // gravity 0 for top view scene 
    var world = new Box2D.b2World(new Box2D.b2Vec2(0, 0), true); 

    var bodyDef = new Box2D.b2BodyDef(); 
    bodyDef.set_type(Box2D.b2_dynamicBody); 
    bodyDef.set_position(40,40); 

    var body = world.CreateBody(bodyDef); 
    // ISSUE 1 
    // without these two lines real position is 0,0 
    body.GetPosition().set_x(40); 
    body.GetPosition().set_y(40); 

    var dynamicBox = new Box2D.b2PolygonShape(); 
    dynamicBox.SetAsBox(5.0, 5.0); 

    var fixtureDef = new Box2D.b2FixtureDef(); 
    fixtureDef.set_shape(dynamicBox); 
    fixtureDef.set_density(1); 
    fixtureDef.set_friction(0.8); 
    fixtureDef.set_restitution(0.5); 

    body.CreateFixture(fixtureDef); 

    //ISSUE 2 
    // Never ending movements 
    //body.ApplyLinearImpulse(new Box2D.b2Vec2(5,5),body.GetWorldCenter()); 
    body.ApplyForce(new Box2D.b2Vec2(50,50),body.GetWorldCenter()); 

    function update() { 
     world.Step(1/30, 10, 10); 
     world.ClearForces();  
     console.log(body.GetPosition().get_x()+","+body.GetPosition().get_x()); 
    } 

    setInterval(update, 1000/60); 

</script> 
</body> 
</html> 

回答

0

對於問題1,set_position應該期待一個b2Vec2參數。試試這個:

bodyDef.set_position(new b2Vec2(40, 40)); 
0

我得到了更多的問題,所以最後我切換到box2dweb。較舊,但更多測試和更穩定。