2017-04-12 80 views
0

我剛剛開始使用box2d,我試圖讓一個火箭(現在是矩形)飛行,它只是在遊戲開始時垂直站立,我想從矩形的底部,因爲這是發動機的位置,也是矩形面對的方向。 我試着這樣做libgdx在矩形方向上施加力正面臨着

body.applyLinearImpulse(getUserData().getBoosterLinearImpulse(), new Vector2(body.getWorldCenter().x, body.getWorldCenter().y - Constants.ROCKET_HEIGHT), true); 

這是按下屏幕的右下角時被執行的方法。它只在矩形靜止時才起作用。 我顯然不知道自己在做什麼。 我還有另一個問題:applyLineairForce和applyForce之間有什麼區別,以及我如何最好地學習如何使用box2d,因爲我覺得它不容易(這不是問題)?

回答

0

如果我理解這個權利,你想知道applyLinearImpulse和applyForce之間的區別。衝動是一種通常用於遊戲中跳躍的力量的一次性應用,而力量則是每幀應用的東西,用於提高汽車的速度。

爲了讓您對其施加外力你的火箭,你可以使用這樣的事情:

 // gets x force based on angle 
     float x = (float)Math.sin(body.getAngle() - Math.PI); // minus PI as objects start off facing right 
     // gets y force based on angle 
     float y = (float)Math.cos(body.getAngle()); 

     //apply force to center (applies force to middle so no rotation) 
     //body.applyForceToCenter(new Vector2(
     //  body.getMass()* (x * 12), 
     //  body.getMass()*(y*12)), true); 

     //NOTE: bodies must be set to .fixedRotation = false in order to rotate; 

     //apply force to a point on body (will create rotational force) 
     body.applyForce(new Vector2(
       body.getMass()* (x * 12),//x force to apply 
       body.getMass()* (y * 12)), //y force to apply 
       // apply force to body at 0.5f(halfway for 1f wide object) x and -5 y 
       body.getWorldPoint(new Vector2(0.5f,-5)),true); 
+0

好吧,謝謝,我會盡力做到這一點。另一個問題:你是如何學習這一切的?使用box2d?因爲我無法理解libgdx/box2d文檔。 – DreamsInHD

+0

我親自通過反覆試驗和大量閱讀iforce2d [鏈接](http://www.iforce2d.net/b2dtut/introduction)指南瞭解到。從頭開始的遊戲有一個很好的教程[鏈接](http://www.gamefromscratch.com/post/2014/08/27/LibGDX-Tutorial-13-Physics-with-Box2D-Part-1-A-Basic-Physics -Simulations.aspx) – dfour

+0

好的,非常感謝我也開始這樣做。在你回答主要問題時:你能解釋最後一行代碼嗎?你在身體的多個部位施加力量嗎?你會如何將力量施加到底部,以便火箭在垂直站立時向上移動,以便它朝着「指向」方向移動? – DreamsInHD