【问题标题】:Java Pong collision detectionJava Pong 碰撞检测
【发布时间】:2017-04-07 11:11:25
【问题描述】:

您好,我正在尝试用 java 制作一个乒乓球游戏,除了碰撞部分,一切都很好。我首先使用 Bounds 类和 intersects 方法来解决这个碰撞问题,但是这个方法只适用于我画的图片所示的碰撞情况。

所以我自己编写了新代码,而不是使用 Bounds 类,并且我成功地创建了用于侧面碰撞检测的方法,但我再次很难解决桨顶部和底部的碰撞检测。

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;
    }
}

谁能帮帮我。

【问题讨论】:

  • 我真的不是要粗鲁,但您应该阅读游戏物理/碰撞基础知识。这东西很复杂,有几种方法。
  • 那么我应该在谷歌上输入游戏物理/碰撞基础知识吗?顺便说一句,非常感谢你的建议,我真的很感激。这是我第一次在 stackoverflow 上发布问题,人们比我预期的超级支持。谢谢你:)

标签: java collision-detection pong


【解决方案1】:

尝试在一个函数中包含两个 if 语句,如下所示:

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;
    }
}

【讨论】:

  • 我刚刚尝试了你的建议,如果我将侧面检测代码作为第一个 if 语句,然后将顶部和底部检测代码作为下一个 else if,只有第一个 if 语句正常工作,这就是侧面检测代码。因此,如果我更改它们的顺序,这次只有顶部和底部检测代码有效。不过谢谢你的建议:)
  • 也许您可以尝试在一个 if 语句中添加实现这两个条件,如下所示:` public boolean collideFunction(Ball ball){ boolean right = ball.getLayoutX()+ball.getRadius() >=player.getLayoutX().....; boolean side = (ball.getLayoutX()+ball.getRadius()>=player.getLayoutX()....; if(right | side){ return true; } else{ return false; } } `
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2013-01-31
  • 2011-03-28
  • 1970-01-01
相关资源
最近更新 更多