如果使用Flash中的Loader动态加载对象,如何将参数传递给构造函数?

时间:2011-04-11 16:45:15

标签: flash actionscript-3

这可能吗?如果是的话怎么样?

否则有什么替代方案?

通过动态我的意思是使用

    loader = new Loader();                      
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, finishLoading);
    loader.load(new URLRequest("MySWF.swf"));   

2 个答案:

答案 0 :(得分:2)

SWF本身不是一个类,更像是一个类和其他东西(如图像或音频字节)的集合,它们都已存档并可以使用。您不能拥有SWF的构造函数。但是,您可以做的是加载SWF,然后在加载完成后,您可以从该SWF实例化一个类,并将您想要的任何参数传递给它的构造函数。

此外,可以将参数发送到SWF,然后在swf中将它们作为flashvars处理,但当然不是构造函数:)

loader.load(new URLRequest("MySWF.swf?day=tue&week=3"));

然后你可以这样得到它们:

var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
trace(paramObj.day);
trace(paramObj.week);

答案 1 :(得分:1)

如果SWF中有文档类,那么在构造函数中使用参数创建公共init方法,甚至使用getter和setter,而不是使用参数:

import flash.display.MovieClip;

public class MySWF extends MovieClip
{
    private var _var1   :String;
    private var _var2   :int;

    public function MySWF():void
    {

    }

    public function init(var1:String):void
    {
        _var1 = var1;
    }

    public function get var2():int
    {
        return _var2;
    }
    public function set var2(value:int):void
    {
        _var2 = value;
    }
}

然后你可以在加载你的swf之后调用这些:

private function finishLoading(event:Event):void
{
    var mySWF:MySWF = event.target.content as MySWF;
    addChild(mySWF);
    mySWF.init("This is a string");
    mySWF.var2 = 5;
{