首先,想說一下我寫此文的動(dòng)機(jī)。記得很早之前我曾經(jīng)說過“沒有l(wèi)oading的flash,不是完整的flash”。我想那個(gè)句話可能偏激了。因?yàn)橛袝r(shí)候一些不到10k的flash,確實(shí)不需要做什么loading。但我始終認(rèn)為,做一個(gè)優(yōu)秀的loading是衡量一個(gè)flasher水準(zhǔn),甚至態(tài)度的。你問我為什么,我可以告訴你,因?yàn)閘oading是唯一一個(gè)你不會(huì)多看而所有用戶、客戶會(huì)看的東西,所以你對(duì)loading的重視程度,甚至可以反襯你這個(gè)flasher的職業(yè)道德!
有些做設(shè)計(jì)為主的朋友,我認(rèn)識(shí)不少,他們對(duì)loading都是得過且過的態(tài)度,做一個(gè)loading,更多的是自己找一個(gè)現(xiàn)成的,然后每次去套用,我個(gè)人認(rèn)為是很不好的習(xí)慣。并不是說我不提倡代碼、元件的重用度,而是我覺得對(duì)于loading這種東西,套多了,是要出問題的。我強(qiáng)烈建議那些已經(jīng)達(dá)到可以修改人家loading水平的flasher看看我的東西,當(dāng)然,如果你連flash的as該寫在哪都不知道,建議先入門了。
好,下面切入正題,如何制作loading:
首先要感激Macromedia的大智慧,提供了很好的兩個(gè)函數(shù)使我們可以做出完美的loading,那就是getBytesLoaded和getBytesTotal。請不要再用你改來改去改了兩三年的那個(gè)什么getFrameLoaded什么什么了,我都記不清楚怎么拼了。我只想說,F(xiàn)rame的觀念將在真正的Interactive-Design中淡化。更別提什么Scene,那是Flash的敗筆!
那么loading如何工作呢?我們?nèi)绾卫眠@兩個(gè)函數(shù)呢?這里要提到一個(gè)重要的概念。就是間隔調(diào)用。間隔調(diào)用有多種方式,下面列舉出來,并列舉出其在loading制作中的地位和用法,歡迎補(bǔ)充:
·setInterval方式
寫法:
function loadCheck() { var p = getBytesLoaded()/getBytesTotal(); if (p==1) { clearInterval(intervalID); // 釋放間隔調(diào)用 gotoAndPlay(someFrame); // 開始播放 } } var interval = 30; // 這個(gè)數(shù)值是刷新頻率 var intervalID = setInterval(loadCheck,interval);
我個(gè)人并不推薦初學(xué)者用這種寫法。因?yàn)楹芏嗳巳菀缀鲆昪learInterval,而這個(gè)東西被忽視掉,是很恐怖的!如果你的setInterval沒有給及時(shí)移除,意味著你將在整個(gè)swf的播放過程中增加一個(gè)沒有必要的負(fù)擔(dān)! 而且這種方法很不適合控制MoiveClip的狀況(因?yàn)槌鯇W(xué)者會(huì)發(fā)現(xiàn)MC的路徑是個(gè)大問題,而loadCheck本身就是個(gè)函數(shù),還是被setInterval調(diào)用的,要在loadCheck中指一個(gè)路徑出來,挺麻煩的,你不要指望_root,那樣會(huì)讓你的程序不規(guī)范;也不要指望this,因?yàn)樵诤瘮?shù)中用this似乎不太理想;最好什么都不寫,但往往你不敢不寫),進(jìn)而做出更好的效果。
·onEnterFrame方式
我最喜歡的就是這種方法了。比較方便、直觀。因?yàn)橥覀兪且靡粋(gè)MC體現(xiàn)一個(gè)loading的進(jìn)度,比如,一個(gè)進(jìn)度條,或者更有創(chuàng)意的東西,只有你不能想到的,沒有你不能做到的。
那么究竟如何用呢。首先,把創(chuàng)意定好。然后給你的MC一個(gè)實(shí)例名字,比如叫做loader_mc。這時(shí)候在timeline上寫代碼,記住,是timeline而不是MC上。因?yàn)檫@樣便于代碼統(tǒng)一、便于路徑統(tǒng)一、便于管理和尋找。別為了省幾個(gè)字母就把代碼通通搬到button,mc上面去,然后一個(gè)on(press)了事。除非你是在敷衍你的作品;或者你是在為了交作業(yè)。
loader_mc.onEnterFrame = function () { var getTar:MovieClip = this._parent; var p = getTar.getBytesLoaded()/getTar.getBytesTotal(); trace(p); if(p==1) { this.onEnterFrame = null; gotoAndPlay(someFrame); // 開始播放 }
}
就這么簡單,記住,在MC的事件函數(shù)體內(nèi)部引用MC,永遠(yuǎn)是一件很快的事情。因?yàn)閠his就可以指向這個(gè)MC本身,通過諸如this._parent之類的方法,可以找到你所有的MC!
·直接依賴于timeline的循環(huán)方式
非常非常非常古老的方式了,不介紹了。不過你們可以去問問那些一直不喜歡自己動(dòng)手做loading的flasher,他們也許在改的某一個(gè)版本就是這個(gè),呵呵。
以上算是比較簡單的。比較容易出問題的,還有兩個(gè)。 第一、MovieClipLoader 第二、含有多種V2組件的Loader
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁 下一頁 利器
◎進(jìn)入論壇Flash專欄版塊參加討論
|