2011-03-27 95 views
0

如何使用AS3在Flash CS5中生成随机数字,我宁愿尽可能简单。AS3 - 如何生成随机数字?

我试图给我一个错误:

day_gross.addEventListener(MouseEvent.CLICK, randomNumber); 
function randomNumber(event:MouseEvent):void{ 
    var randint:Number = Math.random(); 
    trace(randint); 
    } 
+0

你收到了什么错误? – 2011-03-27 17:26:30

+0

变量为空1009.你看到这段代码有什么问题吗? – 2011-03-27 17:31:39

+0

@Noah - 'day_gross'可能为空。确保它是在调用addEventListener之前创建的。如果您正在使用Flex,则可能需要在MXML的“FlexEvent.CREATION_COMPLETE”事件的事件侦听器中执行此代码。 – 2011-03-27 17:34:31

回答

5

您可以使用Math.random()产生伪随机数。

如果是加密的目的产生的数字,但是,你应该使用flash.crypto.generateRandomBytes()(要求FP11)

+0

我试过在这个函数中..看到上面的答案更新了。 – 2011-03-27 17:25:48

+0

-1。没有帮助。查看Mark Knol的回答 – 2014-03-19 12:12:48

+0

@TechnikEmpire我的回答没有帮助?这个问题不需要随机的整数,两个答案都使用'Math.rand()'? – 2014-03-19 21:06:45

9

Math.random()返回0-1之间的随机数。

以下代码创建和迹线和0之间的往返数UINT的最大值:

var randomUint:uint = uint(Math.random() * uint.MAX_VALUE); 
trace(randomUint); 

该下一个代码的例子定义并记录的最小和INT的最大值之间的圆形数目(与负数太):

var randomInt:int = int.MIN_VALUE + int(Math.random() * Number(int.MAX_VALUE + int.MIN_VALUE)); 
trace(randomInt); 
2
private function randomIntBetween(min:int, max:int):int { 
    return Math.round(Math.random() * (max - min) + min); 
} 
+2

警告!此功能会产生不均匀的分布。下面的Monte Carlo模拟显示'边缘'数字大约有一半'内部'数字... 'var a = [0,0,0,0,0,0,0,0]; (var i = 0; i <100000; i ++){ a [this.randomIntBetween(2,6)] ++;对于(var j = 0; j Sean 2013-10-03 06:08:29

+0

你是对的@Sean ,一个解决方案是使用'Math.floor'并通过加上'1'来补偿最小值,如下所示:'Math.floor(Math.random()*(max - min + 1)+ min);' – marlonp33 2013-11-07 15:59:38

0

得到它的工作最简单的方法是这样的。当你点击一个按钮时,它会生成一个随机数。它是自我解释性的

protected function button1_clickHandler(event:MouseEvent):void 
{ 
    var numbers:Array = new Array(49); 
    for (var i:int = 0; i < numbers.length; i++) 
    { 
     numbers[i]=i; 
     numbers[i] =[Math.round(Math.random()*i)]; 
     resulttxt.text = numbers[i]; 
    } 
} 
<s:Button top="342" label="Generate" click="button1_clickHandler(event)" horizontalCenter="0"/> 
<s:TextInput id="resulttxt" left="10" top="65" width="250"/> 

这个工作适合我。试试吧