【问题标题】:AIR for iOS and displaying correct DPI imagesAIR for iOS 并显示正确的 DPI 图像
【发布时间】:2013-09-21 12:03:28
【问题描述】:

您如何处理在 Adob​​e AIR 基础 iOS 应用程序中交换正确的 dpi 位图?你有每个图像的两个版本吗?您是在检测到设备分辨率后在运行时加载它们,还是只是将它们都嵌入并随时选择适当的分辨率图像?还是只是缩小 HiDPI 图像?

【问题讨论】:

    标签: ios air bitmap dpi


    【解决方案1】:

    我个人避免为移动设备缩放图像,尤其是在 AIR 中。嵌入图像也会使您的内存使用量和 swf 大小膨胀,鉴于资源有限,这并不理想。我将资产文件夹结构分为 160、240、320,并在加载资产之前在运行时查询应用程序 DPI。

    创建一个包含这样的静态方法的简单类可能很有用。

     public static getAssetPath(name:String, ext:String):String {
        switch(DPI) {
            case 320:
                 return "assets/320/" + name + ext;
            case 240:
                 return "assets/240/" + name + ext;
            case 160:
                 return "assets/160/" + name + ext;
            default:
                 throw new Error("Unknown device DPI");
        }
    }
    

    希望对您有所帮助。

    【讨论】:

    • 当您在应用程序启动后从文件系统显式加载资产时,我喜欢这种方法。您是否曾经以其他方式加载包含您的资产的整个 SWF?
    • 我必须承认我并没有真正考虑过这种方法。你会说这种方法的优点/缺点是什么?我的应用程序目前不需要大量资产,并且图像的加载等已内置到我的对象的生命周期中,因此在加载之前显示不是问题。我想它会增加应用程序的响应能力,但可能会增加内存使用量和可执行文件大小?
    • 我刚刚开始,所以我还没有进行广泛的测试。当然,一大优势是利用 Flash 的视觉布局潜力,而不是依赖坐标等。我认为这真的取决于你正在做的应用程序的类型。如果它是一个游戏,或者有很多动态部分的东西,那么你的方法是最有意义的。不过,就我正在做的事情而言,在运行时加载 2 个 SWF 似乎是我要走的路。
    【解决方案2】:

    根据您的图像(带或不带文本),我喜欢使用矢量并在运行时创建缩放位图,当它们没有文本时。但是在将矢量绘制到 Bitmap 时,使用过滤器可能会成为问题。

    对于带有文本的图像,我在我的资产中使用预渲染图像并在运行时相应地加载它们。这是一篇很棒的文章,解释了最佳实践
    Adobe- Multible screen sizes in AIR

    【讨论】:

    • 这适用于矢量 - 听起来是一个很好的解决方案。但我的问题是关于 BitmapImages 的……你如何处理这些?
    • 矢量在移动设备上的渲染速度相当慢。我知道在春季的一个项目中,我实际上不得不用位图替换我的许多矢量,因为它增加了每一帧的渲染时间。
    • @JoshJanusch 我只在第一次应用程序启动时从向量中创建一次缩放位图,然后重用这些位图。正如你所说,不断地绘制它们会降低性能。
    • @TomAuger:在我回答的第二部分中,我的意思是 BitmapImages,应该更清楚,因为我说的“图像”可以意味着任何东西。根据图像的数量,我要么只是缩小 HiRes png,要么在应用程序首次启动时加载具有正确尺寸的 swf。就像我说的,看看我添加的链接,它有一些很好的例子。不包括加载 swf :(
    猜你喜欢
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多