胡年芬
[摘要]random函數(shù)在flash里是非常有用的,可以生成基本的隨機(jī)數(shù)、創(chuàng)建隨機(jī)的移動(dòng)以及隨機(jī)的顏色等特效。以在flash領(lǐng)域多年的教學(xué)經(jīng)驗(yàn),結(jié)合操作實(shí)際,探討flash動(dòng)畫(huà)創(chuàng)作中如何用好random函數(shù)產(chǎn)生其它不同的動(dòng)畫(huà)特效,并對(duì)random函數(shù)的應(yīng)用作些探討。
[關(guān)鍵詞]探討 flash random 應(yīng)用
中圖分類號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0910072-01
random在ActionScript中是一個(gè)應(yīng)用相當(dāng)廣的函數(shù),它的作用是獲取0到指定整數(shù)之間的任意整數(shù)。利用它可以解決隨機(jī)顯示等效果,是創(chuàng)建復(fù)雜動(dòng)畫(huà)的基礎(chǔ)。下面是我對(duì)flash中random函數(shù)的靈活應(yīng)用進(jìn)行探討。
一、flash中random函數(shù)基本應(yīng)用探討
(一)基本的random函數(shù)的格式與功能
1.random(number)函數(shù)介紹。random(number)返回一個(gè)0-number-1之間的隨機(jī)整數(shù)。參數(shù)number代表一個(gè)整數(shù)。如:trace(random(5))。
2.Math.random()。返回一個(gè)有14位精度的0-1之間的數(shù),無(wú)參數(shù)。如:trace(Math.random())。
(二)random函數(shù)的配合使用
Math.round()、Math.ceil()、Math.floor(),這三個(gè)函數(shù)都是用來(lái)取整數(shù)。Math.round()采用四舍五入方式取最接近的整數(shù),Math.ceil()向上取一個(gè)最接近的整數(shù), Math.floor()向下取一個(gè)最接近的整數(shù)。如在flash腳本中: Math.round(Math.random());它可以生成一個(gè)0.0和1.0之間的一個(gè)數(shù),然后四舍五入取一個(gè)整數(shù)。這樣所生成的數(shù)字就是0或1。它可用在各有50%的可能的情況。如拋硬幣,或真或假。
(三)常見(jiàn)的基本應(yīng)用探討
1.乘以10 的使用。是將所生成的小數(shù)乘以10,然后四舍五入取得一個(gè)整數(shù)。在flash的實(shí)例腳本中常能見(jiàn)到。如: Math.round(Math.random
()*10);要?jiǎng)?chuàng)建一個(gè)1到10之間的隨機(jī)數(shù),可以這樣寫(xiě): Math.ceil(Math.
random()*10)。
2.控制movieclip的操作。要讓一個(gè)movieclip隨機(jī)的在屏幕上不同的位置出現(xiàn),顯示的位置在0到200之間,可以這樣寫(xiě),注意movieclip的實(shí)例名為“bob”。
bob._x = Math.round(Math.random()*200);
bob._y = Math.round(Math.random()*200);
以上就是flash中random函數(shù)的基本用法。
二、random在自定義函數(shù)中的應(yīng)用探討
下面是我針對(duì)random函數(shù)在用戶自定義函數(shù)中的應(yīng)用作一些膚淺的探討。
1.返回一個(gè)共有n位數(shù),其中m位小數(shù)的隨機(jī)數(shù)。
function randomXiao(n,m){ var a = Math.pow(10, n+m);
var b = random(a);return b=b/Math.pow(10, m); }
大家可以用trace(randomXiao(3,2))來(lái)實(shí)驗(yàn)一下。
2.返回一個(gè)n到m之間的隨機(jī)數(shù)。
function randomNm(n,m){
if(m>=n){ returnrandom(m-n+1)+n;}
else { return false;}}
之所以用random(m-n+1)是因?yàn)殡S機(jī)數(shù)的范圍是m-n,加上1使得m也能在里面。加上n保證隨機(jī)數(shù)以n為下限。加上判斷使函數(shù)更完整。
3.返回一個(gè)字母。
function randomAscii(){
var c = String.fromCharCode(random(26)+65);
if(random(2)){ return c.toLowerCase();} return c; }
4.返回一個(gè)不區(qū)分大小寫(xiě)的隨機(jī)字母。
如果要返回大寫(xiě),去掉上面的if語(yǔ)句。如果要返回小寫(xiě),可以把if語(yǔ)句改為恒成立,或者去掉條件,最后一句改為:return c.toLowerCase()。
5.返回一個(gè)n到m之間的k個(gè)互異隨機(jī)數(shù)。
function randomKdiffer(n,m,k){
arrayK = [];var i = 0;
while (i < k) {a = random(m-n+1)+n;
for (var j = 0; j < i; j++) {
if (a == arrayK[j]) { break;}}
if (j == i) { arrayK[i] = a;i++;} } return arrayK; }
數(shù)組arrayK中的元素即為所得值。注意到我借用了random(m-n+1)+n來(lái)返回一個(gè)n~m的隨機(jī)數(shù)。所以m本身也會(huì)被返回。如果要返回m以內(nèi)的數(shù),可以把n值改為0。如果要隨機(jī)返回不確定個(gè)數(shù),可以把入口參數(shù)的K值賦為k=random(m-n);隨機(jī)返回不一定互異的數(shù),把判斷去掉就可以了,注意i++不要漏掉。
以上函數(shù)算是由random直接衍生的。下面再舉一個(gè)例子,可以說(shuō)是衍生函數(shù)的衍生函數(shù),會(huì)直接用到上面給出的函數(shù),請(qǐng)注意。
6.在幾個(gè)區(qū)域中選出隨機(jī)數(shù)。
比如在1-20、45-70這兩段數(shù)之間選取一個(gè)隨機(jī)數(shù)。因?yàn)閰^(qū)域數(shù)未定,所以直接用一個(gè)確定的函數(shù)編寫(xiě)多有不便,這要用switch語(yǔ)句進(jìn)行判定。我給出一個(gè)函數(shù),返回一個(gè)1~20、45~70內(nèi)的數(shù),其它區(qū)域請(qǐng)讀者自行修改。
function randomArea(){ var a=random(2);
switch(a){ case 0:return randomNm(1,20);break;
case 1:return randomNm(45,70);break;}}
三、常見(jiàn)的flash中random函數(shù)實(shí)例應(yīng)用分析
實(shí)例:變色的小條。先把小條中的代碼寫(xiě)出:
onClipEvent (load) {
i = 0;a = random(10)-5;
if (a == 0) { a = 1;}
col = new Color(this); }
onClipEvent (enterFrame) { this._x += a;i++;
if (i >= 36) { col.setRGB(random(0xFFFFFF));
a = random(10)-5;
if (a == 0) { a = 1;} trace(a);i = 0;}
if ((this._x+this._width) <= 0) {this._x = 550+this._width;}
if ((this._x-this._width) > 550) {this._x = 0-this._width;}}
用它正好說(shuō)明一下setRGB的用法,請(qǐng)讀者自行分析。
朋友,通過(guò)以上知識(shí)的探討,您對(duì)flash中的random函數(shù)有進(jìn)一步的認(rèn)識(shí)嗎?我個(gè)人認(rèn)為:在flash的領(lǐng)域,只要肯放飛您的想象,用ActionScript的隨機(jī)(random)+復(fù)制+循環(huán),創(chuàng)作出一個(gè)星空、一群美女都是可實(shí)現(xiàn)的。只要您懂得如何正確靈活的使用ActionScript中的基本的語(yǔ)句。朋友,請(qǐng)走進(jìn)flash的領(lǐng)域,快快試試吧!
參考文獻(xiàn):
[1]卓越科技編著,flash 8動(dòng)畫(huà)制作入門(mén)、進(jìn)階與提高,電子工業(yè)出版社,2007,174-198.
[2]郭亮,flash mx游戲制作精粹,海洋出版社,2006,172-181.