【发布时间】:2014-02-13 14:54:28
【问题描述】:
(请注意,我的代码并没有什么真正的“错误”(从某种意义上说,它可以工作),但更想知道它是如何工作的以及引擎盖下发生了什么)
目前我有两个库,每个库都有一个对象。一个设置为“Apple”类,另一个设置为“Pear”,它们位于单独的外部 swfs 中。
Apple 的基类是 MovieClip,就内容而言,它是一个影片剪辑:有帧 + 动画
这是我用来创建和显示 Apple 影片剪辑对象的代码:
function getClip(inputName, spriteLibrary:Loader):MovieClip {
var aClass:Class = spriteLibrary.contentLoaderInfo.applicationDomain.getDefinition(inputName) as Class;
return (MovieClip) (new aClass());
}
this.addChild(getClip("Apple", referenceToTheLoadedSwfThatHasAppleInIt));
上述工作正常,Apple 出现在舞台上并播放。
但是,Pear 的基类是 Sprite(没有动画、帧等)。所以上面的方法失败了,因为该方法应该返回一个 MovieClip。
this.addChild(getClip("Pear", referenceToTheLoadedSwfThatHasPearInIt));
我想了一会儿我必须有上述方法的两个版本,一个用于 Sprite,一个用于 MovieClip。但是只是为了看看,我把它改成了Sprite并尝试创建Apple:
function getClip(inputName, spriteLibrary:Loader):Sprite {
var aClass:Class = spriteLibrary.contentLoaderInfo.applicationDomain.getDefinition(inputName) as Class;
return (Sprite) (new aClass());
}
this.addChild(getClip("Apple"), referenceToTheLoadedSwfThatHasAppleInIt);
this.addChild(getClip("Pear"), referenceToTheLoadedSwfThatHasPearInIt);
现在两者都可以工作,但有趣的是,我发现即使该方法返回一个 Sprite,Apple 似乎仍然可以正常工作并在舞台上播放它的动画。我可以将其投射到 MovieClip 并访问所有与 MovieClip 相关的属性等等。
然后我的问题是,当 Apple 作为 Sprite“存在”时,所有与 MovieClip 相关的“东西”发生了什么,这实际上是在必须使用 MovieClips 和 Sprite 时做的正常事情(假装你只仅在需要时才拥有 Sprite 并投射到 MovieClip?)
【问题讨论】:
标签: actionscript-3 flash