2011-08-27 67 views
2

我想要得到這個代碼來製作一個正方形,它將跟隨你的鼠標在y軸上。現在它只是在每次鼠標移動時創建一個新的方塊,我將如何解決這個問題?重新畫一個正方形?

import java.awt.*; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.awt.geom.*; 

public class Pong { 
    public static void main(String args[]) { 
     Frame f = new Frame("Pong"); 
     f.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 
     f.add(new PongField(Color.black), BorderLayout.CENTER); 
     f.setResizable(false); 
     f.pack(); 
     f.setVisible(true); 

    } 
} 

class PongField extends Canvas { 

    boolean playing = true; 
    boolean running = true; 

    public PongField(Color mainscreen) { 
     setForeground(mainscreen); 
    } 

    public Dimension getPreferredSize() { 
     return new Dimension(600, 600); 
    } 

    public void paint(Graphics g) { 
     while (true) { 
      Dimension size = getSize(); 
      PointerInfo a = MouseInfo.getPointerInfo(); 
      Point b = a.getLocation(); 

      a = MouseInfo.getPointerInfo(); 
      b = a.getLocation(); 

      int x = size.width/2; 
      int y = (int) b.getY(); 

      g.fillRect(x/x * 10, y, 10, 75); 
      g.drawLine(size.width/2 - 5, 0, size.width/2 - 5, size.height); 

      if (y != (int) b.getY()) 
       y = (int) b.getY(); 
     } 
    } 
} 
+0

你有使用AWT而不是Swing的理由嗎? – Jes

回答

3

你不需要paint()中的循環 - 事實上,這是一個可怕的,可怕的事情,因爲它會凍結整個GUI(沒有其他組件會繪製自己,永遠!)將「while」循環取出,只留下循環體。然後通過添加一個調用repaint()MouseMotionListener來安排調用paint()。在構造函數中,執行如下操作:

addMouseMotionListener(new MouseMotionAdapter() { 
    public void mouseMoved(MouseEvent me) { 
     repaint(); 
    } 
}); 

這應該這樣做。現在,只要鼠標移動,paint()就會被調用。屏幕擦除將自動爲您照顧。

+0

謝謝!這固定了一切! – Mark

0

你看到這個的原因是因爲你必須在每一幀再次繪製正方形之前清除先前繪製的屏幕。您可以通過這樣做:

  1. 每次
  2. 清除整個屏幕採用黑色拉絲黑色僅在以前繪製的區域,然後繪製新的矩形爲白色。

第一種情況是比較容易的,但可能會稍微慢一點(可能不是真的在一個簡單的遊戲像乒乓球明顯的)......而第二種情況是更好的性能,但也更復雜,因爲你必須保持跟蹤您需要清除的區域。

相關問題