在闪光灯中改变舞台尺寸但保持纵横比?

时间:2014-11-25 01:01:36

标签: android ios actionscript-3 flash

我正在adobe flash cs6中创建一个iOs APP,一切正常。

然而,我现在的问题是应用程序的内容会在像iPhone 5这样的大型iPhone中被拉伸!

我在第一层的第一帧的AS3代码中使用以下代码:

import flash.display.Sprite;
import flash.display.Screen;
import flash.geom.Rectangle;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.system.Capabilities;
import flash.display.MovieClip;
import flash.display.*;
import flash.events.*;
import flash.geom.*;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.scaleMode = StageScaleMode.NO_BORDER;
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.EXACT_FIT;

我正在使用上面的代码,所以整个APP都适合每个屏幕,它工作正常,但一切(APP的内容)都被拉伸了!

我可以做些什么来保持内容的宽高比,同时将APP安装到每个屏幕上,如上面的代码?

提前致谢

编辑:

我删除了stage.scaleMode = StageScaleMode.EXACT_FIT;,当我在iphone中查看APP时,它没有被拉伸但是一切都略微偏向右边导致隐藏APP右侧的一小部分屏幕!

2 个答案:

答案 0 :(得分:0)

尽管丹尼尔是对的,但仍需要更详细的答案。

事实是,这比你想象的要复杂一些。 Flash无法知道如何定位元素 - 有时您希望按钮伸展,但不是那么多。或者为了保持它的宽高比,但随后会有一些内容失效。

通常如何做?此字段中的最佳实践是具有固定的阶段视口(初始阶段大小)。通常这固定为320x480。然后,你让你的应用程序拉伸这个(如果你运行一个更大的屏幕,你的320像素将被大幅度缩放,因此像素化)。

这是棘手的部分 - 取决于设备分辨率和dpi,您提供特定资产。假设您在两次“初始固定视口”的设备上运行您的应用。然后一切都会放大两倍(640x960两倍320x480)。一切都以像素为单位。

但是在这里你提供的图形也是两次一样大 - 640x960。这意味着如果您在基本阶段运行它们,它们将缩小 - 变为320x480。但是如果你在更大的屏幕上运行它们,舞台会放大(如前所述),现在图形变得它们的实际尺寸

想象一下,每部手机都有相同的显示尺寸(比方说4英寸)。但每个人都有不同的分辨率 - 320x840,640x960,720x1280等。因此,如果您希望您的应用看起来完全相同,拥有100%宽的按钮 - 然后为其提供100%分辨率的图形!因此,每个显示器的图形应该有不同的尺寸 - 320px,640px等。

当然,您无法匹配所有设备。所以这里是'aspect ration' - 一个数字,表示屏幕更大。如果您的基数是320x480,并且您运行的是640x960,那么您的宽高比将为2.因此您可以从文件夹'assetsx2'获取资源(或者您调用它的任何内容,只要您有一些系统可以读取它)。如果你在不同的显示器上运行并且比例得到例如2.8,你可以将它舍入到3.这样,图像会得到一点缩放,缩放3到2.8比缩放3比1更好,对?你缩放的越多,它就越模糊。

我很抱歉答案很长,但我试着解释它不是很技术性的。关于这一点有很多文章。我开始时,这两个资源对我帮助最大:

http://sebastien-gabriel.com/designers-guide-to-dpi/home - 信息发生了什么 http://screensiz.es/phone - 有关不同设备,其大小,分辨率,宽高比以及有关如何命名文件夹的信息的信息(有约定)。

希望有所帮助! :)

P.S。 忘了添加这是关于图形的全部,记住你可能构建一个UI,所以你使用图形。尽管如此,无论你使用什么样的图形,整个想法都有效 - 你只需要使用固定大小的舞台,根据它定位所有图形,然后考虑比例因子。因此,对于640px宽屏幕上的100%宽按钮,而不是使其宽度为620px,每边有10px的边距,而不是每边都有310px,边距为5px。

答案 1 :(得分:-1)

没有

没有办法神奇地处理这个问题。你必须告诉它如何安排内容。