我有两个缓冲的图像。一个是由用户使用箭头键控制的缓冲图像,并在用户按下箭头键时开始动画它的腿。第二个缓冲的图像就像他们自动移动的游戏中的敌人一样,他们的动画立即开始。当我一次运行这两个图像时,只有一个会自己动画。为什么两个动画都不能同时运行? 这是代码(抱歉,如果它有点长。这些是动画的两种更新方法):
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();
}
}
}
}
答案 0 :(得分:1)
尝试在每个动画上使用不同的线程。
答案 1 :(得分:1)
如果您有一个单独的Animation类来加载图像集并运行它们的动画,请尝试实现Runnable,并在public void update()
方法中重构动画方法public void enemyUpdate()
和public void run()
来自Runnable界面。完成后,如果您运行两个独立的,重构的动画对象的.start()
方法,它们将同时进行动画制作。
否则,如果您从一些主循环开始所有动画并且它们一个接一个地运行(即不同时运行),则根据您运行的动画对象的数量,可能会出现一些延迟。基本上,如果您希望它们像硬件允许的那样并行运行,则每个单独的动画对象都需要在自己的线程中运行。