blog.Ring.idv.tw

「unloadMovie()」vs.「removeMovieClip()」差異(二)

「unloadMovie()」vs.「removeMovieClip()」差異(二)

其實根據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。

範例下載

2007-05-29 18:13:32

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment