首先,調整大小將由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()
應對它自己的類中的每個恰如其分。
感謝您的工作,並且您能告訴更多關於如何調整網頁舞臺大小的信息嗎? – Max
@Max使用CSS將嵌入式Flash對象的寬度和高度設置爲100%。 – Marty
我的要求比較複雜,我說有一個最小尺寸和最大尺寸,不是簡單的100% – Max