2013-03-30 103 views
3

我正在做一個簡單的突破遊戲,當球碰到頂部邊框時,我有一些問題如何計算角度。當球以180度的角度向上移動時,它以0度的角度向下回彈。但是當球以170度的角度向上移動時,它應該以10度的鏡像角向下回彈。我可以計算出這個像180-170 = 10度,但如果球以190度的角度向上移動怎麼辦!?然後它應該以350度的角度向下反彈,但我不知道如何計算這個!?彈跳球計算度

有沒有簡單的方法來計算或鏡像球的向上移動角度的值?因爲我不擅長數學,所以請幫助一些幫助!謝謝!

編輯: 我轉移球是這樣的:

xPos += speed * Math.sin(Math.toRadians(direction)); 
yPos += speed * Math.cos(Math.toRadians(direction)); 
+1

只是否定x和y的值,當他們到達牆壁..不需要計算度數檢查這可能是有益的http://learnersdirectory.blogspot.in/2012/11/android-brick-game- tutorial.html – Pragnani

+0

這是否真的有效!?我讀了代碼,但是我找不到發生什麼否定事件!?你能用一個例子來回答我的問題嗎? –

+0

if(x> gameview.getWidth() - width-speedx || x + speedx <0) { speedx = -speedx; } if(y> gameview.getHeight() - height-speedy || y + speedy <0) { speedy = -speedy; } – Pragnani

回答

4

要回答你有關的角度和思考問題:

  1. 決定你的角度測量系統。你告訴一個向上移動的球的角度爲180°,所以我猜指向下,逆時針方向的角度增加(90°指向右邊等)。保持一致非常重要。讓d爲該球在該系統中的移動角度。

  2. 定義邊界法線向量的角度。如果頂部的邊界是水平的,那麼它的法向量垂直於它,並且角度爲(在點1中定義的測量系統中)。讓n成爲那個角度。垂直邊框將有n = 90°

    o = 2*n - d - 180°

    請注意,您可能需要正常化這個角度,即從Ø加/減360°到/直到0° <= o < 360°

  3. 出射角度的球o由下式給出。

您與d = 190°, n = 0°例如:

o = 2*0° - 190° - 180° = -370° 

這將導致在正常化後o = 350°,符合市場預期。

0

這很容易。當水平面的彈跳只是改變其垂直速度的符號。並且當它垂直垂直速度的垂直牆改變標誌時。我希望你的速度和座標是2D向量(水平和垂直分量對),如x,y作爲球座標,vX,vY作爲球速。

也許這是一個好主意,當球擊中磚塊後,就在擊球之前退後一步,然後進行速度組分符號反轉。