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 参考页面说:

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

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

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 作为变量。所以一个想法是使用正确类型的变量(我假设它是数字):

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 回答