首頁 > Actionscript, 程式設計 > [AS3]控制上層影片片段的語法

[AS3]控制上層影片片段的語法

2010年5月2日/文章瀏覽次數:401 次

 sampic.jpg

早期AS2時MovieClip類別是主角,用MovieClip一套打天下,當要存取上層影片片段或主時間軸,通常使用parent和root就可以搞定。但如果在AS3直接使用MovieClip類別的屬性或方法(像root.gotoAndPlay(5)),這樣就會發生錯誤。

原因在於AS3將類別做更細部的區分,分成以下幾個有繼承關係的類別:

DisplayObject.jpg

parent的資料類型為顯示物件容器:DisplayObjectContainer
root的資料類型為顯示物件:DisplayObject
所以我們常使用到的parent,root跟MovieClip是不一樣的資料類型。

若是直接使用root.stop(),就會出現以下的錯誤訊息:

?View Code ACTIONSCRIPT
1
1061: 呼叫可能未定義的方法 stop (透過靜態類型 flash.display:DisplayObject 的參考)

解決方法有兩種:

一、使用MovieClip(parent)強制進行形態轉換

?View Code ACTIONSCRIPT
1
2
3
4
5
btStop.addEventListener(MouseEvent.CLICK, btStopClickHandler);
function btStopClickHandler(evt:MouseEvent):void {
	//控制上一階層影片片段停止
	MovieClip(this.parent).stop();
}

二、使用as運算子,使它被辨識為MovieClip物件

?View Code ACTIONSCRIPT
1
2
3
4
5
6
btPlay.addEventListener(MouseEvent.CLICK, btPlayClickHandler);
function btPlayClickHandler(evt:MouseEvent):void {
	//控制上一階層影片片段開始
	var myParent:MovieClip = parent as MovieClip;
	myParent.play();
}

所以透過上述兩種語法就可以控制不同上面階層的物件,是個需要注意的小細節。

相關文章:

cloudfly Actionscript, 程式設計

  1. NiauWu
    2010年8月12日09:28 | #1

    謝謝你
    不過我用第一個方法會出現
    TypeError: Error #1034: 強制轉型失敗: 無法將 flash.display::Stage@965d1e9 轉換成 flash.display.MovieClip。at _fla::MainTimeline/sceneStopHandler()
    第二個方法會出現
    TypeError: Error #1009: 無法存取 Null 物件參考的屬性或方法。
    at _fla::MainTimeline/scenePlayHandler()
    但是用this.stop();就可以了
    後來發現原來第一個方法的MovieClip(this.parent).stop();中的this換成影片片段的命名就可以了

  1. 目前還沒有任何 trackbacks 和 pingbacks。