2012-07-07 33 views
1

Google暗示以下问题并不罕见:使用Loader将某些内容加载到Flash阶段中,我想调整它的大小。但是,如果您在加载内容之前执行此操作,调整图像大小会使其消失。在Event.COMPLETE后调整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; 
    } 

根据每个帖子我能找到到目前为止网上,这个解决方案应该工作。事件触发时,加载器完成并可调整大小。但是,它没有。注释修改.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事件。这实际上有助于显示它(虽然宽度尚未调整,我认为这是一个单独的问题) - 我不能相信这是让它工作的唯一方法...

+0

这可能不是问题,但我注意到在调用'myLoader.load()'之后添加了监听器...如果SWF是本地文件(似乎是),那么可能在加载之前完成加载听众被添加:)傻了,可能不是问题... – 2012-07-07 02:17:00

+0

感谢您的洞察力!在这种情况下,我认为这不是问题,因为COMPLETE肯定会触发该功能。如果有的话,它太早发射!不过谢谢。 – mtrc 2012-07-07 12:00:24

回答

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

因为面膜会一直必要反正我隐瞒台下混乱,这解决了两个问题一次。

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

相关问题