2014-04-01 22 views
0

编辑:这里是完整的代码:https://dl.dropboxusercontent.com/u/65678182/assignment1.rar任何可能的帮助,高度赞赏!如何使我的碰撞检查矩形之间的相交工作?


我正在尝试制作突破游戏的副本,但我在检查两个对象(球和桨)相交时遇到问题。

我有碰撞检测这种方法现在:

public static void handleCollisions() 
    { 

     System.out.println(ball.getBounds());  // just to check that they     
     System.out.println(paddle.getBounds());  //are there and moving correct 

     if (ball.getBounds().intersects(paddle.getBounds())) 
      { 
     System.out.println("collision"); 
      } 
    } 

我敢肯定的getBounds工作,因为他们应该,因为我从得到的println这些输出: java.awt.Rectangle中的[X = 393,Y = 788,宽度= 14,高度= 14] java.awt.Rectangle中[X = 350,Y = 350,宽度= 100,高度= 10]

getBounds code: 
    public static Rectangle getBounds() 
    { 
     return new Rectangle(x, y, radius*2, radius*2);      
    } 

,我可以看到他们的移动在某一时刻它们重叠,但该方法从未检测到它。

我对此很新,所以希望它只是一些愚蠢的错误的地方,任何帮助表示赞赏。如有必要,我可以发布更多的代码,但宁愿不要。

+0

'Rectangle.intersects()'的工作原理和你迄今向我们展示的内容似乎没问题。问题在其他地方,你没有向我们展示的部分。例如,你确定你应该是在调用'handleCollisions()'吗?你确定'ball'和'paddle'是否正确地引用了所讨论的对象?当你在每一帧打印他们的边界框值,你真的看到它们重叠?作为一个测试,试着将球的位置初始化,直接放在桨的顶部,并禁用运动;这将使您更容易看到您的碰撞检测是否正常工作。 –

+0

如果您向我们展示的输出是* only *输出,则表明您没有在每一帧调用'handleCollisions()',因为您希望看到多个打印输出(加上您向我们展示的示例实际上并不相交,但我假设这是因为它只是一个任意的例子)。 –

+0

有一个可运行的例子吗? – MadProgrammer

回答

3
java.awt.Rectangle[x=393,y=788,width=14,height=14] 
java.awt.Rectangle[x=350,y=350,width=100,height=10] 

正如你可以看到第二个矩形的Y /身高350/10,但第一的Y = 788

显然,他们没有交集一个高于另一个

UPDATE 一件事

public static Rectangle getBounds() 
{ 
    return new Rectangle(x, y, radius*2, radius*2);      
} 

如果x和y是球的中心,代码应该是

public static Rectangle getBounds() 
{ 
    return new Rectangle(x-radius, y-radius, radius*2, radius*2);      
} 
+1

走出这里的一个肢体,但我怀疑这只是示例输出操作正在倾倒到标准输出..只是说... – MadProgrammer

+0

是的,这只是一个例子,我确实每步都得到一个outprint,并且他们似乎正在向右移动,对应于我可以在屏幕上看到的内容 – user3483682

+0

@MadProgrammer答案更新 – StanislavL