其實根據ActionScript 2.0 Language Reference的說明,我們就可以了解「MovieClip.unloadMovie()」和「MovieClip.removeMovieClip()」的主要差異,相關說明如下:
「MovieClip.unloadMovie()」= Removes the contents of a movie clip instance.
「MovieClip.removeMovieClip()」= Removes a movie clip instance.
也就是說,「MovieClip.unloadMovie()」是移除此MovieClip實體內的任何內容(不包含Properties和Clip Handlers),而「MovieClip.removeMovieClip()」則是一併將此MovieClip實體移除,所以「MovieClip.unloadMovie()」比較像是做「清除」的動作。
「MovieClip.unloadMovie()」清除 vs.「MovieClip.removeMovieClip()」移除
我們一樣在Stage上用「Rectangle Tool」建立一個正方形的MovieClip,並將「Frame Rate」先設為「1」,如此較方便做測試,最後為它加上程式一~
程式一
onClipEvent(load) { k = 20; } onClipEvent(enterFrame) { trace("[_x]="+_x); trace("[k]="+k); } on(release) { trace("Removed!"); this.unloadMovie(); }
接著發佈執行並點擊它之後~
[_x]=10 [k]=20 [_x]=10 [k]=20 Removed! [_x]=10 [k]=undefined
由此即可證明呼叫「MovieClip.unloadMovie()」並不會移除此實體的Properties和Clip Handlers,因為「onClipEvent(enterFrame)」仍然還在執行。
若是我們將程式改為程式二~
程式二
onClipEvent(load) { k = 20; } onClipEvent(enterFrame) { trace("[_x]="+_x); trace("[k]="+k); } on(release) { trace("Removed!"); this.swapDepths(0); this.removeMovieClip(); }
接著發佈執行並點擊它之後~
[_x]=10 [k]=20 [_x]=10 [k]=20 Removed!
也證明呼叫「MovieClip.removeMovieClip()」的確會將此MovieClip「移除」。
然而這樣的差異有何特別呢?
您可以試試呼叫「MovieClip.unloadMovie()」將此MovieClip先行清除,然後再更改此實體的Properties(e.g. _x、_y)~最後再藉由著此實體呼叫「MovieClip.loadMovie()」來載入另一個外部的SWF,便會將目前此實體的Properties再度應用在新載入的SWF。