iPhone的不同屏幕尺寸在闪光? (获得黑酒吧)

我对编程的整个世界都很陌生,而actionscript 3是我第一次真正的体验,所以如果我不能马上理解你的答案的话。

我已经在AIR for iOS中构build了一个使用Adobe Flash CC的iPhone应用程序。 所有的代码是在时间轴上或单独的.as文件(所以不使用文档类)。

游戏的核心概念是随机生成的物体从屏幕的顶部落下,用户不得不点击它们以使它们在触摸底部之前消失。

我的问题是我的文档大小是640 x 960 。 我认为这适合iPhone 4(还没有testing过),但是当我在我的iPhone 5s上testing时,我会在顶部和底部找回条形码。 显然他们有不同的屏幕尺寸,但我希望应用程序能够运行在许多不同大小的iPhone上。

我花了数小时search这个,仍然不明白我的意思是做什么。 我试着玩stage.scaleMode设置,但没有改变。 我还在包含的文件中添加了一个名为default-568h@2x.png的文件(只是一个尺寸为640 x 1136的绿色矩形),但是也没有显示。

所以基本上我想知道如何更改我的应用程序和AS3代码,以允许我的应用程序适合所有不同大小的iPhone?

任何帮助将非常感激。

启动图像

首先,在其他任何事情之前,您需要确保您的项目中包含正确的启动图像。

以下是来自Adobe网站的表格:

  • 默认〜iphone.png | iPhone 4(非视网膜)640 x 960 Potrait
  • Default@2x~iphone.png | iPhone 4,4s 640 x 960 Potrait
  • Default-568h@2x~iphone.png | iPhone 5,5c ,5s 640 x 1136 Potrait
  • Default-375w-667h@2x~iphone.png | iPhone 6 750 x 1334 Potrait
  • 默认-414w-736h@3x~iphone.png | iPhone 6+ 1242 x 2208 Potrait
  • Default-Landscape-414w-736h@3x~iphone.png | iPhone 6+ 2208 x 1242 景观

一旦你有了这些图像(并完全按照图示命名),通过执​​行以下操作将它们包含在项目中(它们必须位于应用程序的根目录中):

在FlashPro中

  • 转到您的发布设置
  • 请转到AIR for iOS设置。
  • 转到“常规”选项卡
  • 将所有这些图像添加到“包含的文件”列表(根) 在这里输入图像说明

缩放您的内容

  • 选项1,填充和作物

如果您不介意修剪您的内容,则可以在应用程序启动时执行此操作:

 stage.scaleMode = StageScaleMode.NO_BORDER 

这将缩放您的瑞士法郎,使其填充整个屏幕,同时保持纵横比。 弄清楚需要多less填充才能使这种方法适用于各种iPhone的纵横比的细微变化,这是相当容易的。

但是,如果要允许方向更改(纵向到横向),裁剪可能会太严重。

  • scheme2 – 响应式devise

尽pipe适应不同屏幕分辨率和长宽比的最佳方式是让您的应用程序响应。 这涉及到您的应用程序开始时的以下代码:

 stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; 

现在你的舞台边界( stage.stageWidthstage.stageHeight )将是设备的全部宽度和高度。 (有些设备在底部或顶部带仍然有一个软件工具栏)

然后你可以通过代码来定位事物。

如果你想要一个简单的方法来转换你所拥有的东西(你不想使用代码来resize和绝对alignment所有东西),只需要将所有的内容放在容器实例名称为MovieClip的container ,然后就可以调整它的大小和位置喜欢这个:

 //scale the container as big as possible while still fitting entirely in the screen: //figure out which dimension should match the stage (widht or height) if(container.width - stage.stageWidth >= container.height - stage.stageHeight){ container.width = stage.stageWidth; container.scaleY = container.scaleX; }else { container.height = stage.stageHeight container.scaleX = container.scaleY; } //center it on the screen: container.x = (stage.stageWidth - container.width) * 0.5; container.y = (stage.stageHeight - container.height) * 0.5; 

如果屏幕大小发生变化(例如,在桌面上最大化/恢复,或者在纵向上从纵向到横向),监听resize事件也是一个好主意。

您通过在舞台上聆听重新resize事件来实现这一点:

 stage.addEventListener(Event.RESIZE, redrawScreen); function redrawScreen(e:Event):void { //resize everything as the window size has changed. } 

编码人员负责为不同的屏幕尺寸提供不同的解决scheme。 您检查设备的大小,然后相应地呈现内容。 总而言之,与基于旋转显示不同的内容没有什么不同。 如果你希望有一个神奇的解决scheme能够在AIR中为你做所有的事情,那么你倒霉了,因为没有。

不build议使用舞台缩放模式(因为您在手机上应该始终不使用缩放比例),那么您完全可以放弃根据真实的物理设备大小比较显示对象的位置的能力(基本上,您将无法确定无论你在屏幕上显示还是完全不在屏幕上)。

如果您认为开发手机很简单(不仅仅是使用AIR,而是使用任何技术),那么对不起,尤其是因为您必须处理所有这些尺寸。

如何处理的基本原则是:

  1. 得到真正的设备大小。
  2. 计算真实的密度/比率。
  3. 比较这个大小与你的应用程序的大小。 (再次缩放模式到没有比例)
  4. 提取一般比率(您的应用程序的大小与设备的大小相比)
  5. 使用这个比例来缩放和放置你的主容器(一个包含你的整个应用程序的容器),很难:缩放和放置你的应用程序中的所有DisplayObject。
  6. 由于应用程序比率保持填补空白空间。
  7. 您的应用正在正确填写任何设备上的整个屏幕。