当我在外部swf上使用时,事件ADDED_TO_STAGE执行了两次as3

时间:2013-11-27 12:06:05

标签: actionscript-3 greensock

当我加载包含added_to_stage方法的外部swf时,我遇到了问题。它执行两次。我不明白它为什么这么做?如果swfs都有自己的舞台,我也很有意思?

感谢您的回答

我正在使用greensock库来处理加载。

Flash预加载器:

package  {
    import flash.display.MovieClip;
    import com.greensock.loading.SWFLoader;

    public class Preloader extends MovieClip 
    {

        public function Preloader() 
        {
            var loader : SWFLoader = new SWFLoader("Prototype1.swf");
            loader.load();
            addChild(loader.content);
        }
    }
}

外部SWF:

public class Prototype1 extends MySprite 
{

    public function Prototype1() 
    {   
        addEventListener(Event.ADDED_TO_STAGE, onAdded);    
    }

    private function onAdded(e:Event):void
    {
        trace("onAdded");
    }
}

OUTPUT:onAdded onAdded

1 个答案:

答案 0 :(得分:1)

greensock文档说:

suppressInitReparentEvents: Boolean - 如果为true,则SWFLoader将抑制通常在将子加载的swf重新分配到ContentDisplay时调度的REMOVED_FROM_STAGE和ADDED_TO_STAGE事件(当显示列表中的任何DisplayObject获得重定位时,这总是发生在Flash中 - SWFLoader最初默认是绕开它,以避免在以某种方式编码子swf时可能出现的常见问题。)

因此,您可以将Preloader.as中的代码更改为:

var loader:SWFLoader = new SWFLoader("Prototype1.swf", {suppressInitReparentEvents: true});

您只需拨打onAdded一次电话。