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