Flash 加载外部swf并将其分配给自定义类
我有一个扩展精灵的建筑精灵。我尝试将外部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
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的构建,这样我就可以自定义属性,如方向、成本等。您有任何资源示例代码可以下载以供参考吗?谢谢