2013-01-20 58 views
1

我有一個炮彈,它可以發射炮彈和煙霧粒子效果,我希望炮彈能夠在大炮的末端開始,這可以通過添加大炮的寬度到它的x位置並且把大半的高度加到大炮上。這在大炮未旋轉時正常工作,但是當我將大炮旋轉到不正確的位置時。這是我用來嘗試和旋轉矢量。在libgdx box2d中旋轉矢量,從大炮中發射炮彈

Vector2 rotPos = cannon.position.tmp().add(cannon.bounds.width, cannon.bounds.height/2).rotate(cannon.angle); 

我怎樣才能得到一個旋轉的矢量,在正確的地方發射炮彈球。見下圖。 enter image description here

UPDATE 我試過下面還,同樣的結果球斷到你所描述的問題,左

Vector2 rotPos = world.CannonBody.getWorldVector(world.CannonBody.getPosition()); 
+1

http://stackoverflow.com/questions/9164146/simple-gun-in-cocos2dbox2d-game也見函數GetWorldPoint,它可以給你的起始位置 – iforce2d

+0

Im使用'Vector2 rotPos = world.CannonBody.getWorldVector(world.CannonBody.getPosition());'這個球不會從大炮的盡頭射到,而是像在圖片。 Im使用setTransform旋轉炮身。 – tsukimi

+0

旋轉後從大炮尾部射出球體的方法如何獲得炮身的結束?我有正確的角度和速度,我只需要把球放在正確的位置。 – tsukimi

回答

0

的方式,你已經解決了它只有一個單一的情況下, 。這真的只是一個數學問題。想想你想要拍攝的方向,大炮的桶,作爲圓上的座標。

既然你知道角度,這很容易。在中心繪製一個圓點。然後從中心畫一條直線到右邊。然後從第一條線向上以45度角畫另一條線。用直線連接邊緣上的兩點。你現在有一個三角形。

稱爲45度角線'r'。我們將調用第一行x和最後一行y。

你應該有一些看起來像這樣: http://i.stack.imgur.com/MJNWZ.jpg

我們知道,罪(angleInRadians)= Y/R。做一個小代數,我們可以改變成r * sin(angleInRadians)= y

繁榮,你有你的y座標。

幾乎同樣的事情:COS(angleInRadians)= X/R

所以R * COS(angleInRadians)= X

有你的x座標。

您可以直接從box2d獲得身體的角度,這很容易。您只需爲'r'選擇一個值,該值代表您正在使用的圓的正確半徑,以便以給定角度對大炮炮筒進行概念化。如果大炮圍繞圓的中心旋轉,則r是大炮的長度。

+0

感謝您的回答。我沒有看過一段時間的代碼,這個問題有點老,但我做的數學與你發佈的類似。看到我上面的評論 – tsukimi

+0

,它仍然無法正常工作?這個數學應該適用於角度theta的所有實際值,你確定你是從正確的角度開始的嗎?如果不是這樣,那麼可能是因爲您不正確地將像素座標轉換爲box2d座標。 此外,您可能要考慮使用哪種方法來定位炮彈球。如果我的記憶正確地服務了我,我使用setTransform方法。 –

+0

另外,請確保您分別對x和y座標使用正確的trig函數,而不僅僅是在上面,而是在您的代碼中。反轉它們可能會使其無法正常工作 –