2015-11-16 49 views
0

我指的是下面的開源的Android乒乓球比賽: https://github.com/Grarak/Pong-Android/tree/master/app/src/main/java/com/grarak/pong搞清楚一個Java方法在一個簡單的乒乓球比賽

我能理解所有的方法和他們通過調試代碼,看是如何工作的,其方法以及根據屏幕上發生的情況觸發哪些條件。但是在整個項目中有一種方法我無法弄清楚它的用途,儘管當球碰到屏幕邊緣時它會被大量使用。我只是無法弄清楚爲什麼按照它的方式進行計算,算法的邏輯是什麼。

問題的方法被命名爲「getVelocityY」,但它在這個頁面的底部: https://github.com/Grarak/Pong-Android/blob/master/app/src/main/java/com/grarak/pong/Ball.java

希望得到任何幫助,您可以在搞清楚了這部分出來給。我很樂意回答您可能會遇到的任何問題,如果您希望我以簡單的英文記錄項目的其他方法,以防您想要。

回答

0

這裏是方法的擊穿,即使這是不是真的那麼合適的問題....

private double getVelocityY(Paddle paddle, float radius) { 

設置5個hitboxes以確定哪些區域皮球擊中padddle

Float[][] hitboxes = new Float[5][2]; 
    for (int i = 0; i < hitboxes.length; i++) { 

計算的最低和最高位置爲這個擊中格

 hitboxes[i][0] = (paddle.getLength()/hitboxes.length) * i + paddle.getHeight(); 
     hitboxes[i][1] = (paddle.getLength()/hitboxes.length) * (i + 1) + paddle.getHeight(); 

延長在邊緣設置擊球點,以確保球的邊緣(給定的半徑)仍然會擊中球拍。注意:此代碼可能已被移出迭代。

 if (i == 0) hitboxes[i][0] -= radius; 
     else if (i == hitboxes.length - 1) hitboxes[i][1] += radius; 
    } 

根據球撞擊槳的位置來確定速度的變化。如果它碰到中心,則速度不變。

for (int i = 0; i < hitboxes.length; i++) { 
     if (position.y > hitboxes[i][0] && position.y < hitboxes[i][1]) 
      switch (i) { 
       case 0: 
        return -4; 
       case 4: 
        return 4; 
       case 1: 
        return -2; 
       case 3: 
        return 2; 
      } 
    } 
    return 0; 
} 
+0

謝謝你的回答!所以,如果我理解正確,當我= 2它意味着它是正確的槳,這就是爲什麼沒有「案件」聲明,當我= 2? – Pineapple29

+0

正確!槳被分成5個部分由點擊框表示。它們編號爲0,1,2,3,4。外部(0和4)導致速度發生較大變化,接下來的那些(1和3)會導致較小的變化。中間一個(2)沒有效果。我似乎記得,乒乓球的比賽就是這樣......當擊球時,球速度加快,動作更加尖銳。 –

+0

對不起,但我實際上還是不明白,因爲這個方法只能得到遊戲中2個paddles中的1個,所以爲什麼數組的第二維需要?我認爲它爲每個槳使用了5個撞擊盒,但它實際上使用了10個撞擊盒作爲單槳,並且我不明白他們爲什麼需要重複(2個數組爲5)。 – Pineapple29