gpt4 book ai didi

java - 一次使用一个 Swing 计时器?

转载 作者:行者123 更新时间:2023-12-01 07:28:02 24 4
gpt4 key购买 nike

我正在使用 Swing 计时器来为游戏中的人物运动制作动画。如果我将它从一个点发送到另一个点,它工作正常,但是当我多次调用它时,动画速度会增加。

我认为它必须以这种方式工作,但是我可以“堆叠”计时器以仅在当前动画完成时启动即将播放的动画吗?

这不是确切的代码,但工作原理如下:

Timer timer = new Timer(40, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(figure.x != target.x){
if(figure.x < target.x){
figure.x+1;
}else{
figure.x-1;
}
}
}
});
timer.start();

最佳答案

您可以在此处执行以下操作:

  • 始终运行计时器(大多数时候它不执行任何操作,除非目标发生变化)易于理解,如果同时移动很多东西,则效率较低,但对于少量动画来说可能没问题。
  • 使您的移动基于时间(即,不是每次计时器计时时仅移动一个“像素”,而是计划您的目标目的地和到达时间,然后当计时器计时时,计算您的位置人物应该在“现在”并把他移到那里。
  • 在你的对象上附加一个 volatile 标志,让你知道他已经附加了一个计时器,这样你就不会在同一个对象上附加多个计时器。

旁白:无法按照您的想法“排队”计时器,一次显示一个动画。为此,您将需要更多计时器之外的框架代码。 (例如,使用链表来维护运动事件队列,当一个运动完成时,计时器任务将从队列中拉出下一个运动并开始处理该运动......)

关于java - 一次使用一个 Swing 计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21101002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com