AS3 air多种分辨率,资产和布局iphone和ipad app

时间:2013-03-06 20:36:44

标签: actionscript-3 air

我正在AS3 / Air中构建应用程序,我想同时针对iPhone和iPad分辨率。我理解iPhone和iPad之间的不同宽高比,但我目前正在构建的应用程序具有不同的布局和略有不同的内容,以适应不同的屏幕尺寸。我目前已经构建了2个应用程序版本,一个用于iPhone,另一个用于iPad。所有资产都是在考虑目标平台的情况下创建的,但现在,我想将这2个应用程序合并为一个。

我想我会将每个屏幕文件重命名为iphone_login,ipad_menu,ipad_settings等,并将它们全部包含在同一个版本中。然后在启动期间,检查用户所在的设备并设置iphone_或ipad_,并同时设置分辨率。

我不希望黑色边缘从iphone分辨率变为ipad,所以我的问题是:

  1. 考虑到我想要的结果,我的方法是否合适?
  2. 如何确定用户所使用的设备以显示正确的文件,资源和分辨率?
  3. 据我所知,通过添加2组资源和2组代码文件,应用程序大小将增加至少两倍,但考虑到设计布局和内容的差异,除了保留2个应用程序外,我没有看到其他解决方案。

    谢谢:)

2 个答案:

答案 0 :(得分:0)

有什么问题? iPad和iPhone有不同的分辨率和dpi组合,检查它们并识别当前平台。 按类别获取您需要的视图:

public static const PAGE1:String = "page1";
public static const PAGE2:String = "page2";

private static var PHONE_VIEW_NAME_2_CLASS:Dictionary = new Dictionary();
private static var TABLET_VIEW_NAME_2_CLASS:Dictionary = new Dictionary();

public class ViewProvider 
{
    {
        PHONE_VIEW_NAME_2_CLASS[ViewProvider.PAGE1] = Page1PhoneView;
        PHONE_VIEW_NAME_2_CLASS[ViewProvider.PAGE2] = Page2PhoneView;

        TABLET_VIEW_NAME_2_CLASS[ViewProvider.PAGE1] = Page1TabletView;
        TABLET_VIEW_NAME_2_CLASS[ViewProvider.PAGE2] = Page2TabletView;
    }
    public function ViewProvider()
    {
    }

    public static function isTablet():Boolean {
    ...analyze Capabilities.screenResolutionY, Capabilities.screenResolutionX and Capabilities.screenDPI
    }

    public static function getViewClass(name:String):Class
    {
        return isTablet() ? TABLET_VIEW_NAME_2_CLASS[name] : PHONE_VIEW_NAME_2_CLASS[name];
    }

}

在你的程序中

navigator.pushView(ViewProvider.getViewClass(ViewProvider.PAGE1))

所有协调,填充和其他位置编号,字体大小等正确的乘数取决于运行时dpi通过类似的方式......

答案 1 :(得分:0)

我正处于类似问题的中间。

我的解决方案是让文件池中的图像处于最佳分辨率,然后根据设备启动时的设备缩小它们。您也可以使用非动画矢量资源执行此操作,并将它们放入bitmapData对象。

另一种选择是始终使资产池中包含内存中所需的最大分辨率的文件,并在需要时在运行时缩小它们。如果您将在不同位置使用不同大小的资产(例如图标),则此方法很有效。

对于代码,您应该找到一种方法来分隔管理数据的代码,管理逻辑的代码以及“绘制”UI的代码。这样,您将能够重用两个版本中的大多数代码,但只能更改“绘制”UI的代码。检查MVC模式以获取更多信息。