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 时间的 30 倍,然后它会一起显示精灵。

我想做的是:

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

1 回答 1

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

如果您希望它们同时出现,那么您需要输入一种算法来调整时间(如果已经出现)。不过,这将取决于您想要什么。

于 2012-10-31T15:11:29.487 回答