首先,调整大小将由 JavaScript/CSS 管理,而不是 ActionScript。也就是说,您需要在 ActionScript 中做一些事情来为这种行为做准备。
首先,您提到您不希望 SWF 中的所有内容都随网页缩放。为了应对这种默认行为,您需要更改scale mode
舞台将使用的:
stage.scaleMode = StageScaleMode.NO_SCALE;
我发现使可扩展网站更易于使用的另一件事是将 SWF 的左上角设置为 0,0。默认情况下,如果您放大 SWF,0,0 将保留在同一个位置,其中一些“填充”表示新大小。我的意思是,如果你将 SWF 放大 200 像素,而它最初是 400 像素,0,0 将从左侧下降 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);
}
}
}
这样,您可以简单地在 s 中列出您ViewComponent
的 s,ViewManager
并通过覆盖在其自己的类中适当地处理每个s handleResize()
。