2012-10-31 31 views
1

大家好我是一個深化發展的遊戲,我想,在一個隨機的時間段也告訴我一些精靈,所以我這樣做:處理器後延遲,隨機數和循環

for (int i = 0; i < 30; i++) { 

    final int min = 5000; 
    final int max = 25000; 
     Random r = new Random(); 
     int i1 = r.nextInt(max - min + 1) + min; 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 

      public void run() { 
       //MyCODE 
      } 
     }, i1);} 

    } 

但問題當我使用postDelayed時,它已經定義了i1從現在起的三十倍的時間,然後它將所有的精靈一起顯示出來。

我想要做的是:

i1 = New random number between 5000-25000 -> first = run //MyCODE after "i1" seconds -> i1 = New random number between 5000-25000 -> second = run //MyCODE after "i1" seconds since "first" ........ 
+0

從 – Yahor10

+1

您在同一時間的延遲,從5000到25000,你需要做的是在發佈前一個下一可運行什麼都發布了可運行週期刪除隨機初始化 – njzk2

回答

0

我認爲這個問題是「飄飛」的意思,你使用隨機的。時不時地在時間的範圍內,所以完全有可能在同一時間得到它們。

另外,您要重新使用相同的種子相同的隨機()數生成器,所以它可能會產生相同數量的你第一次調用它。隨機從來沒有真正的隨機。

使用當前時間的種子創建一個隨機對象。它會使它看起來比現在更隨機。

Handler spriteHandler = new Handler(); // Keep this global to the scope of the class. You only need one. 
final int MIN = 5000; 
final int MAX = 25000; 
Random r = new Random(System.getCurrentTimeMillis()); 

for (int i = 0; i < 30; i++) { 
     int i1 = r.nextInt(MAX - MIN + 1) + MIN; 
     spriteHandler.postDelayed(new Runnable() { 
      public void run() { 
       //MyCODE 
      } 
     }, i1);} 
    } 

如果從未希望他們在同一時間出現,那麼你需要把在調整,如果一個已經顯示的時間的算法。這將取決於你想要什麼。