1

Google 建议以下问题并不少见:使用 Loader 将某些内容加载到 Flash 阶段后,我想调整它的大小。但是,如果您在加载内容之前执行此操作,则调整图像大小会导致它消失。

建议的解决方案通常是为 Event.COMPLETE 使用事件侦听器。这是我的代码:

public function FlixelTest()
    {
        super();

        // support autoOrients
        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;

        myLoader = new Loader();                     
        myLoader.x = (stage.fullScreenWidth-640)/2;
        myLoader.y = (stage.fullScreenHeight-480)/2;
        addChild(myLoader);                                     

        var url:URLRequest = new URLRequest("stuff.swf");
        myLoader.load(url);    
        myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadProdComplete);


    }

    function loadProdComplete(e:Event):void{
        myLoader.height = 480;
        myLoader.width = 640;
    }

根据到目前为止我在网上找到的每一篇文章,这个解决方案应该可以工作。当事件触发时,加载器完成,并且可以调整大小。然而,事实并非如此。注释掉修改 .height 和 .width 的行会导致 SWF 出现,取消注释它们并再次运行,SWF 永远不会加载。

会不会有其他东西在干扰这里?这是使用 FlashBuilder 构建一个 Actionscript3 -> Android 项目。

编辑 - 这里的解决方案似乎也不起作用:加载 swf 后调整加载程序大小问题

更新 - 我有一个有效且可怕的解决方案,如下所示:

function loadProdComplete(e:Event):void{
        if(myLoader.width != 0){
            myLoader.width = 640;
            myLoader.content.width = 640;
        }
        else{
            timer = new Timer(500);
            timer.addEventListener(TimerEvent.TIMER, timertick); // there should be a comma here but yahoo replaces it with ... 
            timer.start();
        }
    }

    function timertick(e:TimerEvent){
        timer.stop();
        stage.dispatchEvent(new Event(Event.COMPLETE));
    }

它基本上使用内容的宽度来查看它是否已完成加载。如果没有,它会等待半秒并重新触发 COMPLETE 事件。这实际上有助于显示它(虽然宽度尚未调整,我认为这是一个单独的问题) - 我不敢相信这是让它工作的唯一方法......

4

1 回答 1

1

虽然不是严格意义上的解决方案,但我绕过它的方法是根本不调整它的大小 - 我在窗口上裁剪了一个区域,所以看到的只是我想要显示的部分。

function loadProdComplete(e:Event):void{
        var gameMask : Shape = new Shape;
        gameMask.graphics.beginFill(0xffcc00);
        gameMask.graphics.drawRect(myLoader.x,myLoader.y,640,480);  
        gameMask.graphics.endFill();
        myLoader.content.mask = gameMask;
    }

因为无论如何我都需要面具来隐藏舞台外的杂乱,这一次解决了两个问题。

I won't accept this as the answer in case anyone has any alternative insights, but if anyone comes across this question, this is a posisble solution.

于 2012-07-07T12:48:05.537 回答