Flash as3-从资源类获取库符号

Flash as3-从资源类获取库符号,flash,actionscript-3,embed,assets,Flash,Actionscript 3,Embed,Assets,我已经创建了一个assets.swf,我想在其中保留我所有的符号。然后,我创建了一个Assets类来进行嵌入。看起来是这样的: public class Assets extends MovieClip { [Embed(source="assets.swf", symbol="MyBox")] public static var MyBox:Class; public function Assets() {

我已经创建了一个assets.swf,我想在其中保留我所有的符号。然后,我创建了一个Assets类来进行嵌入。看起来是这样的:

public class Assets extends MovieClip
    {
        [Embed(source="assets.swf", symbol="MyBox")]
        public static var MyBox:Class;

        public function Assets() 
        {

        }

    }
现在,在另一个类中,我想创建一个新框:

import com.company.Assets;
...
public function Game() 
{

    var myBox:MovieClip = new Assets.MyBox();
    addChild(myBox);

}

我知道这是不正确的,我得到了“TypeError:Error#1007:在非构造函数上尝试实例化”。我如何才能访问assets类中的资产?

编辑:我想你会找到答案的

以下内容适用于使用加载了
Loader
class的SWF中的类

private function onLoad(e:Event):void
{
 var domain:ApplicationDomain = LoaderInfo(e.target).applicationDomain;
 var Type:Class = domain.getDefinition("pack.MyComponent") as Class;
 var myBox:MovieClip = new Type();
 addChild(myBox);
}

实现它的另一个好方法是编译SWC并像导入其他类一样导入它

在SWC中为AS导出的每个符号将在相同的范围内为您提供


这节省了大量的代码编写,并将资源直接嵌入到SWF中,避免了多个加载程序。

如果仍然需要.SWF路由,可以:

public class Assets extends MovieClip
    {
        [Embed(source="assets.swf", symbol="MyBox")]
        private static var _MyBox:Class;
        public static function get NewBox():MovieClip {
            return new _MyBox();
        }
    }
...

import com.company.Assets;
...
public function Game() 
{

    var myBox:MovieClip = Assets.NewBox;
    addChild(myBox);

}
另一种方法是导出要由操作脚本使用的符号,并改用.swc。您可以在flash文件中设置具有完整名称空间的类,因此对于MyBox,您可以将其设置为com.company.Assets.MyBox,其用法与您预期的类似:

import com.company.Assets.*;
...
public function Game() 
{

    var myBox:MovieClip = new MyBox();
    addChild(myBox);

}

可以在资产类中创建新对象。。(这也使您有可能创建一个可重用资产池)

比如:

public class Assets extends MovieClip
{
    [Embed(source="assets.swf", symbol="MyBox")]
    private static var MyBox:Class;

    public static function getNewBox():DisplayObject {
        return new MyBox();
    }

    public function Assets() 
    {

    }
}

您确定symbol=“MyBox”是正确的符号名称吗?因为你似乎做得很好,我也有同样的问题。你使用的是Flash还是FlashDeveloper?我开始怀疑这是一个FlashDeveloper特性(不是AS3特性)