2012-09-12 39 views
1

我想建立一個基於actionscript3的項目,它需要重新調整其舞臺區域的大小以適合客戶的網頁瀏覽器的查看大小,或者在客戶更改網頁瀏覽器的大小時適合它。動態調整動作的階段?

沒有固定長寬比,但具有最小(例如640x480)大小和最大大小(1600x1000)。當客戶的網頁窗口的長度小於最小尺寸時,滾動條會出現在該尺寸中,因此用戶可以使用滾動條查看整個頁面。當客戶的網頁窗口的尺寸大於最大尺寸時,Flash應用程序將出現並且它需要在包括IE 6在內的大多數網頁瀏覽器上工作。

當舞臺大小發生變化時,舞臺上的內容不會縮放。在我的情況中,項目有幾十種觀點,每種觀點都需要處理尺寸變化並重新排列元素,我認爲這將是一項巨大的工作,所以需要任何建議來構建這樣的項目。

回答

2

首先,調整大小將由JavaScript/CSS管理,而不是ActionScript。也就是說,在ActionScript中需要做一些事情來爲這種行爲做準備。

首先,您提到您不希望SWF中的所有內容都隨網頁一起縮放。爲了應對這種默認行爲,您需要更改scale mode,該階段將使用:

stage.scaleMode = StageScaleMode.NO_SCALE; 

另一件事,我發現使得可擴展的網站更容易使用是工作到SWF的左上角設置爲0 ,0。默認情況下,如果您擴大SWF,則0,0將保留在相同的位置,並使用代表新尺寸的「填充」。我的意思是,如果將SWF向上放大200像素,並且最初橫跨400像素,則0,0將從左側向SWF下降100像素,而不是表示左上角。這裏是你可以做糾正什麼:

stage.align = StageAlign.TOP_LEFT; 

這兩件事情會幫助你嵌入的SWF的行爲以更期望的方式,這將有可能幫助您在整個項目。

最後,你提到你在屏幕上有很多可視對象,需要對正在調整大小的舞臺/瀏覽器窗口做出反應。這很容易處理使用Event.RESIZE。您可以將偵聽器附加到stage以處理此事件,並將信息傳遞給反映這些更改的每個可查看對象。

您可以創建一個具有handleResize()方法,這將是您的視圖對象的基類的類:

class ViewComponent extends Sprite 
{ 

    public function handleResize(width:int, height:int):void 
    { 
     trace(width, height); 
    } 

} 

這些對象中的每一個都可以管理整個另外一個類中列出,類似這樣的:

class ViewManager extends Sprite 
{ 

    public var viewComponents:Vector.<ViewComponent>; 


    public function ViewManager(stage:Stage) 
    { 
     viewComponents = new Vector.<ViewComponent>(); 
     stage.addEventListener(Event.RESIZE, _manageResize); 
    } 


    private function _manageResize(e:Event):void 
    { 
     for each(var i:ViewComponent in viewComponents) 
     { 
      i.handleResize(e.target.stageWidth, e.target.stageHeight); 
     } 
    } 

} 

這種方式可以簡單地ViewManager內列出你ViewComponent s,不重寫handleResize()應對它自己的類中的每個恰如其分。

+0

感謝您的工作,並且您能告訴更多關於如何調整網頁舞臺大小的信息嗎? – Max

+0

@Max使用CSS將嵌入式Flash對象的寬度和高度設置爲100%。 – Marty

+0

我的要求比較複雜,我說有一個最小尺寸和最大尺寸,不是簡單的100% – Max