从我的flash库动态获取一个类
我的flash库中有几个位图,我已经为Actionscript导出了这些位图。现在,根据我收到的FlashVar,我想加载相应的库位图从我的flash库动态获取一个类,flash,actionscript-3,class,dynamic,Flash,Actionscript 3,Class,Dynamic,我的flash库中有几个位图,我已经为Actionscript导出了这些位图。现在,根据我收到的FlashVar,我想加载相应的库位图 如何动态加载位图类?基本上,要从库中附加位图,需要执行以下操作: import flash.display.BitmapData; import flash.display.Bitmap; var bmp:BitmapData = new ClassNameOfTheBitmap(0, 0); var img = new Bitmap(bmp); addCh
如何动态加载位图类?基本上,要从库中附加位图,需要执行以下操作:
import flash.display.BitmapData;
import flash.display.Bitmap;
var bmp:BitmapData = new ClassNameOfTheBitmap(0, 0);
var img = new Bitmap(bmp);
addChild(img);
但由于您不知道类名,因此必须像下面这样动态创建类:
import flash.display.BitmapData;
import flash.display.Bitmap;
var classNameFromFlashvars:String = "xxx";
var cls:Class = getDefinitionByName(classNameFromFlashvars) as Class;
var bmp:BitmapData = new cls(0, 0) as BitmapData;
var img = new Bitmap(bmp);
addChild(img);
在这种情况下,图像的链接属性中的类名将是xxx
,您只需使用和即可。其他答案和文件都有这些优点。加载外部swf后,您只需使用类似以下内容来获取位图类:
loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
编辑:添加链接:)我创建了一个类,例如MyClass
public class MyClass extends MovieClip
{
private var testImg:Bitmap = new Bitmap();
public function MyClass()
{}
public function set testImg(value:String):void
{
var cls:Class = getDefinitionByName('team_' + value) as Class;
var bmp:BitmapData = new cls(0, 0);
testImg = new Bitmap(bmp);
addChild(testImg);
}
}
例如,我的库中的项被命名为team_4534
MyClass是否实际检测到所有库资产?我不需要以某种方式导入它们,或者说它们存在吗 好的,所以我发现了一种不获取“错误引用错误:错误#1065:变量团队_xxx未定义”的非常丑陋的方法 我在flex中使用.swc中的所有不同类创建了一个函数:
private function logos():void
{
team_25502;
team_25504;
team_25508;
team_25509;
team_25511;
team_25514;
team_25517;
team_25521;
team_25530;
team_25591;
team_66036;
team_66230;
team_85230;
team_89483;
team_89484;
}
如果有人有更好的想法,我相信有人有,请发表评论。这很有道理。原因是编译器在“编译时”不包含这些类中的任何一个,因为它们从未被使用过,因此它不足以聪明地看到类名可能是在运行时动态生成的。因此,已发布的swf没有任何此类。然而,在代码中“提到它们”之后,编译器将包含它们
我想这不是动态类名的理想架构。也许他们应该添加一些强制编译设置?位图类是什么意思?图像?是的,我的flash库中有位图图像。是否确实要将位图文件存储在flash库中(我假定您只是指外部swf)?您可以直接加载它们,而不必包装到swf中。是的,我实际上希望它们在我的库中,因为我希望它们以某种方式嵌入。您假设他想从外部swf加载内容,而他可能只想从当前swf的库中加载位图…它在我的.fla环境中工作,但当我将其导出为.SWC到flex并使用MyClass()时,得到的错误是ReferenceError:error 35; 1065:Variable team_66036未定义。在global/flash.utils::getDefinitionByName()中,似乎找不到类。可能是应用程序域存在一些问题。您确定在Flex中,您的swc已导入到主应用程序域中吗?而且你的类必须是公共的(显然)。在我的应用程序中,它在libs下,MyClass当然是公共的。我可以访问MyClass中的所有内容,包括set testImg函数。有没有办法在MyClass中说“导入库”呢?别忘了导入这个实用程序。导入flash.utils.getDefinitionByName;