0

我正在尝试创建一个简单的动画,其中一系列气泡围绕中心点旋转。我有一个动画版本,其中气泡在开始旋转之前从中心点展开,效果很好,但是只要我单击其中一个图像(触发动画),屏幕就会冻结片刻,然后出现气泡在他们的最终位置,而不是显示他们所做的每一步。

到目前为止,我所拥有的是:

    while(bubble[1].getDegree() != 270) 
    { 
        long time = System.currentTimeMillis(); 

        //the below if statement contains the function calls for
        //the rotating bubble animations.
        next();
        draw();

        //  delay for each frame  -   time it took for one frame 
        time = (1000 / fps) - (System.currentTimeMillis() - time); 

        if (time > 0) 
        { 
            try 
            { 
                Thread.sleep(time); 
            } 
            catch(Exception e){} 
        }
    }


public void draw()
{
    for(int i = 1; i < bubble.length; i++)
    {   
        iconLabel[i].setLocation(bubble[i].getX(), bubble[i].getY());
        textLabel[i].setLocation((bubble[i].getX()+10),(bubble[i].getY()+10));
    }

}

为清楚起见,“next()”方法只是将气泡的位置更改到适当的位置,我知道这可以正常工作,因为我之前已经做过动画,但是一旦我将动画实现到 JLabels,它就停止工作了。

任何帮助,将不胜感激。

4

1 回答 1

2

绘图被冻结,因为您阻塞了事件调度线程。绘图是在与循环相同的线程中完成的while,并且由于循环在运行时阻止了其他任何事情的发生,所以 Swing 只能在循环完成后才能开始绘图,因此只绘制最后一个位置。

改用摇摆计时器

timer = new Timer(delay, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // whatever you need for the animation
        updatePositions();
        repaint();
    }
});
timer.start();

然后timer.stop()在处理完您需要的所有帧后调用。

于 2013-10-06T15:10:53.473 回答