2013-07-28 62 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()'。 –