2014-11-16 43 views
1

因此,我有兩個單獨的檢測碰撞的球員槳和敵人槳和球員槳我已經評論了什麼似乎是需要根據擊中的地點反彈球的數學計算。沒有評論的代碼只是在每次反彈時反轉速度(速度是一個浮點值)時您所期望的彈回屏幕上的球。所以對於初學者來說,註釋掉的配方實際上是否是正確的配方,如果是這樣的話,它是否需要在與槳碰撞時應用於xSpeed和ySpeed?如何讓一個球從一個特定的角度反彈到一個特定的角度,這取決於它撞擊槳葉的位置?

當我看到這個公式時,它將BallAngle或PaddleAngle作爲參數(我不記得說實話了)。現在,如果這是一個正確的公式,我怎麼才能得到這個角度呢?我只是在那裏使用整數(用於測試),因爲我不知道如何獲得角度。

if (ball.getPosition().x < (player.getPosition().x) //PLAYER COLLISION DETECTION 
&& (ball.getPosition().y + (ball.getRadius() * 2)) >= player.getPosition().y 
&& ball.getPosition().y <= (player.getPosition().y + player.getSize().y)) 
{ 
    xSpeed = -xSpeed; 
    //xSpeed = xSpeed*cos(91); 
    //ySpeed = ySpeed*sin(90); 
    ball.move(xSpeed, ySpeed);    
} 

if (ball.getPosition().x > enemy.getPosition().x - 30 //ENEMY COLLISION DETECTION 
&& (ball.getPosition().y + (ball.getRadius() * 2)) >= enemy.getPosition().y 
&& ball.getPosition().y <= (enemy.getPosition().y + enemy.getSize().y)) 
{ 
    xSpeed = -xSpeed; 
    ball.move(xSpeed, ySpeed); 
} 
+0

你期望這段代碼做什麼?它實際上做了什麼?顯示其輸入和輸出的例子。 –

+0

現在的代碼只是反轉速度,所以當球擊中槳時,它會以90度的角度反彈。顯然,90度角應該基於球撞擊槳的位置(離中間越遠,角度越大)。 – BuzzKill

+0

爲什麼角度取決於撞擊槳的位置?槳是否意圖彎曲? – sjdowling

回答

0

cos(91)略低於-1,想必是指扭轉X方向和慢下來,由於影響。 sin(90)幾乎是一個,所以大概是爲了減慢它的速度。

當然,這些函數實際上相當昂貴的計算,所以你可能只是硬編碼值。

const float xBounce = -0.99436746092 
const float yBounce = 0.8939966636 
... 
xSpeed *= xBounce; 
ySpeed *= yBounce; 
ball.move(xSpeed, ySpeed); 
+0

那些常數值只在那裏,因爲1.我正在測試不同的值,看它是如何影響角度的。 2.因爲我不知道什麼樣的角度變量需要作爲cin()和cos()的參數。所以基本上我不能在那裏放置任何常數值,否則無論球在哪裏碰到槳,它都會以一定的角度反彈。如果我在代碼中註釋出的公式是正確的,那麼他們應該看起來像這樣,但是「角度」是我不知道如何計算的。 xSpeed = xSpeed * cos(Angle); ySpeed = ySpeed * sin(Angle); – BuzzKill

相關問題