1

我有这个代码:

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

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

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

4

3 回答 3

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以及如何使用摇摆计时器

于 2013-07-16T21:33:23.073 回答
1

嗯,仅基于您的那段代码,它似乎不起作用。要使用像swing timerjava util timer这样的定时器,需要在程序中有线程。

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

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

为此,您将有一个线程处理 goingLeft1 和另一个线程到 goingLeft2,它们将通过消息进行通信,而不仅仅是通过直接设置属性。

于 2013-07-16T21:10:58.437 回答
0

是的,Java 技术人员正确地说,您可以在基于摇摆的应用程序中使用摇摆定时器,而不是使用 java.util.Timer .. 在这里使用摇摆定时器的好处是您不需要创建单独的线程来执行定时器。您的代码会冻结 X 毫秒,因为它在运行整个代码的同一线程上运行。如果你想以秒为单位显示经过的时间,你可以使用这样的东西

定时器 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) 的剩余时间,然后停止。

于 2013-09-09T03:38:22.313 回答