2012-04-14 222 views
2

我一直在與jbox2d搞混,當身體的X速度受到世界的重力影響時感到驚訝。這裏是我的代碼:setLinearVelocity()未按預期工作

//create world 
    Vec2 gravity = new Vec2(0, 1); 
    boolean sleep = true; 
    world = new World(gravity, sleep); 
    //create wheel 
    BodyDef wheelBodyDef = new BodyDef(); 
    wheelBodyDef.type = BodyType.DYNAMIC; 
    wheelBody = world.createBody(wheelBodyDef); 
    CircleShape circleShape = new CircleShape(); 
    FixtureDef wheelFixtureDef = new FixtureDef(); 
    wheelFixtureDef.shape = circleShape; 
    Fixture wheelFixture = wheelBody.createFixture(wheelFixtureDef); 
    wheelBody.setLinearVelocity(new Vec2(50, 0)); 

的線速度僅使一個顯著區別,如果我申請它的每一個幀,或者如果我禁用重力。任何人都可以弄清楚我做錯了什麼?

回答

1

Box2d不支持零重力模擬;這就是爲什麼當你禁用重力時你看不出什麼區別。此外,您可能看到幾乎沒有什麼區別,因爲(0, 1)的重力非常弱;嘗試(0, 10)

另外setLinearVelocity是rayCast功能。您可能正在尋找applyForce()

0

如果您在一個物體上設置線速度,意味着它將以矢量的方向設置一個速度。如果您禁用重力,則不會影響此運動,但啓用重力後,其運動會受到每一幀重力的影響。如果你將蘋果扔到太空中,它會沿着射擊的方向無限移動,但是在地球上,重力不斷地將它拉下來。如果你想以你想要的方向直線移動身體,那麼你必須設定每一幀的線速度。觀看this教程,#2.35和#2.36,那裏的問題很好解釋。

祝你好運