1

我想建立一个基于 actionscript3 的项目。它需要重新调整其舞台区域的大小以适应客户的网络浏览器的查看大小,或者在客户更改网络浏览器的大小时适应它。

没有固定的纵横比,但有最小(例如 640x480)尺寸和最大尺寸(1600x1000)。当客户的网页窗口长度小于最小尺寸时,该尺寸会出现一个滚动条,因此用户可以使用滚动条看到整个舞台。当客户的网页窗口尺寸大于最大尺寸时,会出现flash应用程序在顶部中心。它需要在大多数网络浏览器上工作,包括 IE 6。

当舞台尺寸改变时,舞台上的内容不会缩放。在我的情况下,该项目有几十个视图,每个视图都需要处理尺寸变化并重新排列它们的元素,我认为这将是一项巨大的工作,所以需要任何建议来构建这样的项目。

4

1 回答 1

2

首先,调整大小将由 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()

于 2012-09-12T04:50:35.960 回答