2012-07-30 26 views
0

我正在做一個乒乓球克隆來練習我的編碼,而且我一直被卡在讓球能夠改變角度的時候被槳擊中。需要更好的方式在乒乓球遊戲中製作球角

我目前的實現有一個deltaX和deltaY的球,它隨遊戲循環移動來移動球。我這樣做的方式是,如果在槳移動時擊球,則deltaY會根據槳的方向而增加或減少,但這對遊戲來說根本感覺不到自然。

有沒有人知道這樣做的更好方法?

+1

請提供SSCCE(短的,自包含的,正確的例子) – 2012-07-30 11:15:03

+0

在紙上畫出來:如果一個球擊中90度會發生什麼?什麼在45?什麼在-30?然後寫一個函數來轉換這個角度。 – Konerak 2012-07-30 11:16:03

+0

如何定義角度?從槳或從法線到槳? – 2012-07-30 11:20:18

回答

2

我會做的第一件事是將deltaX和deltaY更改爲ballAngle和deltaSpeed。這樣你就可以從直角座標系移動到極座標系。由於球的運動性質(在每次碰撞時以直線變化並改變線的角度),這將使您的工作更輕鬆。從現在開始,你只需要更換ballAngle來更新球的方向。

但是,您必須更新繪製球的功能,使其從極座標移回到直角座標,以便您可以將其顯示在屏幕上。高中三角的一點點就會讓你根據你的角度和速度計算屏幕上的位置增量:

newPosition = oldPosition + movementVector 

有:

movementVector.x = deltaSpeed*cos(ballAngle) 
movementVector.y = deltaSpeed*sin(ballAngle) 

當然這些方程可能需要根據相對於一些修改你測量球的角度。

現在要在每次碰撞槳葉時修改球的角度,您只需根據碰觸槳的哪一部分增加或減少球的角度,並且繪圖功能中的數學應該考慮更新x和y的位置。

我希望這會有所幫助。

+0

這聽起來像個好主意。謝謝! – 2012-07-30 11:38:33

+0

您可以計算碰撞後的新角度,只需將360度減去實際角度(假設0º爲正確方向)。此外,如果你的槳正在移動,你可以修改它。這就是說,如果在碰撞的瞬間球拍向右移動,球會在一定程度上束縛球拍。 – polypiel 2012-07-30 12:03:21

+0

減360會讓它走向另一條路,但非常不切實際。最理想的情況是,你想知道球在哪個角度碰到了槳,並且相對於槳的正常狀態來鏡像它。有點像反射,相對於正常鏡像。現在他想要做的就是根據槳的擊球位置更傾斜角度,這對於通用磚塊擊球或乒乓球比賽來說是標準的。 – 2012-07-30 12:46:35