我想做一个水果篮游戏。这里的想法是,我想从屏幕顶部到底部绘制水果,我也想用计时器做到这一点。我尝试了几种方法,但我没有得到任何结果。这是我做的,但它完全做错了。
Timer timer = new Timer();
while (getY() != 1500) {
timer.schedule(new DrawFruit(frame, g, x) {
@Override
public void run() {
g.drawImage(Toolkit.getDefaultToolkit().getImage(Panel.class.getResource(Consts.ImageResource.APRICOT_DIR)), 500, getY(), frame);
frame.repaint();
setY(getY() + 30);
}
}, 0, 1000);
}
和DrawFruit类
abstract class DrawFruit extends TimerTask {
private JFrame jFrame;
private Graphics g;
private int x;
public JFrame getJFrame() {
return jFrame;
}
public void setJFrame(JFrame jFrame) {
this.jFrame = jFrame;
}
public Graphics getG() {
return g;
}
public void setG(Graphics g) {
this.g = g;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public DrawFruit(JFrame frame , Graphics g , int x){
setJFrame(frame);
setG(g);
setX(x);
}
@Override
public void run() {
}
}
答案 0 :(得分:1)
您不应该使用循环代码。 Timer的重点是它取代了循环。所有Timer都会按指定的时间间隔生成事件。因此,当生成事件时,您只需调整“Y”值并重新绘制组件。
但是,您不应该使用TimerTask。
应在Event Dispatch Thread (EDT)
上更新Swing组件。因此,您应该使用Swing Timer。阅读教程以获得一个工作示例,以帮助您入门。