2011-03-27 64 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"/> 

這個工作適合我。試試吧