所以

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

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

所以我尝试使用

Math.Random() > .3;


基本上,这将有30%的机会添加精灵……对吗?

所以问题是我只有四个子画面。因此,有时在调用该方法时,不会将任何精灵添加到场景中,而每次调用该方法时,都会添加一个精灵。

所以尝试使用

    Random rand = new Random();

int itemNumber = rand.nextInt(4) + 1;

if (itemNumber == 1) {


问题是这完全由随机发生器控制。当我想能够控制添加或多或少的精灵数量的百分比时。

那么我将如何做呢?

最佳答案

首先,这是:

if(Math.Random() > .3)


将通过70%的时间,而不是30%。如果需要30%,请将其更改为<

编辑:

好的,因此您想确保一个精灵被调用,并且希望能够控制每个特定精灵被调用的频率?您需要的是每个精灵的变量,其中包含调用它的几率。例如,这将返回一个int表示每个精灵:

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
}


您可以在mOdds中使用不加到1.0的任意数字,但是您必须对其进行一些修改。基本上,如果您想每转一个精灵,只需要确保rand会给您一个介于0和所有mOdds总数之间的数字。

更新2:

在绘制例程中,可以调用上面的函数来选择精灵并相应地绘制:

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


这完全取决于您的程序流程。您应该能够使该概念适应所使用的任何例程。

关于java - 带有约束的随机数发生器的TimeHandler每秒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11254014/

10-12 04:52