2005/8/4

swapDepths使用心得之別走回頭路!

奇怪的標題。今天發現當我們對timeLine上原有的物件進行swapDepth後,若timeLine的播放頭向前移動後,最好別再讓播放頭往回走,否則會出現物件重覆的狀況。
以前我是知道這個問題的,但我一直以為只要不回到小黑點KeyFrame那一格就沒事,沒想到一般frame也會造成衝突。
(為了這小問題竟卡了我2天左右~ )

光看上述文字說明可能還是不知所云,請看看下面範例:

原始檔按此下載


這是一個20個frame的Flash文件,裏面較大那個方塊命名為"box",是手動拉到timeLine上的movieClip,keyframe位置在第一格frame,但存在長度有到frame20。同時在frame1時,我就用swapDepths(5),把box移到depth5的位置,然後用stop()停在frame1的位置。
另外下面有5、10、15、20四個btn,按下去則可gotoAndStop()至不同的frame。問題來了,如果依序5、10、15、20去按是不會出錯的,但一旦往回按,例如先按10再按5、或先按20再按15,box的depth就會出錯,就不會是5而變成-16382了。
(*麻煩的是這個範例我沒做Reset,錯了就要Reload)

原本我以為是depth出錯,後來發現不是,我是以box.getDepth()來取得深度,當5變成-16382時,並不是真的把box從5變成-16382,而是在-16382生出一個新的"box"。也就是depth5跟-16382各有一個名叫"box"的MC,而且當用_root.box、box .xxx之類的,都會指到新的box。

透過這個特性,我想到了一個timeLine+swapDepths的Mc複製法,完全不用attachMovie或duplicateMovieClip哦…(呼呼…但尚不知這有何實質用途 ,哈!)


按右上角的方塊會for(var i in _root){trace(i)} ,很有趣會發現大家都叫"ball"沒錯。

當我終於瞭解它不是把depth弄亂,而是因為timeLine的關係造成複制後,解決方法就是將需要swapDepth的物件,縮短它存在於timeLine上的長度,最好是一swapDepth後,就不存在於timeLine上了。當然另一個方法就是播放頭別走回頭路。




(*我還是很納悶,為什麼往前播就ok,往後就會出錯?)

1 則留言:

sdamn66 提到...

Maso 大大您好...每次都是潛水看著您低Blog 昨天熬夜趕案子就是遇到這鬼bug
我弄了個3d換圖引擎可是為了效能轉成bitmapdata 只好把menu對好位蓋它上面沒想到就遇到這超大顆低地雷...每每到第三次就出現swap物件無法控制或不受控制低現像
visible 跟 _x 都不行 看了您詳細低解說我終於懂了...實在是太感謝您啦..不然我還真不知道該怎麼解決呢...

Stand.T