2013-05-09 25 views
0

我试图实现基本的碰撞,似乎无法弄清楚如何使其工作。到目前为止,我有一个Ball对象,它具有android Rect范围,并试图测试它是否与盒子碰撞。 我到目前为止这样的代码:Android的Rect.intersect()不工作/不正确的使用?

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

我画出来的矩形,并覆盖整个框,但似乎并没有发生碰撞时,总是响应。也涂上了球的矩形,它应该是它的位置。它有时适用于盒子的左侧,但通过其余部分。 我也可能会进入非垂直的碰撞,所以如果有人知道如何做到这一点,让我知道。

回答

3

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

+0

我试过了,不适合更新了代码片段,但它似乎没有帮助 – M4trixSh4d0w 2013-05-09 04:20:05

+0

修复了它(还有七个要去) – M4trixSh4d0w 2013-05-09 04:41:25

+0

好你让我想知道。 – 2013-05-09 04:43:49

0

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

+0

这就是我们使用调试器的原因:D – Patashu 2013-05-09 04:42:41