首先,这是:
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
...
这完全取决于您的程序流程,真的。您应该能够使这个概念适应您正在使用的任何例程。