Java 带有压缩随机生成器的TimeHandler Evern second
所以 我有一个方法,每秒钟调用一次,将精灵添加到场景中 我想做的是能够控制调用该方法时添加sprite的百分比 所以我试着用Java 带有压缩随机生成器的TimeHandler Evern second,java,android,andengine,Java,Android,Andengine,所以 我有一个方法,每秒钟调用一次,将精灵添加到场景中 我想做的是能够控制调用该方法时添加sprite的百分比 所以我试着用 Math.Random() > .3; 基本上,这将是一个30%的机会,精灵会被添加…正确吗 问题是我只有四个精灵。因此,有时调用该方法时,不会向场景中添加精灵,每次调用该方法时,都会添加精灵 所以我试着用 Random rand = new Random(); int itemNumber = rand.nextInt(4) + 1; if (it
Math.Random() > .3;
基本上,这将是一个30%的机会,精灵会被添加…正确吗
问题是我只有四个精灵。因此,有时调用该方法时,不会向场景中添加精灵,每次调用该方法时,都会添加精灵
所以我试着用
Random rand = new Random();
int itemNumber = rand.nextInt(4) + 1;
if (itemNumber == 1) {
问题是这完全由随机发生器控制。当我希望能够控制添加多少精灵的百分比时
那么,如果我理解正确,我会怎么做呢。您需要生成1-4之间的随机数(包括1和4) 此代码必须提供1-4(包括1和4)之间的随机数 首先,这是:
if(Math.Random() > .3)
将通过70%的时间,而不是30%。如果您想要30%,请将其更改为
对,我知道,但如何确保每次添加一个精灵?或者,我只需要将大于号改为:每次调用方法时是否会添加一个精灵?尽管您的方法已更新。抱歉,我误解了这里的问题。那么将为if()语句提供哪个变量来选择精灵?switch()可能更容易。只需使用我发布的函数作为参数。请参阅最新更新。
if(Math.Random() > .3)
final double[] mOdds = {0.10, 0.25, 0.30, 0.35};
// note, mOdds totals 1.0
public int pickSprite()
{
double rand = Math.Random();
for(int i=0;i<mOdds.length;i++)
{
if(rand < mOdds[i])
return i;
rand -= mOdds[i];
}
return -1; // should never reach this
}
...
switch(pickSprite())
{
case 0:
// draw sprite 0
break;
case 1:
// draw sprite 1
break;
case 2:
// draw sprite 2
break;
case 3:
// draw sprite 3
break;
}
...
...
sprite[pickSprite()].draw(); // substitute however you draw
...