Java 冲突逻辑错误

Java 冲突逻辑错误,java,swing,jframe,Java,Swing,Jframe,我正试着做一个乒乓球游戏,我被困在了碰撞检测上。问题来自下面的方法。我搞不懂我的逻辑错误。注意:player1和Circle都是矩形的对象,我正在使用它们来使它们彼此交互。 多谢各位 public void moveBall(){ ball.x += speed; //checks if the ball intersects with the paddle Player 1 if (ball.intersects(player2) && ball.g

我正试着做一个乒乓球游戏,我被困在了碰撞检测上。问题来自下面的方法。我搞不懂我的逻辑错误。注意:player1和Circle都是矩形的对象,我正在使用它们来使它们彼此交互。 多谢各位

public void moveBall(){
    ball.x += speed;

    //checks if the ball intersects with the paddle Player 1 
    if (ball.intersects(player2) && ball.getY() >= player2.getY() && ball.getY() <= player2.getY() + 70){
        speed *= (-1);
    }


}
public void moveBall(){
球.x+=速度;
//检查球是否与划桨运动员1相交

if(ball.intersects(player2)&&ball.getY()>=player2.getY()&&ball.getY()你的问题可能是,一旦球碰到球员,速度就乘以-1,然后球移动,但是球移动得不够远,因此碰撞可能会再次记录,导致速度再次乘以-1。要解决这个问题,只需在更改“速度”的值后移动球即可

解决方案:

public void moveBall(){
ball.x += speed;

//checks if the ball intersects with the paddle Player 1 
if (ball.intersects(player2) ){
    speed *= (-1);
   ball.x += 3*speed;
}
}


另外,您不需要线
ball.getY()>=player2.getY()&&ball.getY(),您的
与()
method do?我猜这是一个复制/粘贴错误,但是你的评论说你在检查玩家1的交叉点,代码看起来像是在检查玩家2。@azurefrog看来,
ball
可能是一个长方形,在这种情况下,如果没有其他代码/解释的话,就很难判断在旁注中,不要做
speed*= (-1);
。改用
speed=-speed;
。@phflack它可能是,但我宁愿让OP包含更多信息,而不是花时间猜测。我尝试了你上面所说的,但仍然不起作用。出于某种原因,球只会在击中相同的X轴而不是Y轴时发生偏转。只是更改了一些变量名称,发现了我的问题m、 谢谢!