大家好我正在开发一款游戏,我想在随机的时间内向我展示一些精灵,所以我这样做了:
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 :(得分: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);}
}
如果您从不希望它们同时显示,那么您需要输入一个算法来调整时间(如果已经显示)。它取决于你想要的东西。