我试图在我正在开发的游戏中制作动画。动画的工作原理是将按钮大小设置得非常小,然后再将其逐渐增大到正常大小。我有它的工作,除了我有时间问题。
有时按钮几乎会立即增长,有时会非常缓慢。我正在寻找中间的东西,我需要它始终以这么大的速度增长,而不是有时候快速增长。
我已经查看了它,我发现了这个伪代码:
distance_for_dt = speed * delta_time
new_position = old_position + distance_for_dt
不幸的是,我不明白所说的内容,而且我也不知道如何将其应用到我的代码中。任何人都可以帮助解释或解释上述伪代码中的内容吗?
我的计时器代码timer
已在上面定义为Timer
,而z []只是一对坐标:
timer = new Timer(18, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Dimension dim = button[z[0]][z[1]].getSize();
if (dim.getHeight() < 79.9) {
button[z[0]][z[1]].setSize((int) (dim.getWidth() + 6), (int) (dim.getHeight() + 6));
} else {
button[z[0]][z[1]].setSize(80, 80);
timer.stop();
}
}
});
timer.start();
答案 0 :(得分:0)
根据您在Swing应用程序上调用的更新次数,可能会“备份”并减慢速度。例如,如果你想在没有Timer的情况下完成动画,你可以这样做:
// example method to do animation
public void animateButton(final int wait){
Thread thread = new Thread(){
public void run(){
// some loop structure to define how long to run animation
Dimension dim = button[z[0]][z[1]].getSize();
while (dim.getHeight() < 79.9){
SwingUtilities.invokeLater(new Runnable(){
//update Swing components here
});
try{ Thread.Sleep(wait); }
catch(Exception e){}
}
}
}
}
thread.start();
}
我认为这可能类似于Timer如何更新GUI,因为Timers在一个单独的线程上运行。我会研究是否需要在invokeLater(new Runnable)
内使用timer
来正确安排任务。我必须这样做才能允许我正在进行的项目在长期任务中保持响应。如果您确实需要确保速度并且可能需要DROP更新来调整系统滞后,那么您需要使用System.currentTimeMillis()
之类的方法调用来计算动画的完整程度与已经过了多少时间。 System.nanoTime()
。然后,针对动画的每个步骤进行相应调整。