2010-09-25 146 views
1

我結束了以下問題很困惑,並會是比較清楚感激。的ActionScript - 動態添加屬性雪碧

一般來說,我是如何工作的,包括在Flash Authoring中設計我的所有圖形,通過將基類更改爲flash.display.Sprite將它們轉換爲Sprite符號,給出我的實例名稱並最終將它們導出到ActionScript。

的方法實際上允許我上,我已經出口到ActionScript中,就好像他們是影片剪輯實例我Sprite實例動態創建的代碼性能。我不完全確定爲什麼我能夠做到這一點,但我可以。在輪詢對象以確定它們的超類時,它們確實是Sprites而不是MovieClip。

然而,一如預期,如果我編程從頭代碼的新精靈,並嘗試動態屬性添加到新的編程精靈將導致編譯時錯誤。

package 
{ 
import flash.display.Sprite; 
import flash.utils.getQualifiedSuperclassName; 

public class Document extends Sprite 
    { 
    public function Document() 
     { 
     trace(getQualifiedSuperclassName(blueOvalInstance)); 
     //flash.display::Sprite (it's not a MovieClip) 

     trace(blueOvalInstance.hasOwnProperty("currentFrame")); 
     //false (ok, ok, it's definately not a MovieClip) 

     blueOvalInstance.myNewProperty = true; 
     //dynamically added boolean property on a Sprite instance 

     trace(blueOvalInstance.hasOwnProperty("myNewProperty")); 
     //true. fancy that! my Flash Authoring exported Sprite has a dynamically added property 

     codeSprite(); 
     } 

    private function codeSprite():void 
     { 
     var myCodedSprite:Sprite = new Sprite(); 

     myCodedSprite.graphics.beginFill(0xFF0000); 
     myCodedSprite.graphics.drawRect(0, 0, 100, 100); 
     myCodedSprite.graphics.endFill(); 

     addChild(myCodedSprite); 

     myCodedSprite.anotherNewProperty = true; 
     //dynamically added boolean property on a Sprite instance, just like before! 

     //Compile Time Error!!! 

     //1119: Access of possibly undefined property anotherNewProperty through a reference with static type flash.display:Sprite. 
     } 
    } 
} 

那麼,爲什麼它可以動態我添加屬性出口精靈在我的文檔類,如果他們沒有影片剪輯,而我不能,如果我在代碼中創建他們自己?

下面的圖像顯示一個新的符號BlueOval出口到的ActionScript從Flash創作與基類的Sprite(未影片剪輯)的。請注意庫面板中的新綠色(而不是藍色)彩色「影片剪輯」圖標。

alt text

回答

1

您類需要,以便具有在運行時添加的屬性被定義爲動態類。

看看這個頁面:http://flexmusings.wordpress.com/2008/07/23/actionscript-3-dynamic-classes-part-2/

+0

,你說我上面列出的被自動定義這些基類實例作爲動態的方法? – TheDarkIn1978 2010-09-26 09:33:55

+0

是的,因爲你沒有通過調用新的Sprite()來實例化它們,通過超類如何被列爲Sprite來判斷,Flash id動態地創建了一個對象,我相信它也是動態的。) – Aaron 2010-09-26 15:51:19

+0

humm ...我剛剛意識到如果上述方法嵌套在其他精靈中,則上述方法無法工作(無法向精靈添加屬性)。它似乎只能用於顯示列表中索引0的精靈。 – TheDarkIn1978 2010-09-26 19:30:29

1

VAR myCodedSprite:雪碧=新的Sprite(); myCodedSprite是密封類的對象,因此它不能在運行時添加屬性..但是,當您擴展此類時,可以在子類中添加自定義屬性。