2013-10-29 29 views
1

我正在製作apong遊戲,在Paddle類的布爾方法中,我想確定球是否觸及任何兩個槳,我正在努力尋找適當的邏輯......球接觸了其中一個槳嗎?

這裏是變量:

// instance variables 
private Screen theScreen; 
private MyroRectangle theRectangle; 
private int topLeftX; 
private int topLeftY; 


// constants 
private final int HEIGHT = 100;   //the paddle's fixed height 
private final int WIDTH = 5;   //the paddle's fixed width 
private final int PIXELS_PER_MOVE = 20; //the number of pixels a paddle can move either up or down in one timestep 

這裏是方法:*,此方法只確定球接觸或不它不會做任何與彈跳球回

public boolean isTouching(Ball b) 
{ 

    boolean t = false; 
    if ((theScreen.getWidth()-(b.getX() + b.getRadius())) >= theScreen.getWidth()-theRectangle.getCenterX()) 
      { 
t= true; 
} 

    return t; 

也是我想:

if ((b.getX() > theRectangle.getCenterX()/2) && (b.getY() < theRectangle.getCenterY()/2)) 

========== **,可能需要球類的方法:

getX() 
getY() 
getRadius() 

============= =

** Rectangle類:

getCenterX() 
getCenterY() 

===============

**屏幕類:

getWidth() 
getHeight() 

我只是想確定至少的條件,然後我可以找出其餘的人。

回答

0

在大學三年級時,我爲Windows Phone開發了碰撞檢測系統算法。這並不完美,但效率極高,可以適應大多數遊戲。

它的工作方式非常簡單。有兩種類型的對象;可碰撞物體(如敵人或建築物)以及您希望檢查與這些可碰撞物體碰撞的物體。

當我正在瀏覽一個數據結構類並討論鏈接列表時,我有這個想法。我想,如果每個鏈接都是一個可碰撞的對象,那麼你可以將你已經創建的遊戲對象粘貼在其中。然後,隨着遊戲對象移動,您將有一個輕量級的方式來檢查他們的位置是否有碰撞。因此我的系統誕生了。

基本上它歸結爲是使用

C(或點之間的距離)= SqrRoot(A^2 + B^2) - 球的半徑

這個公式應該對你看起來很熟悉。

你可以看到在這個問題上的完整的答案: Java More Resourceful Collision Detection

0

這個問題可以被看作是解決如果兩個2D-領域的問題,槳(矩形)和球(圓)相交。你可以只爲谷歌/維基公式。

如果您不想進入通過幾何解決問題的數學計算中,java.awt.geom包中包含可以爲您計算的類,即java.awt.Area。你只需要爲paddle和ball創建Area實例,然後調用intersects()方法來知道它們是否發生了碰撞。