1

関数の下にあるようなものがあったとしましょう。最初に呼び出されたとき、ランダムな値がありますが、呼び出されるたびに、最初に吐き出されたのと同じ数が得られます。呼び出されるたびにランダム化されるようにするにはどうすればよいですか?

if (Cosmo.hitTestObject(Asteroid5))
    {



        Asteroid5.y = (Math.random() * 20 - 5);
        Asteroid5.x = (Math.random() * 20 - 15);
        Asteroid5.x = Asteroid5.x + (Math.random() * 20 - 15);
        Asteroid5.y = Asteroid5.y + (Math.random() * 20 - 5);
    }
4

2 に答える 2

1

[以下のコメントに基づいて編集] Math.random() の AS3 リファレンス ページには次のように書かれています。

0 <= n < 1 である疑似乱数 n を返します。返される数値は公開されていない方法で計算され、「疑似乱数」です。これは、計算に非乱数性の要素が必然的に含まれるためです。

シードベースの疑似乱数ジェネレーターを使用する場合は、次のことが役立ちます。

http://www.kirupa.com/forum/showthread.php?365564-AS3-Seeded-Pseudo-Random-Number-Generator

于 2013-03-23T22:09:52.940 に答える
0

最初の 2 つのステートメントでは、Asteroid5.y と Asteroid5.x を変数として使用しているようです。したがって、1つのアイデアは、正しいタイプの変数を使用することです(私はそれがNumberであると仮定しています):

var rndX:Number = (Math.random() * 20 - 15); 
var rndY:Number = (Math.random() * 20 - 5); 
var rndX2:Number = rndX + (Math.random() * 20 - 15);
var rndY2:Number = rndY + (Math.random() * 20 - 5);
Asteroid5.x = rndX2;
Asteroid5.y = rndY2; or
var rndX:Number;
var rndY:Number;
for ( var i:uint=0; i<2; i++ )
{
   rndX += (Math.random() * 20 - 15);
   rndY += (Math.random() * 20 - 5);
}
Asteroid5.x = rndX;
Asteroid5.y = rndY;

これで、デバッグ モードでコードをステップ実行し、変数の値が変化したときに何が起こっているかを正確に確認できます。また、コードで 'Asteroid5.x =' & 'Asteroid5.y =' & 'Asteroid5.y=' & 'Asteroid5.x=' を検索してください。

于 2014-06-19T08:55:37.253 に答える