Flash 加载外部swf并将其分配给自定义类

Flash 加载外部swf并将其分配给自定义类,flash,actionscript-3,Flash,Actionscript 3,我有一个扩展精灵的建筑精灵。我尝试将外部swf库加载到我的主应用程序中 我有这个代码,它工作得很好: private function loadBuilding():void{ // this context is necessary to find the shared assets var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); // load in the ass

我有一个扩展精灵的建筑精灵。我尝试将外部swf库加载到我的主应用程序中

我有这个代码,它工作得很好:

private function loadBuilding():void{
// this context is necessary to find the shared assets
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);

// load in the asset swf
var loader:Loader = new Loader();
var req:URLRequest = new URLRequest("assets/Tree.swf");
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onAssetsLoaded);  
    loader.load(req, context);
 }


private function onAssetsLoaded(_event:Event):void{
// get a reference to the loaded library
var loader:Loader = LoaderInfo(_event.target).loader;
var library:* = loader.content;
var assetClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("Tree") as Class;
// create an instance of the shared asset
var mySprite:Sprite = new assetClass();       
.....
 }
我创建了一个新类BuildingSprite,它扩展了Sprite:

    package
{   
import flash.display.Sprite;

public class BuildingSprite extends Sprite
{
    public function BuildingSprite()
    {
        super();
    }
}
}
在上面加载的OnAssets中,我更改了代码:

var mySprite:Sprite = new assetClass();
trace(new assetClass() as Sprite)

我调试并得到以下错误: 主线程(挂起:类型错误:错误#1034:类型强制失败:无法 转换Tree@c8f0301(到建筑工地。)

我认为有一个类型转换错误。
有没有办法加载外部swf库并将其分配给自定义类?

这里的问题是
Tree
已经是扩展Sprite类的类了“无法转换Tree@c8f0301

BuildingSprite
是另一个扩展sprite的类。将其视为一棵树,其中Sprite是主干,类是分支,而两者都与原始Sprite类相关,它们彼此不认识

你需要做的是展示它们之间的关系。分两步将树转换为精灵,将精灵转换为BuildingSprite

var mySprite:BuildingSprite=(new assetClass()作为Sprite)作为BuildingSprite

如果您在树类中使用附加函数扩展了Sprite类,那么您可能会丢失这些函数或遇到一些问题,但是如果您只想使用一个图形,那么应该这样做


另一方面,使用可用的库可以加快速度。因此,如果有机会,一定要查看casalib,特别是(与主题相关的)swfLoad下的和函数


编辑

看来我应该多测试一下。事实证明,如果你这样做
var s:Sprite=(新的assetClass()作为Sprite)
,它将
s
转换为assetClass()所属的任何类,而不是相反,因此如果跟踪
s
,它将不再是Sprite


我处理这个问题的方法是创建一个通用的sprite(实际上是CasaSprite)并添加一个
var-view:sprite
(或displayObject或MovieClip)作为子对象。这可能不是您一直在寻找的答案,但它很有效。

我试图跟踪代码:

var mySprite:Sprite = new assetClass();
trace(new assetClass() as Sprite)
它返回:

[object Tree]
null

但它返回:

[object Tree]
null
我在该库中创建了带有树符号的thetree.swf

  • 启用“导出操作脚本”

  • 和“基类:flash.display.MovieClip”

这里有错误吗

谢谢你的指导。我正在使用等轴测库创建一个游戏。我尝试加载包含库中所有建筑的外部库swf,而不是使用BitmapData加载每个建筑的png

我相信swf的文件大小将小于所有png文件。我需要一个自定义类用于扩展Sprite/MovieClip的构建,这样我就可以自定义属性,如方向、成本等。您有任何资源示例代码可以下载以供参考吗?谢谢