Flash的播放速率是在編輯時(shí)設(shè)定的,所以無法通過程序來動(dòng)態(tài)控制,要達(dá)到類似的效果,只有采用一些小技巧。以下面的小動(dòng)畫為例,方向箭頭轉(zhuǎn)動(dòng)的速度(由播放速度決定)隨著鼠標(biāo)距離的遠(yuǎn)近而發(fā)生由慢到快的轉(zhuǎn)變。
首先做一段箭頭轉(zhuǎn)動(dòng)的動(dòng)畫,盡量的將幀設(shè)得多些,比如我的就設(shè)得有192幀之多。幀率提高一倍,類同于每隔一幀播放一幀,其他依次類推。為此我寫了一個(gè)函數(shù):
function playRateCtr(movie:MovieClip, rate:Number) { //movie :要控制播放速度的影片; rate:幀率倍數(shù) (rate == undefined) ? rate=1 : null; (movie == undefined) ? movie=this : null; //設(shè)定默認(rèn)的 movie 和 rate 值 var cFrame = movie._currentframe; var nFrame = cFrame+rate; movie.gotoAndPlay(nFrame); } 假設(shè)箭頭的影片名字為:logo_part_1(是我要做的logo的一部分啦 ) 寫:
logo_part_1.onEnterFrame = function() { _root.playRateCtr(this,3); };
那么,箭頭動(dòng)畫就將以原來三倍的幀率播放. 為了使鼠標(biāo)位置與播放速度的倍數(shù)發(fā)生關(guān)聯(lián),又有如下函數(shù):
function DtoRate(movie:MovieClip, rate_max:Number, tran:Number) { //movie:影片名字:rate_max:可控制的速度最大倍數(shù):tran:距離 //轉(zhuǎn)化為倍數(shù)時(shí)的單位 (movie == undefined) ? movie=this : null; (rate_max == undefined) ? rate_max=3 : null; (tran == undefined) ? tran=50 : null; var dx = movie._xmouse; var dy = movie._ymouse; var dr = Math.min(rate_max, Math.floor(Math.sqrt(Math.pow(dx, 2)+Math.pow(dy, 2))/tran)); //獲得鼠標(biāo)與影片的距離,它是經(jīng)過轉(zhuǎn)換的 return (rate_max-dr+1); } 改寫原來的onEnterFrame函數(shù):
logo_part_1.onEnterFrame = function() { var rate = _root.DtoRate(this,15,35); //trace(rate); _root.playRateCtr(this, rate); };
接著就可以 測試?yán)。因(yàn)檫@是采用跳幀的方法實(shí)現(xiàn)的,具體效果要多測試幾次,并調(diào)整動(dòng)畫的幀數(shù),才可能得到好的效果。請(qǐng)使用flashplayer 7觀看。
出處:閃客帝國
責(zé)任編輯:qhwa
◎進(jìn)入論壇Flash專欄版塊參加討論
|