2014-10-28 44 views
0

我不能讓我的頭靠近這個。我正在查看Flash Professional CS5基本培訓中的lynda.com ActionScript 3.0。我理解所有其他的東西,但是這個傢伙的地方滑冰者在舞臺上,他對主時間軸的第一幀上的代碼:如何鑄造工作和回到父母

import flash.display.MovieClip; 
import flash.events.MouseEvent; 

var boarder:MovieClip = boarder_mc; 
boarder.stop(); 
boarder.x = 0; 
boarder.y = 0; 
boarder.addEventListener(MouseEvent.CLICK, clickedBoarder); 

function clickedBoarder(evt:MouseEvent):void 
{ 
    boarder.gotoAndPlay(2); 
} 

function restart():void 
{ 
    boarder_mc.gotoAndStop(1); 
    boarder_mc.x = 0; 
} 

然後在溜冰者,他有一個顯示對象容器(影片剪輯)在其中有一個顯示對象是一個滑板運動員的位圖圖像,然後是在滑板運動員的時間線上的一個動畫,最後滑板運動員落下。在這最後一幀他有:

stop(); 
parent.restart(); 

他解釋說,這可能不起作用,它不,他得到了一個錯誤:

1061: Call to a possibly undefined method restart through a reference with static type flash.display:DisplayObjectContainer. 

他解釋說,它知道有一個stop()函數的主時間軸,並且知道主時間軸上有重新啓動功能,但數據類型不同。他還說,父母是主要的時間表。

他說,我們需要把Object(parent).restart();

我的問題是什麼樣的數據類型和主時間軸(影片剪輯,的DisplayObject,顯示對象容器)是什麼?

爲什麼它會是一個不同的數據類型?

感謝

回答

0

主時間軸是一個影片剪輯,或者如果你有一個的DocumentClass,則可能是一個自定義類型,至少擴展影片剪輯。

但是,當您要求您的滑板選手MovieClip的「父級」時,您確實在使用MovieClip從DisplayObject(​​)繼承的父級屬性。該屬性返回父類型爲DisplayObjectContainer的類型,而不管它實際是什麼類型。由於它是DisplayObject的父類,所以它不需要擴展DisplayObjectContainer類型,所以這就是它返回的方式。

因此,當編譯ActionScript時,編譯器會查看「parent」,並將其視爲DisplayObjectContainer類型,查看DisplayObjectContainer的定義和錯誤,因爲DisplayObjectContainer沒有稱爲「restart」的函數。

您對「停止」功能的說法並不正確,因爲您並未在主時間軸上調用stop,而是在Skater的時間軸上調用stop。如果你想在主時間軸上調用stop,你需要調用parent.stop(),這會給你同樣的錯誤,因爲DisplayObjectContainer沒有叫做stop的方法。

這些都是編譯器錯誤,是由於編譯器遵循一組規則而造成的,它不能對程序運行時實際發生的情況做出假設。它只知道當你調用parent.restart()時,它可能會收到一個DisplayObjectContainer,它不會重新啓動方法,並且會發生運行時錯誤。

現在,通過將父類轉換爲類型對象,您可以有效地告訴編譯器該東西可以擁有任何方法或屬性,因爲Object是一個動態類。因此,編譯器現在假設你作爲開發人員知道「重新啓動」方法將存在於賦予該位代碼的「對象」上,因此不會再出錯。

0

非常感謝您爲您回覆。這真是令人困惑。我認爲DisplayObjectContainer是顯示對象的一個​​子類,它擴展了它?我知道顯示對象容器是一個顯示對象,它可以包含其他顯示對象和顯示對象容器。所以我的理解是,該maintimeline一個影片剪輯,因此一個DisplayObejctContainer,它可以包含其他顯示對象(即您在您的應用程序創建),這就是爲什麼家長回報顯示對象容器,但它也是一個抽象類,意味着它不能具有諸如.restart和goToAndPlay()之類的方法,因爲它實際上不能被實例化。但是如果一個影片剪輯像你說的話,就.....我不明白it.Does這意味着它是一個抽象類?