我正在尝试实现基本的碰撞,但似乎无法弄清楚如何使其工作。到目前为止,我有一个Ball
具有 androidRect
边界的对象,并试图测试它是否与一个盒子发生碰撞。到目前为止我有这个代码:
public void collides(Ball ball) {
// if(ball.getX() > getX() - ball.getSize() && ball.getX() < getX() + getWidth() && ball.getY() > getY() && ball.getY() - ball.getSize() < getY() + getHeight()) {
//System.out.println("we got a hit");
if(Rect.intersects(ball.getBounds(),new Rect(getX(), getY(), getX() + getWidth(), getY()-3) ) ) { //bottom
System.out.println("bottom");
ball.setYvel(0);
ball.setXvel(0);
//ball.setYvel(ball.getYvel() * -1);
}
if(Rect.intersects(ball.getBounds(), new Rect(getX(), getY()+getHeight(), getX()+getWidth(), getY()+getHeight()+3)) ) { //top
System.out.println("top");
ball.setYvel(0);
ball.setXvel(0);
//ball.setYvel(ball.getYvel() * -1);
}
if(Rect.intersects(ball.getBounds(), new Rect(getX(), getY(), getX()+3, getY()+getHeight()))) { //left
System.out.println("left");
ball.setXvel(0);
ball.setYvel(0);
//ball.setXvel(ball.getXvel() * -1);
}
if(Rect.intersects(ball.getBounds(), new Rect(getX()+getWidth(), getY(), getX()+getWidth()-3, getY()+getHeight()) )) { //right
System.out.println("right");
ball.setXvel(0);
ball.setYvel(0);
//ball.setXvel(ball.getXvel() * -1);
}
}
我已经画出了矩形,它覆盖了整个盒子,但碰撞时似乎并不总是响应。还画出了球的矩形,它应该在哪里。它有时与盒子的左侧一起工作,但穿过其余部分。我也可能会遇到非垂直碰撞,所以如果有人知道该怎么做,请告诉我。