2013-04-23 56 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

相關問題