3

我创建了一个 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

4 回答 4

2

编辑:我想你会在这里找到答案。

以下适用于使用加载了类的 SWF 中的Loader类。

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);
}
于 2009-09-24T14:10:26.543 回答
1

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

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

这样可以节省大量代码编写,并将资源直接嵌入到 SWF 中,避免使用多个加载器。

于 2009-09-24T16:00:59.270 回答
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);

}

另一种方法是导出您希望动作脚本使用的符号并改用 .swc。您可以在 flash 文件中设置具有完整命名空间的类,因此对于 MyBox,您可以将其设置为 com.company.Assets.MyBox 并且用法与您的意图相似:

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

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

}
于 2009-09-24T16:09:36.067 回答
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() 
    {

    }
}
于 2009-10-07T08:21:38.073 回答