对于我正在制作的游戏,我需要绘制一个越来越小的矩形。我已经想出了如何使用像这样的摇摆定时器来绘制更小的矩形:
timer = new Timer(100, new ActionListener(){
public void actionPerformed(ActionEvent e){
Graphics2D g2d = (Graphics2D) panel.getGraphics();
if(width > 64){
g2d.drawRect(x,y,width,height);
x += 1;
y += 1;
width -= 1;
height -= 1;
}
}
});
timer.start();
我遇到的问题是,它不会删除之前绘制的矩形,所以它看起来不会缩小,而是更像是在填充。那么,如何在绘制较小的矩形后立即删除先前绘制的矩形呢?
你可以从以下开始:-
改变:
Graphics2D g2d = (Graphics2D) panel.getGraphics();
到:
repaint();
getGraphics()
中的Graphics
实例是瞬态的,当JVM认为有必要时,可能会重新绘制窗口。
重写的方法可能如下所示。
@Override
public void paintComponent(Graphics g){
super.paintComponent(g); // Effectively clears the BG
Graphics2D g2d = (Graphics2D)g;
if(width > 64){
g2d.drawRect(x,y,width,height);
x += 1;
y += 1;
width -= 1;
height -= 1;
}
// Toolkit.getDefaultToolkit().sync();
// g2d.dispose(); NO! Don't dispose of this graphics instance
}