Android Rect.intersect()不工作/没用?

时间:2013-05-09 03:50:10

标签: java android

我正在尝试实施基本碰撞,似乎无法弄清楚如何使其发挥作用。到目前为止,我有一个Ball对象,它有一个android Rect边界,并试图测试它是否与一个盒子碰撞。 到目前为止我有这个代码:

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

我已经画出了矩形,它覆盖了整个盒子,但在碰撞时似乎并不总是响应。还画了球的矩形,它应该是它的位置。它有时适用于盒子的左侧,但通过其余部分。 我也可能会遇到非垂直碰撞,所以如果有人知道怎么做,请告诉我。

2 个答案:

答案 0 :(得分:3)

intersect()将球的边界设置为交叉矩形。因此,你的球形边界矩形越来越小。您应该使用intersects()代替。

答案 1 :(得分:0)

修正了它。我忘了更新球类的界限。我不敢相信我花了5个小时试图解决这个问题,这只是一些代码。