Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从我的flash库动态获取一个类_Flash_Actionscript 3_Class_Dynamic - Fatal编程技术网

从我的flash库动态获取一个类

从我的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

我的flash库中有几个位图,我已经为Actionscript导出了这些位图。现在,根据我收到的FlashVar,我想加载相应的库位图


如何动态加载位图类?

基本上,要从库中附加位图,需要执行以下操作:

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;