2010-03-05 97 views
0

var myObject:Sprite = new Sprite()之間的區別是什麼? 和 var myObject:Sprite = new MovieClip();actionscript 3.0 OPP類型和類

+0

謝謝大家的幫助。 我正在使用組合模式。所有的組件都是精靈,除了一個是movieClip。更新所有組件時,如何處理movieClip的異常? – user229738

+0

@quan,我建議你發佈一個單獨的問題,並更深入地描述你想實現的目標。 – richardolsson

回答

1

MovieClip和Sprite是單獨的類,儘管彼此相關,因爲MovieClip擴展了Sprite。因此,MovieClip具有Sprite所具有的所有相同功能,並且它還增加了更多,主要與時間軸動畫(play(),stop(),gotoAndPlay(),addFrameScript()等有關。)

因爲MovieClip具有與Sprite相同的功能,您可以將MovieClip對象分配給類型爲Sprite的變量。

var myObject : Sprite = new MovieClip(); 

雪碧,然而,這並不共享所有MovieClip的功能,所以這是行不通的其他方式:如果你想知道一個特定的類繼承鏈

// Will not work 
var myObject : MovieClip = new Sprite(); 

,檢查出文檔,例如for MovieClip:。你可以看到它擴展了Sprite,而後者繼而擴展了InteractiveObject,依此類推。

在與語言無關的術語中,這稱爲繼承,其優點之一是polymorphism

0

其中之一是不正確的,其中之一就是:)

var myObject:Sprite = new Sprite(); 

是好的,你說這是類型Sprite(myObject的後位:),然後調用構造函數雪碧'='之後:新的Sprite();在另一個你仍然說它是類型Sprite(myObject:Sprite),然後當你說新的MovieClip()時調用MovieClip的構造函數;

如果你想創建一個影片剪輯:

var newMC:MovieClip = new MovieClip(); 
+1

兩者都是「正確的」,但一個依賴於繼承的概念,而另一個則不是。 – richardolsson

+0

啊,我明白了,好吧,我在那裏學到了東西;) – debu

+0

好吧,我很高興你做到了。 :) – richardolsson

0

不同的是,

var myObject : Sprite = new Sprite(); 

聲明Sprite類型的新變量,並用新的Sprite對象賦給它,而

var myObject : Sprite = new MovieClip(); 

聲明類型的新變量併爲其指定一個新的MovieClip對象。

MovieClip繼承自Sprite,因此將MovieClip投射到Sprite沒有問題。 MovieClip和Sprite之間有一些差異。主要區別在於MovieClip具有時間軸,而Sprite不具有時間軸。