【问题标题】:Is it the "weight" or height and width that matters重要的是“重量”还是高度和宽度
【发布时间】:2014-12-08 19:59:27
【问题描述】:

我正在为 iOS 平台开发一款包含大量图形的游戏。没有一个图形是动态的,它们都是现成的图像。屏幕上有 6 层,每层平均包含 3-4 个不断向左滚动的图形对象,每个对象的速度不同。因此,每次屏幕刷新时,都会滚动大约 20-25 个对象,从屏幕中删除并从右侧再次添加。该游戏是通用的,因此资源文件夹中存在各种尺寸的图像。在 iPad、iPhone 5、iPhone 5s 上运行流畅。但是在第 4 代 iPod touch 上,我注意到了一些问题。 当我使用 Instruments 测试应用程序时,我注意到在启动时出现批评内存问题,然后问题就消失了。所以这都是因为我在应用程序启动时加载了所有上述图形。所有图像都组合成 4 个不同的精灵表。所以这是我的问题: 重要的是重量(以千字节为单位)还是尺寸?我问这个是因为我将图像的大小减少了大约 70-80%,尽管它们的高度和宽度保持不变,但内存问题仍然存在。

【问题讨论】:

    标签: ios memory image-size


    【解决方案1】:

    如果您通过使用压缩来减小图像的大小,那么预计会有延迟和内存命中,因为图像在首次加载时未压缩,并且它们将占用与压缩前一样多的内存。

    第 4 代 iPod Touch 可能存在一些内存压力,它会尝试在其他地方释放内存,以便让您的图像加载并留在内存中。这可能是您看到的问题,因为其他应用程序(如 Mobile Safari 或 Mail)被要求放弃一些内存或终止。

    (图片在资源文件夹中的大小无关紧要。重要的是它们在未压缩和内存中的大小)。

    您可以通过将图像设置为 4 位而不是 8 位颜色来缩小图像,或者将它们设置为单色。您还可以使用非视网膜尺寸或更小的尺寸,然后让操作系统将它们拉伸以适应所需的空间。我会先尝试使用最好的图像,如果您收到内存警告 (didReceiveMemoryWarning),然后重新加载密度较低的图像。

    【讨论】:

      【解决方案2】:

      你不能在游戏开始前加载所有图片,你应该使用缓存来控制内存的大小。并且在游戏场景改变之前,释放缓存,重新加载需要的缓存。 所以你必须在每一个游戏场景中控制你的资源依赖。 这是管理大型资源应用程序的常用方法。

      【讨论】:

      • 但是如果我在启动时需要所有这些怎么办?
      • 如果你需要它们 - 你必须在加载时运行一些有趣的动画。
      • 好的,我可以这样做,但是评论家内存警告呢?我的意思是从用户的角度来看,这没关系,但在后台仍然会有内存开销。
      • 可能是使用opgl api在帧缓冲区中渲染,在这个缓冲区使用部分渲染技术,当你使用目标图像时,加载它并渲染,如果没有,释放它们
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2015-08-01
      • 2017-11-26
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多