0

そう

スプライトをシーンに追加するために毎秒呼び出されるメソッドがあります。

私がやりたいことは、メソッドが呼び出されたときにスプライトが追加される割合を制御できるようにすることです。

だから私は使ってみた

Math.Random() > .3; 

基本的に、これはスプライトが追加される可能性が 30% になります...正しいですか?

これに関する問題は、スプライトが 4 つしかないことです。そのため、メソッドが呼び出されたときにスプライトがシーンに追加されず、メソッドが呼び出されるたびにスプライトが追加されることがありました。

だから使ってみた

    Random rand = new Random();

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

if (itemNumber == 1) {

これに関する問題は、これがランダム ジェネレーターによって完全に制御されていることです。多かれ少なかれ追加されるスプライトのパーセンテージを制御できるようにしたい場合。

それで、これを行う私の方法は何でしょうか??

4

2 に答える 2

1

開始するには、次のようにします。

if(Math.Random() > .3)   

30% ではなく 70% の確率で合格します。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
}

mOdds1.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 に答える