2012-07-07 56 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; 
    } 

因爲面膜會一直必要反正我隱瞞臺下混亂,這解決了兩個問題一次。

如果有人有任何其他的見解,我不會接受這個答案,但如果有人遇到這個問題,這是一個可取的解決方案。

相關問題