我该如何制作计时器?

时间:2013-07-16 20:52:41

标签: java timer

我有这段代码:

if (main.isGoingLeft1)
{
    g.drawImage(playerLeft1,x,y,null);
    main.isGoingLeft2 = true;
}

我试图将Thread.sleep放在那里,但它会停止整个游戏,所以这不是一个好主意。

我想在drawImage之间设置一个计时器,并将boolean设置为true。 所以,如果你能告诉我或告诉我如何制作计时器,那就太棒了。

3 个答案:

答案 0 :(得分:5)

您需要使用javax.swing.Timer来制作动画。

Timer t=new Timer(2,new ActionListener(){
     public void actionPerformed(ActionEvent ae)
     {
      // your animation code
     }
});
t.start();

上述计时器每2毫秒执行一次,即每2毫秒触发一次ActionEvent。如果要停止它,可以使用t.stop()方法。

请参阅javax.swing.Timer以及How to use swing timers

答案 1 :(得分:1)

Hummm,基于你的代码片段,它似乎不起作用。要使用swing timerjava util timer之类的计时器,您的程序中必须有线程。

使用线程,将会有并行运行的代码,您可以准备一些类来接收来自计时器的信号,然后采取一些措施。

在您展示的代码中,似乎您希望在其他事情之后发生某些事情,但经过一段时间的延迟。并且您希望程序继续处理其他内容,但似乎没有任何迹象表明您的代码已准备好并行运行。

要做到这一点,你将有一个线程处理goingLeft1,另一个线程处理goingLeft2,它们将通过消息进行通信,而不仅仅是通过直接设置属性。

答案 2 :(得分:0)

是的,正如java技术所说,你可以在基于swing的应用程序中使用swing计时器,而不是使用java.util.Timer .. 在这里使用swiing计时器的好处是你不需要创建一个单独的线程来执行计时器。你的代码冻结了X毫秒,因为它运行在整个代码运行的同一个线程上。如果你想以秒为单位显示经过的时间,你可以使用类似的东西

Timer timer = new Timer(1000,new ActionListener()

{

public void actionPerformed(ActionEvent ae)

{

    endTime=System.currentTimeMillis();
    tempTime=(int)((endTime-startTime)/1000);
    if(tempTime>30)
    {
        timer.stop();
        displayResult();
    }
    someLabel.setText("Time left : "+(30-tempTime)+" seconds");
}

}

此代码显示30秒(30,29,28 ... 1)的剩余时间,然后停止。