2013-04-23 57 views
0

我想编码一个GUI,允许用户移动一个盒子。屏幕上还有另一个框,称为“块”,该框不允许相交。我的盒子移动得很好,但我不知道如何阻止两者相交,并在屏幕上保留盒子的图形。现在,盒子在碰到块时消失了(我知道它为什么这样做,我只是不知道如何解决它)。停止框移动,如果它击中另一个盒子

X和Y是由左右鼠标键检测到的移动。

box = new Rectangle2D.Double(0 + X, 0 + Y, 200, 50); 
block = new Rectangle2D.Double(300, 300, 50, 50); 

if (box.intersects(block)) { 
     hit = true; 

    } else { 
     hit = false; 
    }  

Graphics2D g2 = (Graphics2D) g; 
    g2.setPaint(Color.red); 
    g2.draw(block); 
    if (model.hit()) { 
     g2.setPaint(Color.black); 
     g2.drawString("WHOA THERE", 20, 50); 
    } else { 
    g2.setPaint(Color.blue); 
    g2.fill(box); 
+1

您能否提供有关盒子移动的更多信息?你应该做的是检测交叉点,当你试图更新框的位置,而不是绘制时。 – 2013-04-23 18:20:07

回答

0

我对你的要求有点不清楚。如果你问的是如何绘制盒子,那么问题在于你的if/else语句。在if情况下,它跳过绘图块。即使碰到盒子,也可以移除其他盒子。

如果你问如何防止这两个盒子相交,那很简单。如果您检测到它们相交,请移动移动框,使其位于块的外面。因此,如果块位于x = 10处,请设置移动框(model?),使其位于x = 11处。HTH

+0

我的问题是它打印警告消息“WHOA THERE”,但继续让箱子通过该块。 – user1676471 2013-04-23 18:26:12

+0

当你得到方块的更新位置时,找出与方块的交点。如果相交,请设置方框的位置,使其不与方块相交。 – Frecklefoot 2013-04-23 18:29:25

+0

如果这不清楚,发布您的KeyListener,我可以向您展示实际的代码。 – Frecklefoot 2013-04-23 18:39:50

相关问题