按比例缩小以适应分辨率,但不适用于Flash CS4

时间:2009-09-17 10:17:49

标签: flash resize resolution

我的女朋友是一名平面设计师,目前正在网站上工作。她不懂任何HTML或CSS,只熟悉Flash,因此她在Flash中构建整个网站。应该注意的是,我是开发人员,并且对HTML,CSS或Flash也有近乎0的经验。

工作进展顺利,但在我帮助她部署网站后(通过File-> Publish),我们遇到了一些问题。她以1000x750像素制作了.swf电影。在我的24英寸显示器上查看生成的网站,在1920x1200,事情看起来真的像素化(电影使用图像,而不是矢量图形)。没问题!我想我们应该只是禁用Flash的发布选项中的缩放,我们会很好。

但是,禁用缩放显然引入了一个新问题,即现在无法在运行低(< = 1024x768)分辨率的计算机上正确查看电影。

我想我们正在寻找的行为只是缩放向下电影以适应查看计算机的分辨率/浏览器窗口,但不能按比例放大。 Flash(CS4)似乎并未在其发布选项中包含此选项。是否有任何简单的方法来启用此类行为?

1 个答案:

答案 0 :(得分:1)

您所描述的内容没有内置选项,但无论是在Flash中还是在JavaScript端,都可以通过脚本轻松实现。我会在答案的最后添加一段代码片段,以便让你开始运行。

然而,首先,让我建议你应该做些什么。想想当用户出现时会发生什么(无论显示器大小如何)没有浏览器全屏。如果按照您的描述实施,他们会看到您的网站处于任意小的尺寸,具体取决于浏览器的大小,并且可能会看到一些小到难以辨认和/或无法使用的东西。

现在可以肯定的是,你可以通过进一步实现Flash停止扩展的最小尺寸来解决这个问题,但是你开始对用户希望如何看到你的网站进行大量的猜测。相反,你应该问一下,用一个小显示器(或一个小浏览器窗口)期望该网站的用户会怎么做?答案就是,显示网站的全尺寸并添加滚动条。而对于我的钱,那就是你的网站应该做的事情。

因此,在您的HTML(或Flash的HTML导出设置)中,将SWF嵌入到1000x750容器中。这将使SWF不会对任何人进行扩展 - 在您的监视器上,您将看到窗口内的未缩放的站点居中(或左上对齐或其他),在较小的监视器上,您将看到整个站点未缩放,浏览器滚动条

在一天结束时,您必须意识到即使Flash内容本身就会扩展,但大多数网站都是由文本和图片组成,而不是。即使您可以在运行时缩小,但通常不是用户期望的,并且通常不会使网站看起来很好。


现在正如所承诺的,这里有一段Flash AS3代码,它应该为你提供足够的开端,通过缩放来做任何你喜欢的事情。如果您已将Flash发布到占据整个浏览器窗口的容器中,并将scalemode设置为“无比例”,则应该可以获得所需的效果。

// perform initial size check
checkStageSize();

// register to re-check when stage size changes
stage.addEventListener( Event.RESIZE, onResize, false, 0, true );
function onResize( e:Event ) {
    checkStageSize();
}

// do the scaling here
function checkStageSize():void {
    var wid:Number = stage.stageWidth;
    var hi:Number = stage.stageHeight;
    var needToScaleDown:Boolean = (wid < 550); // or some other test
    if ( needToScaleDown ) {
        var scale:Number = wid/550;
        someContent.scaleX = someContent.scaleY = scale;
    } else {
        someContent.scaleX = someContent.scaleY = 1;
    }
}

这假设“someContent”指的是容纳你想要缩放的所有东西的容器,其注册点位于舞台的原点(左上角)。没有简单的方法来自动缩放整部电影,因此您需要将内容放在容器影片剪辑中并进行缩放。

随意将上面的片段放在舞台上的帧动作中,更改“someContent”以引用可以缩放的容器,然后使用它。但我真的认为你最终会决定只展示网站未展开的版本。