2011-07-22 78 views
3

我一直試圖進入Box2DWeb這是一個Box2D的AS端口的JS端口。只是試圖在有靜態斜坡和動態框落在其上的情況下進行簡單設置。這裏是我的代碼:Box2D主體在碰撞時不旋轉

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

var width = 8; 
var height = 4; 

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

var debugDraw = new b2DebugDraw(); 
debugDraw.SetSprite(document.getElementById("canvas").getContext("2d")); 
debugDraw.SetDrawScale(100); //Arena is 8 meters by 4 meters 
debugDraw.SetFillAlpha(0.5); 
debugDraw.SetLineThickness(1); 
debugDraw.SetFlags(b2DebugDraw.e_shapeBit); 
world.SetDebugDraw(debugDraw); 

var bodyDef = new b2BodyDef(); 
bodyDef.type = b2Body.b2_staticBody; 
bodyDef.position.Set(3.5, 3) 
var body = world.CreateBody(bodyDef); 
body.SetAngle(Math.PI/4); 
var shape = new b2PolygonShape(); 
shape.SetAsBox(1, 0.25); 
var fixtureDef = new b2FixtureDef(); 
fixtureDef.shape = shape; 
fixtureDef.density = 1; 
fixtureDef.friction = 0.3; 
body.CreateFixture(fixtureDef); 

var bodyDef = new b2BodyDef(); 
bodyDef.type = b2Body.b2_dynamicBody; 
bodyDef.position.Set(3.5, 1) 
var body = world.CreateBody(bodyDef); 
var shape = new b2PolygonShape(); 
shape.SetAsBox(0.10, 0.10); 
var fixtureDef = new b2FixtureDef(); 
fixtureDef.shape = shape; 
body.CreateFixture(fixtureDef); 

setInterval(function() { 
    world.Step(1/60, 10, 10); 
    world.DrawDebugData(); 
    world.ClearForces(); 
    console.log(body.GetAngle()); 
}, 1000/60); 

你可以看到實時結果on jsFiddle。正如你所看到的那樣,箱子在撞到坡道時不會旋轉。我究竟做錯了什麼?

謝謝。

一些ressources:

回答

14

添加摩擦和密度的框。 ...並且不要立即離開irc頻道,有時需要3分鐘以上。

+3

我不得不離開了LAN聚會,我知道的錯綜複雜的IRC。謝謝您的幫助! –

+0

只需要密度 – eliteslayer

5

嗯,你必須設置摩擦&密度落在對象的夾具,而不是身體。

var fixtureDef = new b2FixtureDef(); 
fixtureDef.shape = shape; 
fixtureDef.friction = 0.3 
fixtureDef.density = 1 
body.CreateFixture(fixtureDef); 

順便說一句感謝指着我的Box2D的方向 - 我從來沒有見過那個物理引擎,看起來很有趣:)

+1

只是密度應該足以解決這個問題 – iforce2d