as3 - 从Assets类获取库符号

时间:2009-09-23 19:45:30

标签: 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() 
        {

        }

    }

现在,在其他一些课程中,我想创建一个新框:

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

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

}

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

4 个答案:

答案 0 :(得分:2)

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

以下内容适用于使用加载了Loader类的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);
}

答案 1 :(得分:1)

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

在SWC中为AS导出的每个符号都可以在同一范围内使用。

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

答案 2 :(得分:0)

如果您仍想要.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);

}

另一种方法是导出要由Action Script使用的符号,然后使用.swc。您可以在Flash文件中设置具有完整命名空间的类,因此对于MyBox,您可以将其设置为com.company.Assets.MyBox,其用法与您的预期类似:

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

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

}

答案 3 :(得分:0)

您可以在Asset类中创建新对象..(这也为您提供了创建可重用资产池的可能性)

类似的东西:

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() 
    {

    }
}