在Event.COMPLETE不起作用后调整Flash加载程序的大小

时间:2012-07-07 00:20:54

标签: android flash loader flash-builder

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

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

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;
    }

根据我在网上找到的每篇帖子,这个解决方案应该有用。当事件触发时,Loader完成,并且可以调整大小。但事实并非如此。注释掉修改.height和.width的行会导致SWF出现,取消注释并再次运行,SWF永远不会加载。

其他任何事情都可能干扰吗?这是使用FlashBuilder构建一个Actionscript3 - > Android项目。

编辑 - 此处的解决方案似乎不起作用:Problem resizing loader after loading 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事件。这实际上有助于显示它(尽管宽度尚未调整,我认为这是一个单独的问题) - 我无法相信这是让它工作的唯一方法......

1 个答案:

答案 0 :(得分: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;
    }

由于无论如何我都需要使用面罩来隐藏场外杂乱,这样就可以解决两个问题。

如果有人有任何其他见解,我不会接受这个答案,但如果有人遇到这个问题,这是一个可靠的解决方案。