首先我想要申明,這個標(biāo)題確實夸張了。只是希望通過這種夸張能引起各位不愿意重視ActionScript的Flashers的注意。
其實每一個Flasher,特別是經(jīng)歷過Flash4、Flash5的這一批人,都是常年通過實踐周來部署作品界面的。包括我自己,對時間軸的熟悉也經(jīng)歷了一個比較長的過程。這個過程中,我也距離Flash的思想越來越近。
先說說IDE的概念吧,相信對于一個界面或者動畫設(shè)計師來說,IDE絕對是一個足夠陌生的名詞。其實,我們每天用到的Flash就是一個IDE環(huán)境。我在這里更準(zhǔn)確地引用如下概念,相信看完后IDE這個詞將不再陌生:
引用 wikilib.com 集成開發(fā)環(huán)境(Integrated Development Environment,簡稱IDE),又名集成編程環(huán)境或可視化開發(fā)環(huán)境,是為方便軟件開發(fā)人員進行開發(fā)而設(shè)計的軟件,一般針對某一編程語言開發(fā),大多數(shù)為界面友好的可視化環(huán)境,一般整合源代碼編輯器、調(diào)試器、編譯器和資源編輯器。 顯然,時間軸是IDE的一部分,但我更愿意把時間軸分離出來強調(diào),甚至適度夸張地批判。因為有時候時間軸確實笨重的。如果您不是一個逐幀動畫高手,而是一個以開發(fā)Flash應(yīng)用程序(尤其是游戲)的設(shè)計師,我想時間軸許多情況下所表現(xiàn)的特性顯得十分尷尬。比如MotionTween看起來只有兩個關(guān)鍵幀,其實之間的漸變幀都是要耗占文件體積的。
此外,有很多情況下,我們需要動態(tài)的管理一些場景上的元素。如果用時間軸,我想恐怕只能用最土的gotoAndPlay、gotoAndStop配合使用了。當(dāng)然,在Flash4、Flash5時代,確實造就了一批頂級高手,他們僅用gotoAndPlay來完成任務(wù),這些人有著嚴(yán)謹(jǐn)?shù)倪壿嬎季S能力和極好的心態(tài)。然而到了MX時代,尤其是MX2k4時代,AS的飛躍發(fā)展,導(dǎo)致之前的這種天才設(shè)計模式淪為一介莽夫之舉!
Flash5中attachMovie的出現(xiàn),無疑是一場革命性的發(fā)展?上莻時候用attachMovie的人并不多,因為相比時間軸,它確實挺麻煩的。由于項目需求在那個時候與現(xiàn)在不同,時間軸效果仍然是主流的開發(fā)手段。
MX 時代最大的革命我印象最深刻的其實是IDE。Flash5中愚昧的面板到了MX變得那么乖巧聽話。MX時代的到來引發(fā)了一場Flash制作風(fēng)暴,越來越多的人(主要是動畫制作為主)加入到Flasher這個隊伍中來?上Ш髞鞰X2k4和8改變了界面,其實我個人挺喜歡MX的IDE界面設(shè)計的。ú恢酪院髸粫瞥鲆粋可制定IDEskin的懷舊版)
MX和MX2k4的推出,使得AS更加規(guī)范,項目需求的改變,導(dǎo)致時間軸的效果越來越顯得捉襟見肘了。更多的人開始投入動態(tài)部署場景的行列,然而值得一提的是,有一些老一輩Flash設(shè)計大師似乎仍然不為之所動,MM推出的時間軸特效更是 MX2k4的一大敗筆。當(dāng)然瑕不掩瑜,AS2.0給MX2k4予以無限光芒,這段時間涌現(xiàn)了大量的AS-coder,水平參差不齊,不論如何,這是另一場革命!
這個時代中,項目需求又有所變化,越來越多的復(fù)雜的應(yīng)用程序要通過Flash來完成,要不是半路殺出一個AJAX,我懷疑Javascript真的要被Actionscript蓋住光芒了。我自己獨立完成的56涂鴉也是使用的MX2k4完成的。
現(xiàn)在到了8,雖然AS沒有實質(zhì)上變革,但項目需求又一次提高,時間軸完全不能獨立部署一個優(yōu)秀的應(yīng)用程序了。更多的人開始關(guān)注Actionscript,開始關(guān)注attachMovie這樣一個曾經(jīng)被我們因“麻煩”而嫌棄的語句。
不想太純粹的討論技術(shù),于是發(fā)了以上一些胡言亂語,現(xiàn)在還是簡單介紹一些attachMovie吧。
首先,要明白Flash的基本編譯原理。SWF文件中的內(nèi)容無疑主要來自于庫,這個概念相對大家都不會陌生(就是Library)。庫中包含了所有的時間軸引用的元件,當(dāng)然_root也是一個MC元件,它也包括所有的在IDE中的零散圖形。剩下的內(nèi)容就是庫中含有l(wèi)inkage ID的元件了。這些元件就是attachMovie的最重要的操作對象!
不想強調(diào)太多的理論知識,因為這些內(nèi)容都可以在幫助文檔中找到。我想結(jié)合自己的開發(fā)經(jīng)驗談一談:
首先,attach的內(nèi)容,盡量不要attach到_root下。因為本來就是要動態(tài)的管理MC,如果清一色放到_root下,會導(dǎo)致分類不明確,很難高效率調(diào)度、管理MC。我建議在_root下動態(tài)建立一個MC。比如,你有一個游戲中,要防止對手和友軍,那不妨就建立兩個MC容器“NPC_mc” “Enemy_mc”,然后再對這兩個mc進行attache:
var NPC:MovieClip = _root.createEmptyMovieClip("NPC_mc",1); var EMY:MovieClip = _root.createEmptyMovieClip("Enemy_mc",2); for (var i=0;i<iMax;i++) NPC.attachMovie(....); for (var j=0;j<jMax;j++) EMY.attachMovie(....);
其次,由于是動態(tài)建立MC,很多時候我們無暇管理深度,Macromedia Flash 2k4以來,提供了一個非常重要的方法:getNextHightestDepth(),這個方法可以找到當(dāng)前MC中最深的一個深度,然后以Number型返回。
這樣一來,我們經(jīng)常會看到2k4版本后的一些“模版式”代碼:
//某循環(huán)內(nèi) var d:Number = this.getNextHighestDepth(); this.attachMovie("someLibStr","myMC"+d,d); //某循環(huán)內(nèi)
顯然,代碼簡單易懂,非常適合動態(tài)部署大量的MC(配合循環(huán))
動態(tài)地刪除則是removeMovieClip,這個語句非常簡單,就不贅述了。
最后整理一些常見問題:
1、庫中的連接名給錯 2、自命名沒有隨層級變化而變化,強烈推薦用一個名詞+深度來命名。 3、深度序號未定義,造成MC指向undefined 4、母MC未定義(這個容易在含有function的情況下出現(xiàn))
所有這些問題通過trace絕對可以找到,大家多點耐心就行了。
最后祝大家順利突破IDE、打破時間軸的限制!
經(jīng)典論壇討論帖: http://www.95time.cn/bbs/NewsDetail.asp?id=2513472
出處:藍(lán)色理想
責(zé)任編輯:moby
◎進入論壇Flash專欄版塊參加討論
|