设置movieClip宽度和高度失败

时间:2015-02-10 01:30:53

标签: actionscript-3

奇怪的问题在这里 - 希望我犯了一个非常愚蠢的错误。

在AIR项目中,我使用SWFLoader的实例在自定义类(MovieClip的子类)中加载本地.swf。发生Event.COMPLETE事件时,将调用以下方法。没什么特别的。

问题在于,当我在该方法中设置自定义类的宽度和高度时,有时它会采取"有时它不会。这是控制台输出,用于动态加载其中的一些。我正在使用虚拟值(100)。加载的swfs完全相同,每个都成功加载,但我的自定义类的一个实例反映了设置的尺寸,但另一个实例没有。

     swf 20 50
     this: instance1120
     width: 100 height: 100
     x: 100 y: 100
     rotation: 0


     swf 20 50
     this: instance1122
     width: 0 height: 250
     x: 100 y: 100
     rotation: 0

protected function btn_completeHandler(event:Event):void
        {
            eventBtn.removeEventListener(Event.COMPLETE, btn_completeHandler);

            if(_source.type == "swf"){
                swf = eventBtn.content as MovieClip;

                trace("swf", swf.width, swf.height);

                this.removeChildren();
                this.addChild(swf);

                swf.x = -swf.width/2;
                swf.y = -swf.height/2;

                this.x = 100;
                this.y = 100;
                this.width = 100;
                this.height = 100;
                this.rotation = 0;

                trace("this:", this.name);
                trace("width:", this.width, "height:", this.height);
                trace("x:", this.x, "y:", this.y);
                trace("rotation:", this.rotation);

                trace("\n");
            }
        }

1 个答案:

答案 0 :(得分:2)

这可能对您有所帮助: Set width/height of a movieclip in AS3

您应该确保在更改其父级宽度之前正确添加了swf子级。

我会尝试这样的事情:

    protected function btn_completeHandler(event:Event):void
    {
        eventBtn.removeEventListener(Event.COMPLETE, btn_completeHandler);

        if(_source.type == "swf"){
            swf = eventBtn.content as MovieClip;

            trace("swf", swf.width, swf.height);

            this.removeChildren();
            swf.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
            this.addChild(swf);

            swf.x = -swf.width/2;
            swf.y = -swf.height/2;
        }
    }

    private function onAddedToStage(e:Event):void
    {
        this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        this.x = 100;
        this.y = 100;
        this.width = 100;
        this.height = 100;
        this.rotation = 0;

        trace("this:", this.name);
        trace("width:", this.width, "height:", this.height);
        trace("x:", this.x, "y:", this.y);
        trace("rotation:", this.rotation);

        trace("\n");
    }