我有这段代码:
if (main.isGoingLeft1)
{
g.drawImage(playerLeft1,x,y,null);
main.isGoingLeft2 = true;
}
我试图将Thread.sleep
放在那里,但它会停止整个游戏,所以这不是一个好主意。
我想在drawImage
之间设置一个计时器,并将boolean
设置为true。
所以,如果你能告诉我或告诉我如何制作计时器,那就太棒了。
答案 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()
方法。
答案 1 :(得分:1)
Hummm,基于你的代码片段,它似乎不起作用。要使用swing timer或java 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)的剩余时间,然后停止。