所以
我有一个每秒都会调用的方法来将 Sprite 添加到场景中。
我想要做的是能够控制调用该方法时添加 Sprite 的百分比。
所以我尝试使用
Math.Random() > .3;
基本上,添加 Sprite 的几率为 30%...对吗?
所以问题是我只有四个 Sprite 。因此,有时当调用该方法时,不会将任何 Sprite 添加到场景中,而每次调用该方法时都会添加一个 Sprite 。
所以尝试使用
Random rand = new Random();
int itemNumber = rand.nextInt(4) + 1;
if (itemNumber == 1) {
问题是这完全由随机生成器控制。当我希望能够控制添加更多或更少 Sprite 的百分比时。
那么我该怎么做呢?
最佳答案
首先,这个:
if(Math.Random() > .3)
70% 的时间会通过,而不是 30%。如果你想要30%,改成<
编辑:
好的,那么您想确保调用 Sprite ,并希望能够控制调用每个特定 Sprite 的频率吗?您需要的是每个 Sprite 的一个变量,其中包含调用它的几率。例如,这将返回一个 int 来表示每个 Sprite :
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
的总和之间的数字如果你想要每回合都有一个 Sprite 。
更新2:
在您的绘图例程中,您可以调用上述函数来选择 Sprite 并进行相应的绘制:
...
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 放在数组中,那就更容易了:
...
sprite[pickSprite()].draw(); // substitute however you draw
...
这实际上完全取决于您的程序流程。您应该能够使这个概念适应您正在使用的任何例程。
关于java - TimerHandler 每秒使用受限随机生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11254014/