2011-08-27 69 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. 清除整个屏幕采用黑色拉丝黑色仅在以前绘制的区域,然后绘制新的矩形为白色。

第一种情况是比较容易的,但可能会稍微慢一点(可能不是真的在一个简单的游戏像乒乓球明显的)......而第二种情况是更好的性能,但也更复杂,因为你必须保持跟踪您需要清除的区域。

相关问题