设置游戏计时器

时间:2017-06-17 19:54:24

标签: java

我想做一个水果篮游戏。这里的想法是,我想从屏幕顶部到底部绘制水果,我也想用计时器做到这一点。我尝试了几种方法,但我没有得到任何结果。这是我做的,但它完全做错了。

 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() {

}

}

1 个答案:

答案 0 :(得分:1)

您不应该使用循环代码。 Timer的重点是它取代了循环。所有Timer都会按指定的时间间隔生成事件。因此,当生成事件时,您只需调整“Y”值并重新绘制组件。

但是,您不应该使用TimerTask。

应在Event Dispatch Thread (EDT)上更新Swing组件。因此,您应该使用Swing Timer。阅读教程以获得一个工作示例,以帮助您入门。