2017-04-07 147 views
0

您好,我試圖讓一個乒乓球比賽用java和一切正常,除了衝撞部大。我首先使用邊界類和相交的方法來解決這一衝突問題,但這種方法只適用於在我畫的圖片所示的碰撞情況。的Java傍碰撞檢測

error case

所以我寫了自己新的代碼,而不是使用邊界類的,我成功創建的側面碰撞檢測方法,但我再次有時間難以解決的碰撞檢測的板頂部和底部。

public boolean collideRight(Ball ball){ 
    if(ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

這是我爲頂部和底部碰撞檢測所做的方法。

public boolean collideRightUpSide(Ball ball){ 
    if((ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&ball.getLayoutX()-ball.getRadius()<=player.getLayoutX()+width)&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

有人能幫我嗎。

+3

我真的不是故意無禮,但你應該在遊戲中的物理/碰撞基本閱讀起來。這個東西很複雜,有幾種方法。 – domsson

+0

所以我應該只是在谷歌鍵入遊戲物理/碰撞基本知識?順便謝謝你的建議,我真的很感激它。這是我第一次發佈關於stackoverflow的問題,並且人們超出我的預期。謝謝:) –

回答

0

嘗試以包括如果一個函數,它看起來像這樣的語句:

public boolean collideFunction(Ball ball){ 
    if(ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else if((ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()&&ball.getLayoutX()-ball.getRadius()<=player.getLayoutX()+width)&&(ball.getLayoutY()+ball.getRadius()>=player.getLayoutY()&&ball.getLayoutY()-ball.getRadius()<=player.getLayoutY()+height)){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 
+0

我只是想你的意見,如果我做側邊檢測代碼是第一個if語句,然後使頂部和底部檢測代碼是未來否則,如果只有第一個if語句正常工作,這是側邊檢測代碼。因此,如果我更改它們的順序,這次只有頂部和底部檢測代碼有效。謝謝你的建議雖然:) –

+0

也許你可以嘗試,並添加同時實現在一個if語句,像這樣的條件: '公佈爾collideFunction(球球){ 布爾右= ball.getLayoutX()+球。 getRadius()> = player.getLayoutX().....; 布爾邊=(ball.getLayoutX()+ ball.getRadius()> = player.getLayoutX()......; 如果(右|側){ 迴歸真實; } 其他{ 返回假; } }' – mbhargav294