所以
我有一个方法可以每秒调用一次,以便为场景添加精灵。
我想要做的是能够控制调用方法时添加精灵的百分率。
所以我尝试使用
Math.Random() > .3;
基本上这将是精灵加入的30%几率......正确吗?
所以这个问题是我只有四个精灵。因此,有时当调用方法时,不会向场景中添加精灵,每次调用该方法时都会添加一个精灵。
所以尝试使用
Random rand = new Random();
int itemNumber = rand.nextInt(4) + 1;
if (itemNumber == 1) {
这个问题是由Random发生器完全控制的。当我希望能够控制或多或少添加精灵的百分比时。
那么我的做法是什么?
答案 0 :(得分:1)
首先,这个:
if(Math.Random() > .3)
将通过70%的时间,而不是30%。如果您想要30%,请将其更改为<
修改强>
好的,所以你想确保调用一个精灵,并希望能够控制每个特定精灵的调用频率?你需要的是每个精灵的一个变量,它包含调用它的几率。例如,这将返回一个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
总数的数字。
更新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
...
这一切都取决于你的程序流程,真的。你应该能够将这个概念适应你正在使用的任何例程。
答案 1 :(得分:0)
如果我理解正确的话。您需要生成1-4之间的随机数(包括1和4)。
此代码必须为您提供1-4之间的随机数(包括1和4)。
Math.ceil(Math.random()*4);