2017-04-07 149 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