2011-05-11 98 views
4

我有一個應用程序嘗試加載外部SWF。所以,我們有:Flex:無法調整外部加載的SWF內容的大小

  • 我的應用程序:舞臺的尺寸是768x1280。 ScaleMode = EXACT_FIT。
  • 外部SWF:它的舞臺是800x600的另一個應用程序。 ScaleMode = EXACT_FIT。

問題是雖然我應用「scaleX,scaleY」,更改其寬度等,但外部SWF不會修改其大小。 我也嘗試將其插入Canvas容器(如「如何調整外部SWF以適應容器?」),但它沒有解決我的問題。 有趣的一段代碼是當外部SWF是由我的應用程序加載:

private function onLoadedApp(evt:Event):void{ 
    stage.scaleMode = StageScaleMode.EXACT_FIT;  
    trace("Loading Application..");   
    var loaderInfo:LoaderInfo = evt.target as LoaderInfo;  
    loaderInfo.removeEventListener(Event.COMPLETE, onLoadedApp); 
    trace(loaderInfo.loader.content);   
    var swfApplication:SpriteUIComponent = new SpriteUIComponent(evt.target.loader.content);   
    if(SWFContainer.width < swfApplication.explicitWidth){    
      var coef:Number = SWFContainer.width/swfApplication.explicitWidth; 
      swfApplication.scaleX = coef; 
      swfApplication.scaleY = swfApplication.scaleX;    
     }     
     SWFContainer.addElement(swfApplication); 
} 

我也試圖通過向的SWFLoader做到這一點,但我雖然加入了external.swf的內容沒有改變其原來的大小「scaleContent」參數。

視覺效果我:

外部SWF加載在合適的位置上,它「似乎」有320×240暗淡。但是它的寬度有點裁剪,因爲如果我拉伸Flash Player,則可以看到外部swf舞臺的其餘部分。此外,雖然我縮小/拉伸Flash Player,但外部SWF從未被調整大小。它總是保持不變(如果我追蹤它的尺寸,我總是會得到800x600,儘管我可以看到320x240) - 如果我增加主應用程序的舞臺寬度,這個小剪輯會消失。

討論:

我才知道,原來舞臺的外形尺寸是800,這比我的應用程序(768)的初始階段更大的,但我想,當我做大小調整,外部SWF的舞臺必須裝在容器中。它是合適的,但外部SWF的一部分是看不到的。這就像Flash Player記得外部SWF Stage的寬度大於我的應用程序的一個...

在此先感謝。

+0

顯示一些代碼。 – 2011-05-11 12:50:06

+0

我剛剛用一段代碼改變了描述。謝謝。 – Manel 2011-05-11 21:37:33

+0

嗨!你找到了解決問題的辦法嗎?我目前有完全相同的問題:) – 2012-04-29 11:55:12

回答

0

即使將scaleContent設置爲「true」,您仍然需要爲SWFLoader控件設置確切的高度和寬度,以便嘗試調整內部SWF的大小。所有scaleContent所做的都不是以常規或拉伸的大小顯示SWF,它還會根據需要擴大SWF,並且如果不是僅縮放它以保留原始SWF的比例。

+0

是的,但這不起作用: Manel 2011-05-11 12:01:09

+0

嘗試使用maxWidth和maxHeight。 – cbroughton 2011-05-11 12:10:34

+0

它沒有工作。不管怎麼說,還是要謝謝你。 – Manel 2011-05-11 21:39:16

0

我不認爲問題出在您的ScaleMode上。每個Flash播放器只能有一個Stage。添加到顯示列表後,「外部」SWF的「stage」屬性引用「應用」SWF的Stage。如果SWF已加載且未添加到顯示列表中,則加載的SWF的「stage」屬性將等於「null」。在您的外部SWF中設置舞臺scaleMode不會規定一旦加載到另一個SWF時它將如何縮放。

此外,您可能調整SWFContainer,而不是SWF本身...這就是爲什麼SWF寬度和高度屬性總是800x600。我不確定這是否是你所要求的,但根據我的理解,你可能需要創建一個階段調整事件監聽器。

+0

好的,但我怎樣才能訪問到直接調整外部SWF的大小?我已經使用了一個Canvas,一個SWFLoader ...關於resize事件。我認爲這個事件是由Flash Player在窗口改變大小的時候調度的,而且我有StageScaleMode.NO_SCALE,但我不知道如何去調整大小。我會試試這個方法。謝謝。 – Manel 2011-05-11 21:18:45