[root,global], [level,depth,]全解析 By snow(http://www.7dev.net) 參考了old9同志的意見和自在幻想(Fictiony的帖子)
幫助中_global的說明
標識符;創(chuàng)建全局變量、對象或類。 例如,您可以創(chuàng)建公開為全局動作腳本對象的庫,此庫非常類似于 Math 或 Date 對象。與時間軸聲明或局部聲明的變量和函數(shù)不一樣,全局變量和函數(shù)只要未被內(nèi)部范圍中具有相同名稱的標識符遮蔽,則它們對于 SWF 文件中的每個時間軸和范圍均是可見的。
_root的說明
屬性;指定或返回指向根影片時間軸的引用。 如果影片有多個級別,則根影片時間軸位于包含當前正在執(zhí)行腳本的級別上。 例如,如果級別 1 中的腳本計算 _root,則返回 _level1。
_level的說明
標識符;對 _levelN 的根時間軸的引用。 必須在使用 loadMovieNum() 將 SWF 文件加載到 Flash Player 中以后,才可使用 _level 屬性來定位這些 SWF。還可使用 _levelN 來定位由 N 所指定級別處的已加載 SWF 文件。 加載到 Flash Player 實例中的初始 SWF 文件會自動加載到 _level0。_level0 中的 SWF 文件為所有隨后加載的 SWF 文件設置幀頻、背景色和幀大小。然后 SWF 文件堆疊在處于 _level0 的 SWF 文件之上的更高編號級別中。 您必須為每個使用 loadMovieNum() 加載到 Flash Player 中的 SWF 文件分配一個級別。您可按任意順序分配級別。如果您分配的級別(包括 _level0)中已經(jīng)包含 SWF 文件,則處于該級別的 SWF 文件將被卸載并替換為新的 SWF 文件。
depth的說明(by snow,非官方文檔)
depth值特指MC的深度,depth越大,MC越在上面;制作動畫時畫出來的MC它的depth值一定小于0,而SWF運行時動態(tài)產(chǎn)生的MC的depth值則一定大于0,從而保證了ActionScript操縱而產(chǎn)生的MC位置是在上面的;
_root和_level
新建一個影片,它的_root就是它本身的根影片時間軸,運行時它所在的層級是level0,可以載入其他的影片到其他層級;如level1等,這些影片會同時運行, 仔細看上面level的說明,"將 SWF 文件加載到 Flash Player 中以后,才可使用 _level 屬性來定位這些 SWF",注意"定位"這個詞,曾經(jīng)有人打過一個形象的比方,層級就象并排從上到下的許多抽屜,層級(level)值越大的動畫越在上面;對于某個MC而言,它的"最高級領導"就是_root,_level根本不是對MC談論的概念, 它只表明了SWF之間的上下關系,好,趁熱打鐵,我們來看下面---------
_level和Depth
不同點 level和depth根本不具有可比性,level是針對SWF,而depth是針對MovieClip的;
相同點 1,正如上面所說的,level表示了SWF之間的上下關系,類似的是,depth也表明了一種上下關系,就是MC之間的,MC的depth值越高,它就越在上面
2,比如:同一level和depth上,放入新的對象時,都會擠掉原來的. (by 自在幻想)
layer與depth
layer只是一個編輯FLA時才存在的概念,當輸出SWF以后,layer已經(jīng)形神俱滅了,MC之間只靠depth來確定上下位置,靠坐標來確定前后左右的位置;
另一種眼光看_root
_root是個MC的證據(jù)
1,_root變成了MC(說法特別不規(guī)范,有助于理解就行了).
_root在一個影片中一副老大的樣子,好象大得不得了,會一直是這樣的嗎? 不;可以使用loadMovie()把一個SWF加載到另一個SWF(名為firstSWF)中的一個MC中,假設加載SWF(名為mySWF),到一個名為myMC的MC中,此時原來的MC已經(jīng)被干掉了,mySWF已經(jīng)變成了myMC, mySWF的_root已經(jīng)指向firstSWF的根影片時間軸了.(請自行構造例子測試); 這下怎么操縱load進來的SWF的各種狀態(tài)呢,就不用說了吧? (操縱myMC這個MC即可)
相應地,如果加載某個SWF到levelN(N>0),那么在原SWF中可以把load進來的這個SWF當成一個名為_levelN的MC來操縱。
證據(jù)2, 測試如下語句:trace(typeof _root); 會輸出"movieclip", 悄悄告訴你哦,trace(typeof _level0),也輸出"movieclip";
之所以強調(diào)這種提法,為什么呢,只可意會不可言傳. 基本含義幫助中已經(jīng)說明得很清楚了,下面是一點補充:
1,昨天一個朋友問到的,設動畫有兩個場景(scene),在兩個場景中第一幀分別放一同名的MC,通過trace發(fā)現(xiàn)它們的深度是一樣的. 下面我們重點說明一下這個問題: 其實這個depth值,是針對某一幀這個生存周期的概念.當播放到第一場景中的第一幀時,不能談論第一個場景中的第一幀中的MC的depth,就象關公不可能戰(zhàn)秦瓊一樣.
2,那位朋友還問,象這種兩個場景(擴展到多個場景)的情況,_root是怎樣的呢?每個場景都有它們自己的_root嗎? 非也,最終輸出的SWF中,根本沒有場景(scene)這個東西,象上述兩個場景(每個場景中只有一個幀),輸出的動畫中只有連續(xù)的兩個幀,何來什么場景! 又比如兩個場景,都有20幀,那么gotoAndPlay("Scene 2",1)和gotoAndPlay(21),是一樣的.
結論:_root從來只有一個.
3,_root的說明中,"當前正在執(zhí)行腳本的級別"中的"級別",就是指level,也譯作"層級"; 我們知道不同的影片(SWF)可以分別載入到不同的層級(level)去,層級之間是并列的關系,所以在某個level中計算它的_root,得到的都是本身的level值.
BTW,抱歉沒能用圖形的方式來說明,不過應該不難理解。
出處:
責任編輯:qhwa
◎進入論壇Flash專欄版塊參加討論
|