0

所以

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

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

所以我尝试使用

Math.Random() > .3; 

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

所以这个问题是我只有四个精灵。因此,有时当调用方法时不会将精灵添加到场景中,而每次调用方法时都会添加精灵。

所以尝试使用

    Random rand = new Random();

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

if (itemNumber == 1) {

问题在于这完全由随机生成器控制。当我希望能够控制或多或少添加哪个精灵的百分比时。

那么我这样做的方式是什么?

4

2 回答 2

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

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

于 2012-06-29T00:54:04.727 回答
0

如果我理解正确。您需要生成一个介于 1-4(包括 1 和 4)之间的随机数。

此代码必须为您提供 1-4 之间的随机数(包括 1 和 4)。

Math.ceil(Math.random()*4);
于 2012-06-28T23:10:33.310 回答