-2

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

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();
            }
        }

    }
}
4

2 回答 2

1

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

于 2013-07-28T16:25:09.403 回答
1

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

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

于 2013-07-28T21:02:03.230 回答