为什么多个动画不能同时运行?

时间:2013-07-28 16:10:29

标签: java multithreading animation

我有两个缓冲的图像。一个是由用户使用箭头键控制的缓冲图像,并在用户按下箭头键时开始动画它的腿。第二个缓冲的图像就像他们自动移动的游戏中的敌人一样,他们的动画立即开始。当我一次运行这两个图像时,只有一个会自己动画。为什么两个动画都不能同时运行? 这是代码(抱歉,如果它有点长。这些是动画的两种更新方法):

public void update()
{
    if(walking)
    {
        for(int frame=0;frame<(Art.player.length+1);frame++)
        {
            try{
                currentFrame=Art.player[frame][0];
                Timer timer = new Timer(5,this);
                timer.start();
                repaint();
            }catch(IndexOutOfBoundsException e)
            {
                frame=0;
                currentFrame=Art.player[frame][0];
                Timer timer = new Timer(5,this);
                timer.start();
                repaint();
            }
        }
    }

}
public void enemyUpdate()
{
    if(inView)
    {
        for(int j=0;j<(Art.enemy.length+1);j++)
        {
            try{
                currentFrameEnemy=Art.enemy[j][0];
                enemyX++;
                enemyY++;
                if(enemyX>=800||enemyY>=600)
                {
                    enemyX=0;
                    enemyY=0;
                }
                Timer timer = new Timer(5,this);
                timer.start();
                repaint();
            }catch(IndexOutOfBoundsException e)
            {
                j=0;
                currentFrameEnemy=Art.enemy[j][0];
                enemyX++;
                enemyY++;
                if(enemyX>=800||enemyY>=600)
                {
                    enemyX=0;
                    enemyY=0;
                }
                Timer timer = new Timer(5,this);
                timer.start();
                repaint();
            }
        }

    }
}

2 个答案:

答案 0 :(得分:1)

尝试在每个动画上使用不同的线程。

答案 1 :(得分:1)

如果您有一个单独的Animation类来加载图像集并运行它们的动画,请尝试实现Runnable,并在public void update()方法中重构动画方法public void enemyUpdate()public void run()来自Runnable界面。完成后,如果您运行两个独立的,重构的动画对象的.start()方法,它们将同时进行动画制作。

否则,如果您从一些主循环开始所有动画并且它们一个接一个地运行(即不同时运行),则根据您运行的动画对象的数量,可能会出现一些延迟。基本上,如果您希望它们像硬件允许的那样并行运行,则每个单独的动画对象都需要在自己的线程中运行。