每次在AS3中调用时,如何使Math.random调用不同的值?

时间:2013-03-23 21:59:13

标签: actionscript-3 math random

假设我在函数中有类似下面的内容,第一次调用它时,我有一个随机值,但每隔一次调用它,我得到的数字与它第一次吐出的数字相同。我可以做些什么来确保每次调用它时都是随机的?

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);
    }

2 个答案:

答案 0 :(得分:1)

[根据以下评论编辑] Math.random()的AS3参考页面说:

  

返回伪随机数n,其中0 <= n <1。这个号码   返回是以未公开的方式计算的,并且是   “伪随机”因为计算不可避免地包含一些   非随机性的元素。

如果您想使用基于种子的伪随机数生成器,这可以帮助您:

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

答案 1 :(得分:0)

在你的前两个陈述中,看起来你正在使用Asteroid5.y&amp; Asteroid5.x作为变量。所以一个想法是使用正确类型的变量(我假设它的号码):

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;

现在,您可以在调试模式中逐步执行代码,并确切了解变量值发生了什么变化。也许可以搜索你的代码&#39; Asteroid5.x =&#39; &安培; &#39; Asteroid5.y =&#39; &安培; &#39; Asteroid5.y =&#39; &安培; &#39; Asteroid5.x =&#39;