2013-07-28 63 views
-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(); 
      } 
     } 

    } 
} 
+3

他们可以。告诉我们代码 – radai

+0

为了更好地提供帮助,请发布[SSCCE](http://sscce.org/)。热链接到一些小的(以字节为单位)的图像或在代码中生成它们。 –

+1

这个如果你在这个话题上发表第5篇文章。您发布的代码无效!您之前已被要求发布SSCCE。 SSCCE不是关于你的计划,而是关于证明一个简单的概念。所以首先创建一个简单的例子,它有两个图像,每个图像由一个单独的时间控制一旦你得到了简单的概念,你就会转向更复杂的事情。 – camickr

回答

1

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

+0

目前我只是在动画的每个实体更新方法中运行两个Thread.sleep()。这算作使用不同的线程还是只使用相同的线程。我也从来没有发起一个实际的线程,我只是调用Thread.sleep()。 – user1058860

+0

@ user1058860用'Thread.sleep()'你告诉你的UI线程休眠 –

+0

这意味着我应该怎么做?我是并发编程的新手。 – user1058860

1

如果您有加载图像组,并运行自己的动画一个独立的动画类,尽量实现Runnable,并重构动画方法public void update()public void enemyUpdate()是来自Runnable接口的public void run()方法内。完成之后,如果您运行两个单独的重构动画对象的.start()方法,它们将同时进行动画处理。否则,如果您的所有动画都是从某个主循环开始的,并且它们一个接一个地运行(即,不是同时发生),则根据您运行的动画对象的数量可能会引起一些延迟。基本上,每个单独的动画对象都需要在自己的线程中运行,如果您希望它们在硬件允许的情况下并行运行。

+0

好吧我会试试看! – user1058860

+0

我应该在哪里调用.start()方法? – user1058860

+0

从你的主要地方。你可能希望你的主函数的类也是一个线程,因为这将允许你指定一个固定的帧速率。这里有一个例子,请注意,我的主类也实现了'Runnable()'。 –