所以
我有一个每秒调用一次的方法,可将精灵添加到场景中。
我想做的是能够控制调用该方法时添加精灵的百分比。
所以我尝试使用
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/