實例效果:
工具:flash2004 思路:
1.水泡的_x是左右隨機晃動的,可以設(shè)定一個變量,讓這個變量在某段x坐標內(nèi)隨機取值,取值之后,讓_x趨向變量移動,移動到變量點時,變量再重新取值,_x再趨向變量移動。_x永遠向變量方向移動。 2.用attachMovie來復制泡泡,用unloadMovie實現(xiàn)卸載泡泡。 3.以幀來實現(xiàn)循環(huán),以便產(chǎn)生多個泡泡。
做法:
第一步: 新建文件,長寬為300×200,背景白色,frame rate 設(shè)為60,能讓泡泡移動得快一點流暢一些。
第二步:畫泡泡,保存為mc,命名為pao。
第三步:再新建一個mc,命名為pp_mc,并設(shè)定輸出連接名為pp,以便attachmovie調(diào)用。在mc的場景中拖入pao,坐標以需要泡泡出現(xiàn)的大體范圍為準,我設(shè)的是x=98,y=10,pp_mc需要實現(xiàn)泡泡的隨機移動,所以,選定pao,打開action面板。代碼如下:
onClipEvent (load) { a = random(140)+10; //當mc載入時,預(yù)設(shè)a變量。a變量是控制泡泡運動方向的,對a進行10到150之間的隨機取值 }
onClipEvent (enterFrame) { if (this._x>a) { this._x = int(this._x)-1; this._y -= 1; this._alpha -= 0.01; if (this._alpha == 0) { this.unloadMovie(); } } else if (this._x<a) { this._x = int(this._x)+1; this._y -= 1; this._alpha -= 0.01; if (this._alpha == 0) { this.unloadMovie(); //當透明度為0時,卸載泡泡 }
//以上兩個執(zhí)行語句中,第一句為this._x取整這一點很關(guān)鍵,因為如果不小心泡泡的x坐標不是整數(shù),到最接近a的那一步時,x總是無法等于a,_x-1就小于a,會執(zhí)行x<a中的語句,+1后又會大于a,再執(zhí)行x>a的語句,這也是我剛做時泡泡總是運行一次就直線上升的原因。
} else { a = random(140)+10; } }//x=a時,對a重新取值
第四步:回到場景,在第一幀上寫如下代碼
j=0; //設(shè)定控制循環(huán)以便產(chǎn)生多個泡泡的變量 j
第五步:在第二禎寫如下代碼
_root.attachMovie("pp", "pp"+j, j); //從庫里復制泡泡 _root["pp"+j]._x = random(140)+10; //為泡泡設(shè)定x坐標值,這里是10到150之間的隨機值 _root["pp"+j]._y = 200; //設(shè)定y坐標值 _root["pp"+j]._xscale = random(70)+30; //30%到100%的隨機x縮放值_root["pp"+j]._yscale = _root["pp"+j]._xscale; //30%到100%的隨機y縮放值
第六步:第三禎代碼如下 if (j<10) { //這個判斷為j賦最大值 j = j+1; } else { j = 0; //當j=10時,j返回0值 } gotoAndPlay(2);
在最初做這個泡泡時,我沒有為j設(shè)定最大值,讓j不斷累加,導致swf文件極占cpu資源,其實10個泡泡對于我做的這個出現(xiàn)頻率就夠了,j可以根據(jù)實際情況設(shè)定。
好了,你也可以做個泡泡了,還有一點就是,我為了讓泡泡不要出得這么頻繁,讓第二禎和第三禎之間隔了好些個空白禎,如果想多一些,挨近一點就行了。 往上升是泡泡,如果往下飄可以做雨,雪什么的。試試看吧 :p 這個是土人布置的作業(yè),為了加深印象,再寫一遍教程。跟大家一起學習 第一次寫教程,有說的不清楚的地方,請大家指出,有說的不對的地方,請大家指點。 :)
以下是由feng4ever制作的flash:
下載源文件
出處:藍色理想
責任編輯:qhwa
◎進入論壇Flash專欄版塊參加討論
|