我在applet中使用swing计时器来制作动画。 我在理解时间真正有效方面遇到了问题。
我想出了这段代码(这只是其中的一小部分):
Action actionListener2 = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
timer = new Timer(500,this);
timer.start();
System.out.println("S");
p.moveSquare(p.SnakeHeadX,p.SnakeHeadY+p.SnakeHeadH);
p.eatBlueSquare(p.SnakeHeadX,p.SnakeHeadY);
}
};
答案 0 :(得分:3)
不,不要在ActionListener中创建一个新的Timer,因为它会重复创建许多定时器。而只需在Timer的ActionListener中移动你的方块并调用repaint()
。你读过Swing Timer教程吗?如果没有,我恳请你谷歌并试一试。
答案 1 :(得分:2)
Swing计时器(javax.swing.Timer的一个实例(在API参考文档中))在指定的延迟后触发一个或多个动作事件。不要将Swing计时器与版本1.3中添加到java.util包中的通用计时器工具混淆
计时器基本上是一个java线程,它在延迟之后立即启动并执行分配的任务。
如上所述,你应该从动作执行函数中移动你的Timer。
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("S");
p.moveSquare(p.SnakeHeadX,p.SnakeHeadY+p.SnakeHeadH);
p.eatBlueSquare(p.SnakeHeadX,p.SnakeHeadY);
}
});
timer.start();
了解更多细节 http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html