Java 带有压缩随机生成器的TimeHandler Evern second

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

所以

我有一个方法,每秒钟调用一次,将精灵添加到场景中

我想做的是能够控制调用该方法时添加sprite的百分比

所以我试着用

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