• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 505  文章 - 1034  trackbacks - 0
            <2007年11月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678


            子曾經(jīng)曰過(guò):編程無(wú)他,唯手熟爾!

            常用鏈接

            留言簿(94)

            隨筆分類(lèi)(649)

            隨筆檔案(505)

            相冊(cè)

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 911346
            • 排名 - 14

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            三、深度(Depth

            深度(Depth)僅僅需要一個(gè)數(shù)字描述,F(xiàn)lash Player 使 用這個(gè)數(shù)字來(lái)指定對(duì)象的層疊位置。所謂層疊是指一種顯示時(shí)的的遮蓋關(guān)系。深度值較大則顯示較前,深度值較小則顯示較后,較后的要被較前的遮蓋。深度具有可 比性但僅限于兄弟節(jié)點(diǎn),所以同一父節(jié)點(diǎn)下的兄弟具有不同的深度,同時(shí)這個(gè)深度也描述了他們之間的層疊關(guān)系。屬于不同父節(jié)點(diǎn)的子節(jié)點(diǎn)可以有相同的深度,但他 們不具有可比性。

            編輯環(huán)境下,F(xiàn)lash使用了圖層(Layer) 來(lái)組織對(duì)象。這時(shí), Flash 并沒(méi)有給對(duì)象指定一個(gè)深度,只有當(dāng)Flash 文檔在運(yùn)行時(shí) Flash Player根據(jù)用戶(hù)最初在編輯環(huán)境下的拖放情況來(lái)指定對(duì)象的深度。這里的圖層可以認(rèn)為是同一父時(shí)間軸節(jié)點(diǎn)下子時(shí)間軸節(jié)點(diǎn)的集合。圖層和圖層之間不存在交集,而且圖層是一個(gè)動(dòng)態(tài)的集合,隨著程序的運(yùn)行,集合中的元素也會(huì)發(fā)生變化。Flash 也可以在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建時(shí)間軸,例如使用 attachMovie()、duplicateMovieClip()等語(yǔ)句,但必需以參數(shù)的形式給出要被創(chuàng)建的時(shí)間軸的深度。

            對(duì)象在編輯環(huán)境下的拖放順序以及時(shí)間軸上圖層的層疊關(guān)系,用來(lái)幫助Flash 確定對(duì)象的深度。圖層在Actionscript中是不被引用的,所以在swf文件中也不會(huì)有圖層這個(gè)概念。在編譯時(shí),圖層被分解為多個(gè)對(duì)象(多個(gè)時(shí)間軸),并且每一個(gè)對(duì)象都會(huì)被指定一個(gè)深度。當(dāng)Flash 播放時(shí),時(shí)間軸會(huì)讀取圖層中的內(nèi)容,并根據(jù)和其他對(duì)象的相對(duì)位置關(guān)系指定它的深度。如果對(duì)象所在的圖層較高則獲得一個(gè)比較高的深度,如果對(duì)象所在的圖層較底則獲取一個(gè)較低的深度。與此同時(shí),F(xiàn)lash也會(huì)為對(duì)象指定一個(gè)名稱(chēng),實(shí)現(xiàn)腳本對(duì)該對(duì)象的引用。深度概念也影響Flash 中對(duì)象的創(chuàng)建,在FileàPublish SettingàLoad Order 中可以設(shè)置對(duì)象被創(chuàng)建的順序,指定是由低深度到高深度(Bottom up)地創(chuàng)建,還是由高深度到低深度(Top down)地創(chuàng)建,F(xiàn)lash中的默認(rèn)為前者。

            Actionscript 還提供了一些與深度相關(guān)的方法和管理對(duì)象:

            深度方法或深度管理對(duì)象

            功能描述

            返回值

            MovieClip.attachMovie()

            從庫(kù)中創(chuàng)建一個(gè)電影剪輯實(shí)例。

            被創(chuàng)建的電影剪輯的引用

            MovieClip.createEmptyMovieClip()

            創(chuàng)建一個(gè)空的電影剪輯

            被創(chuàng)建的電影剪輯的引用

            MovieClip.createTextField()

            創(chuàng)建一個(gè)文本框

            無(wú)返回值

            MovieClip.duplicateMovieClip()

            創(chuàng)建一個(gè)電影剪輯的拷貝

            被創(chuàng)建的電影剪輯的引用

            MovieClip.getDepth()

            返回電影剪輯的深度

            深度數(shù)值

            MovieClip.getInstanceAtDepth()

            返回占據(jù)指定深度的電影剪輯

            指定深度下電影剪輯的引用

            MovieClip.getNextHighestDepth()

            返回最高的可用深度

            深度數(shù)值

            MovieClip.removeMovieClip()

            移除動(dòng)態(tài)創(chuàng)建的電影剪輯

            無(wú)返回值

            MovieClip.swapDepths()

            交換兩個(gè)電影剪輯的深度

            無(wú)返回值

            DepthManager Component

            深度管理器

             

            深度方法和功能描述

            這里需要加以說(shuō)明的是,SwapDepth()方 法可以把在不同深度的兩個(gè)對(duì)象進(jìn)行深度交換。如果要實(shí)現(xiàn)這種交換有兩種方法:一是把兩個(gè)對(duì)象進(jìn)行調(diào)換,即把上面的拿到下面,把下面的拿到上面,這是對(duì)對(duì)象 本身進(jìn)行操作;二是直接更改對(duì)象的深度屬性,即直接修改指定對(duì)象深度的數(shù)值。但是如果使用后者顯然不是在交換深度而是在設(shè)置深度了。SwapDepth()方法是實(shí)現(xiàn)對(duì)象深度位置的交換而非設(shè)置深度。可以把深度理解為一個(gè)容器,比如說(shuō)是房子,如果兩個(gè)人要交換房子,那么必須是你搬過(guò)來(lái)我搬過(guò)去,而僅僅更換門(mén)牌是沒(méi)有什么用處的。所以深度是只讀的。另外,getDepth()方法可以很方便的獲取MovieClip、Button和TextField對(duì)象的深度數(shù)據(jù)。

            另外,深度管理器(DepthManager)是一個(gè)專(zhuān)門(mén)對(duì)深度進(jìn)行管理的Flash V2組件,它封裝了若干深度管理的方法:

            DepthManager.createChildAtDepth():在指定深度處創(chuàng)建指定元件的子級(jí)。

            DepthManager.createClassChildAtDepth():在該指定深度處創(chuàng)建指定類(lèi)的對(duì)象。

            DepthManager.createClassObjectAtDepth():在指定深度處創(chuàng)建指定類(lèi)的實(shí)例。

            DepthManager.createObjectAtDepth():在指定深度處創(chuàng)建一個(gè)對(duì)象。

            DepthManager.setDepthAbove():移動(dòng)實(shí)例到指定實(shí)例的深度之上。

            DepthManager.setDepthBelow():移動(dòng)實(shí)例到指定實(shí)例的深度之下。

            DepthManager.setDepthTo():將實(shí)例移動(dòng)到指深度。

             

            四、深度區(qū)域:

                   在為對(duì)象指定深度時(shí)必須清楚地了解Flash在深度上的三個(gè)區(qū)域。在Flash 中,深度的范圍在-16384到2130690045之間,任何Flash的可視對(duì)象都不會(huì)超出這個(gè)范圍。在播放時(shí),F(xiàn)lash把時(shí)間軸中的對(duì)象按照默認(rèn)的設(shè)置進(jìn)行加載。-16384到-1是深度的第一個(gè)范圍,在這個(gè)深度區(qū)域?qū)ο蟛豢梢允褂媚_本創(chuàng)建和移除,用于放置用戶(hù)在編輯環(huán)境下創(chuàng)建的對(duì)象,這里把它稱(chēng)為時(shí)間軸區(qū)(Timeline)。接下來(lái)是0到1048575的深度范圍,在這個(gè)深度范圍內(nèi),對(duì)象可以使用腳本創(chuàng)建和移除,所以稱(chēng)為動(dòng)態(tài)區(qū)(Dynamic)。之后一個(gè)區(qū)域稱(chēng)為保留區(qū)(Reserve),深度范圍在1048576和2130690045之間,可以放置MC但是不可以移除。

            Flash的深度區(qū)域:

            區(qū)域

            深度范圍

            特征

            時(shí)間軸區(qū)

            -16384 到 -1

            主要用于放置Flash 編輯時(shí)的對(duì)象,且對(duì)象不可用腳本移除,但可以使用腳本創(chuàng)建。

            動(dòng)態(tài)區(qū)

            0到1048575

            實(shí)現(xiàn)運(yùn)行時(shí)的動(dòng)態(tài)創(chuàng)建、動(dòng)態(tài)訪問(wèn)和動(dòng)態(tài)移除

            保留區(qū)

            1048576到2130690045

            實(shí)現(xiàn)運(yùn)行時(shí)的動(dòng)態(tài)創(chuàng)建、動(dòng)態(tài)訪問(wèn),但不支持使用腳本移除對(duì)象。

            Flash 在動(dòng)態(tài)區(qū)之前提供了時(shí)間軸區(qū),用于放置編輯環(huán)境下時(shí)間軸中的對(duì)象。在編輯環(huán)境下,最底層的對(duì)象放置到區(qū)域的最深處——-16384。在通常情況下會(huì)從-16383這個(gè)深度開(kāi)始,F(xiàn)lash依次向較高深度放置時(shí)間軸中的對(duì)象。

            接下來(lái)是動(dòng)態(tài)區(qū),在這個(gè)區(qū)域可以放置那些可以動(dòng)態(tài)創(chuàng)建和移除的對(duì)象。而且這個(gè)區(qū)域也符合一般人的使用習(xí)慣,因?yàn)樗纳疃仁菑?開(kāi)始的,而開(kāi)發(fā)者在創(chuàng)建對(duì)象時(shí)通常也會(huì)考慮這個(gè)范圍。在這個(gè)范圍可以獲得比較大的自由權(quán),開(kāi)發(fā)者可以使用腳本動(dòng)態(tài)地創(chuàng)建和移除對(duì)象。如果對(duì)象不在動(dòng)態(tài)區(qū),那么首先可以把對(duì)象交換到動(dòng)態(tài)區(qū),然后再進(jìn)行移除。

            保留區(qū)可以理解為動(dòng)態(tài)區(qū)的一個(gè)擴(kuò)展,只是在保留區(qū)中無(wú)法使用腳本移除對(duì)象,對(duì)象在那個(gè)區(qū)域可以動(dòng)態(tài)地被創(chuàng)建。在這個(gè)區(qū)域?qū)ο笠部梢允褂胹wapDepth()方法交換到其它的深度區(qū)域。但保留區(qū)還是一個(gè)比較特殊的區(qū)域,因?yàn)槟抢锏膶?duì)象不可以被移除,而且深度高的有點(diǎn)離譜。在保留區(qū)Flash為對(duì)象提供了一定的存儲(chǔ)空間。

            需要特別注意的是,F(xiàn)lash 在使用createEmptyMovieClip()方法創(chuàng)建的空MC時(shí),深度的分配上幾乎沒(méi)有什么限制,深度可以指定在-999999999999以下或是999999999999以上。雖然這個(gè)深度已經(jīng)超出了剛才討論的那個(gè)范圍。

             

            五、時(shí)間軸刷新:

            關(guān)于深度,可能會(huì)遇到一些另人混淆的問(wèn)題,特別是動(dòng)態(tài)區(qū)和時(shí)間軸區(qū)。當(dāng)時(shí)間軸被刷新時(shí),所有的對(duì)象將被重新創(chuàng)建。Flash 會(huì)掃描位于該時(shí)間軸的時(shí)間軸區(qū)域,并清除保存在這些深度上的對(duì)象。然后Flash 讀取時(shí)間軸上的數(shù)據(jù)并重新創(chuàng)建這些對(duì)象,但是通過(guò)動(dòng)態(tài)方法創(chuàng)建的對(duì)象將被忽略。其中一個(gè)例子就是使用gotoAndPlay()返回播放已經(jīng)播放過(guò)的幀,例如從第10幀返回到底5幀播放,這時(shí)Flash為了重新展示第5幀的內(nèi)容必須刷新時(shí)間軸并完全重構(gòu)第5幀的內(nèi)容。但是使用動(dòng)態(tài)方法創(chuàng)建的對(duì)象如果在時(shí)間軸刷新時(shí)被移除,那么這時(shí)并不被自動(dòng)創(chuàng)建,除非程序給出。

            很 明顯,這樣可能會(huì)引起一些問(wèn)題。首先,這樣會(huì)失去在時(shí)間軸區(qū)域或是使用動(dòng)態(tài)方法已經(jīng)創(chuàng)建并交換到時(shí)間軸區(qū)域的對(duì)象。也就是在這中情況,不可以把使用動(dòng)態(tài)方 法創(chuàng)建的對(duì)象交換到時(shí)間軸區(qū)域,否則在時(shí)間軸刷新時(shí)會(huì)丟失這些對(duì)象。在開(kāi)發(fā)時(shí)為避免這種情況的發(fā)生,可以創(chuàng)建一個(gè)單幀停止的MC,這樣的MC可以是安全的,可以不必為時(shí)間軸刷新而擔(dān)憂(yōu)。

            另外一個(gè)問(wèn)題是無(wú)法移除所需要移除的對(duì)象。其原因是由于使用深度交換方法把時(shí)間軸區(qū)的對(duì)象轉(zhuǎn)移到了非時(shí)間軸區(qū),這樣在時(shí)間軸刷新時(shí)就無(wú)法清除該對(duì)象了,而且這次刷新還會(huì)創(chuàng)建一個(gè)新的該對(duì)象到時(shí)間軸區(qū)。這種情況也應(yīng)該避免發(fā)生。

            還有一個(gè)需要清楚的問(wèn)題是場(chǎng)景(Scene)跳轉(zhuǎn)的問(wèn)題。場(chǎng)景間的跳轉(zhuǎn)不會(huì)引起時(shí)間軸的刷新,也不會(huì)觸發(fā)其他一些特殊的事件。作為場(chǎng)景本身而言,它們是主時(shí)間軸的片段,當(dāng)Flash被發(fā)布以后,這些場(chǎng)景便會(huì)整合到一起,變成單個(gè)的主時(shí)間軸。所以用戶(hù)在一個(gè)場(chǎng)景創(chuàng)建的對(duì)象,它仍舊可以在接下來(lái)的場(chǎng)景出現(xiàn),當(dāng)然也可以使用腳本使那些對(duì)象消失。

             

            六、播放器執(zhí)行順序:

                   在 深度問(wèn)題上,還有一點(diǎn)比較容易被人們忽視。正如前面所提到的,深度也會(huì)影響到腳本的執(zhí)行順序。事實(shí)上深度本身并不影響腳本的執(zhí)行順序,但是深度卻與對(duì)象的 創(chuàng)建順序有關(guān)。一般我們都會(huì)認(rèn)為,在同一時(shí)間軸上,首先被創(chuàng)建的對(duì)象會(huì)首先執(zhí)行它所包含的腳本。另人感到奇怪的是,在默認(rèn)的發(fā)布設(shè)置下,那些最晚被創(chuàng)建的 對(duì)象反而首先執(zhí)行了EnterFrame事件中的腳本。在默認(rèn)情況下對(duì)象從最底層開(kāi)始被創(chuàng)建,這一點(diǎn)我們可以在Flash的發(fā)布選項(xiàng)中設(shè)置。幀腳本是按照它們被創(chuàng)建的順序執(zhí)行的。這樣如果在bottom up 模式下,從技術(shù)角度而言,較低層的腳本反而較早執(zhí)行,但是值得一提的是,EnterFrame事件中的腳本剛剛與之相反。

            看來(lái)很有必要追究一下EnterFrame事件到底是怎樣的一個(gè)事件。EnterFrame事件隨著電影剪輯的幀速被持續(xù)地觸發(fā)??梢哉J(rèn)為EnterFrame事件是在播放頭進(jìn)入某一幀時(shí)觸發(fā)的一個(gè)事件,但是在EnterFrame事件中的代碼將先與幀腳本執(zhí)行。但是,對(duì)象的創(chuàng)建和Flash的播放(對(duì)象狀態(tài)的改變過(guò)程)到底是怎樣一個(gè)關(guān)系呢?在Flash中第一幀的幀腳本和其它幀的幀腳本有著不同的行為。當(dāng)運(yùn)行一個(gè)Swf文 件時(shí),它的第一幀將首先被創(chuàng)建,然后開(kāi)始載入該文檔中的對(duì)象并拖入到舞臺(tái),這個(gè)過(guò)程可以認(rèn)為是一個(gè)初始化的過(guò)程。所以在這個(gè)過(guò)程中隨著對(duì)象的載入第一幀的 容量將不斷增大。這樣做的原因也是顯而易見(jiàn)的,只有當(dāng)對(duì)象全部載入后,腳本才能執(zhí)行,設(shè)想如果腳本所要操作的對(duì)象都不存在,那么腳本必然會(huì)發(fā)生錯(cuò)誤。一旦 所有的對(duì)象載入完畢,除第一幀外的其它幀都將被一次性創(chuàng)建,并開(kāi)始播放。這樣做的另外一個(gè)原因是,如果按照先創(chuàng)建,先播放的原則,那么必然導(dǎo)致不同電影剪 輯播放時(shí)步調(diào)的不一致。因?yàn)閯?chuàng)建對(duì)象是需要時(shí)間的,特別是在網(wǎng)絡(luò)上,它還要有一個(gè)下載的過(guò)程。這里還要注意的是#initclip和#endinitclip中的代碼塊,它們通常定義在電影剪輯的第一幀,只要符號(hào)被定義且被編譯(電影剪輯符號(hào)定義了,但不一定都被編譯),那么就執(zhí)行該代碼段,它用于電影剪輯的初始化,所以?xún)?yōu)先于其它腳本執(zhí)行,并且僅執(zhí)行一次,它的運(yùn)行效果將作用到該剪輯的所有實(shí)例。

                   這樣,就可以得出,F(xiàn)lash的執(zhí)行可以分成兩個(gè)過(guò)程。首先是對(duì)象的下載、創(chuàng)建和初始化,接下來(lái)是一個(gè)播放的過(guò)程。播放是一個(gè)對(duì)象狀態(tài)隨著幀速改變的過(guò)程,其狀態(tài)的兩個(gè)極端是存在與不存在。這樣在Flash的執(zhí)行過(guò)程中,電影剪輯第一幀的腳本將首先被執(zhí)行;然后是播放過(guò)程,其腳本執(zhí)行的原則是EnterFrane事件腳本的執(zhí)行先于幀腳本的執(zhí)行。

             

            七、圖層(Layer)、層級(jí)(level)和深度(depth

            通常人們會(huì)把圖層和層級(jí)混淆起來(lái)使用,但事實(shí)上它們是兩個(gè)完全不同的概念。時(shí)間軸可以以?xún)煞N方式獨(dú)立于主時(shí)間軸:電影剪輯(Movie Clip)和層級(jí)(Level)。這里所謂的獨(dú)立是指獨(dú)立的播放與停止。圖層(Layer),只在編輯環(huán)境下被看到,用于存放和組織在時(shí)間軸上的對(duì)象。它們僅僅只是在編輯環(huán)境下出現(xiàn),當(dāng)發(fā)布一個(gè)Flash文件時(shí),這些圖層將被壓縮到同一個(gè)時(shí)間軸上。

            層級(jí)(Level)位于一個(gè)獨(dú)立的時(shí)間軸上,用于存儲(chǔ)使用loadmovie方法加載的外部Swf文件。層級(jí)(Level)可以使用_level0, _level1, _level3, _leveln 對(duì)其進(jìn)行引用。層級(jí)越高,就越接近觀察者,也就越容易被看到,這一點(diǎn)與深度是一致的。使用該方法加載的電影將貫穿電影的主時(shí)間軸。由于這個(gè)原因從外部加載電影的目的常常是為了加載某些聲音,因?yàn)槁曇舨粫?huì)影響到原來(lái)電影的播放。

            電影剪輯(Movie Clip)同樣是一個(gè)獨(dú)立的時(shí)間軸,但是電影剪輯位于庫(kù)(Library)中,并不是位于電影的外部。所以它與層級(jí)不同,如果需要的話,你可以在幀上創(chuàng)建一個(gè)電影剪輯的實(shí)例。 從庫(kù)中拖動(dòng)一個(gè)電影剪輯到舞臺(tái)(Stage),那么就創(chuàng)建了該電影剪輯的一個(gè)實(shí)例,可以指定一個(gè)唯一的名稱(chēng)對(duì)其進(jìn)行引用。電影剪輯可以包含其它的電影剪輯,這就是通常所說(shuō)的嵌套(nesting)。

            深度(Depth)通常會(huì)用于swapDepth()和attachMovie()這些方法,用于指定電影剪輯的層疊順序。它可以被認(rèn)為可視對(duì)象在時(shí)間軸上的層疊順序(Z-Order)。

            這里還要指出的是 _root 和 _level0 的區(qū)別。_root 和_level0引用的并非同一個(gè)對(duì)象,它們是有差別的。_root 指代電影的主時(shí)間軸,如果一個(gè)電影有多個(gè)層級(jí)那么_root指代當(dāng)前腳本正在執(zhí)行的那個(gè)層級(jí)。例如:在層級(jí)n中的某個(gè)腳本包含了 _root,這時(shí)_root返回 _leveln,_root和_leveln才是等同的。


            作者Blog: http://blog.csdn.net/9116/

            posted on 2008-06-16 15:41 七星重劍 閱讀(955) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Flash Scaleform GFx
            伊人久久综合精品无码AV专区| 中文字幕久久亚洲一区| 国产成人精品久久亚洲| 久久精品成人免费国产片小草| 久久久久免费视频| 伊人久久精品无码av一区| 久久亚洲欧美国产精品| 亚洲国产精品婷婷久久| 久久久精品久久久久特色影视| 日产久久强奸免费的看| 久久w5ww成w人免费| 91精品国产综合久久香蕉 | 久久久久免费精品国产| 久久久亚洲欧洲日产国码aⅴ| 99久久夜色精品国产网站| 亚洲人成电影网站久久| 好久久免费视频高清| 伊人久久大香线蕉综合5g| av午夜福利一片免费看久久| 精品久久久久一区二区三区| 亚洲国产精品无码久久98| 国产午夜精品久久久久九九电影 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久精品国产亚洲Aⅴ香蕉| 中文字幕日本人妻久久久免费| 久久亚洲国产欧洲精品一| 欧美亚洲国产精品久久高清| 91精品国产91久久| 色综合久久久久无码专区| 日本精品久久久久影院日本| 99精品久久精品一区二区| 狠狠色丁香婷婷久久综合五月| 久久久久夜夜夜精品国产| 亚洲午夜久久久久妓女影院| 天天综合久久一二三区| 狠狠色综合网站久久久久久久| 99精品久久精品一区二区| 国产色综合久久无码有码| 久久久久久无码国产精品中文字幕| 国内精品久久久久影院免费| 天天爽天天狠久久久综合麻豆|