处理程序发布延迟,随机数和周期

时间:2012-10-31 13:36:19

标签: android

大家好我正在开发一款游戏,我想在随机的时间内向我展示一些精灵,所以我这样做了:

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" ........

1 个答案:

答案 0 :(得分:0)

我认为问题是“时不时”的意思,你使用的是随机的。时不时地落在时间的范围内,所以完全可以同时获得所有这些。

此外,您正在使用相同的种子重新创建相同的Random()数字生成器,因此在您第一次调用它时它可能会生成相同的数字。随机永远不是真正的随机。

使用当前时间的种子创建一个随机对象。它会使它看起来比它更随机。

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

如果您从不希望它们同时显示,那么您需要输入一个算法来调整时间(如果已经显示)。它取决于你想要的东西。