动态调整actionscript阶段的大小?

时间:2012-09-12 04:20:24

标签: actionscript web

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

没有固定的宽高比,但具有最小尺寸(例如640x480)和最大尺寸(1600x1000)。当客户的Web窗口长度小于最小尺寸时,该维度中会出现一个滚动条,因此用户可以使用滚动条查看整个阶段。当客户的Web窗口大小超过最大大小时,将出现Flash应用程序在顶部中心。它需要在大多数Web浏览器上工作,包括IE 6。

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

1 个答案:

答案 0 :(得分: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);
        }
    }

}

通过这种方式,您只需在ViewComponent中列出ViewManager,然后通过覆盖handleResize()来适当处理每个{{1}}。