◎事由:
- 在Flash開發環境上,如果是外部類別則需要繼承MovieClip或是Sprite兩種類別才能運作,而在影格上則不需要特別去做繼承因此產生了一個疑問為什麼?
- Stage下有一個root,而直接寫在影格上的程式碼呼叫的gotoAndPlay()其實是呼叫了root上的gotoAndPlay()。
網路上找到的資訊補充:
- 而由網路上找尋到趙老師的Blog上有說明每個顯示物件上有root屬性,而Stage屬性上的root會指向一個MainTimeline的Class。
- 直接在影格上使用trace(this),會出現MainTimeline這個Class,所以直接在影格上的actionscript是在MainTimeline上作用,因此使用外部類別時需要要繼承MovieClip或Sprite才可運作。
◎衍生疑問:
所以常常看到文件中說不要使用外部類別的程式後還在影格中程式碼也跟這個有所關聯?
您可以從adobe提供的查閱文件中得知Stage與MovieClip其各自的繼承鍊之關係。
[1]http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/Stage.html
[2] http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/MovieClip.html
很明顯的由文件中可得知Stage本身並無gotoAndPlay()這個方法。
補充一點,最近在看了一次文件發現很重要的一句話如下:
Stage 物件未提供全域存取, 您需要透過 DisplayObject 實體的 stage 屬性才能存取它。
SWF 結構是這樣的,Stage - Root (Document Class)
回覆刪除影格上的.as gotoAndPlay 其實是對 Root 作用
謝謝Ticore大哥與大腸兄的指導,原本觀念不清楚的地方已經清楚了
回覆刪除