我结束了以下问题很困惑,并会是比较清楚感激。的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(未影片剪辑)的。请注意库面板中的新绿色(而不是蓝色)彩色“影片剪辑”图标。
,你说我上面列出的被自动定义这些基类实例作为动态的方法? – TheDarkIn1978 2010-09-26 09:33:55
是的,因为你没有通过调用新的Sprite()来实例化它们,通过超类如何被列为Sprite来判断,Flash id动态地创建了一个对象,我相信它也是动态的。) – Aaron 2010-09-26 15:51:19
humm ...我刚刚意识到如果上述方法嵌套在其他精灵中,则上述方法无法工作(无法向精灵添加属性)。它似乎只能用于显示列表中索引0的精灵。 – TheDarkIn1978 2010-09-26 19:30:29