2010-09-25 148 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是密封类的对象,因此它不能在运行时添加属性..但是,当您扩展此类时,可以在子类中添加自定义属性。