在 iphone 上使用大型精灵表

Posted

技术标签:

【中文标题】在 iphone 上使用大型精灵表【英文标题】:working with large sprite sheets on iphone 【发布时间】:2011-02-26 05:32:51 【问题描述】:

我正在尝试在我的应用程序中使用精灵表动画。 第一个带有小精灵表的 POC 工作正常,但是当我将精灵表更改为更大的时,我收到“check_safe_call:无法恢复当前帧”警告并且应用程序退出。

快速搜索发现这个问题意味着我的应用占用了太多内存或图像尺寸太大。

我的图像是 4.9 Mb,尺寸是 6720 * 10080(哎呀!!)。我读到 iphone 允许最大 3 Mb 图像,尺寸最大为 1024 * 1024。此外,精灵表图像尺寸应该是 2 的幂。

所以请告诉我如何使用这么大的精灵表。

一种方法是将精灵表切割成许多较小的精灵表并一次使用一个。

如果您知道任何其他/更好的方法来容纳更大的精灵表,以及我的精灵表的问题是大小 (4.9 Mb) 还是尺寸 (6720 * 10080),请提出建议。

(仅供参考,我不想播放电影,所以使用 MP4 文件不是我的选择。我需要根据加速度计输入为精灵表设置动画,我已经能够在我的 POC 中实现这一点较小的精灵表。)

谢谢, 交换无

【问题讨论】:

【参考方案1】:

您应该按照您的描述将精灵表切割成多个纹理。 iPhone 的内存和图形芯片根本无法同时在内存中保存该大小的图像/纹理。通过拆分 sprite 表,它将在您使用它们时处理将适当的纹理加载/卸载到内存中。

您还可以考虑优化图像格式。使用 PVRTC 格式可以节省大量内存,但它仅适用于某些类型的图像。请参阅this Apple page 了解更多信息。

【讨论】:

【参考方案2】:

绝对将其保持在 2 的幂内。此外,将 spritesheet 中的精灵保存在 2 的幂的容器中(例如,您有一个 17x31 的精灵……将其放入 32x32 的容器中)。您的精灵表的问题在于 4.9mb 和尺寸。我会考虑使用 adobe 烟花或 pngcrusher 来大大降低你的精灵表的大小。

mike weller 关于拆分 sprite 表的权利是正确的(您根本不能最大 1024)。我认为最好的选择是将您对精灵表所做的事情重新组织成元素(尽管在不知道细节的情况下很难说)。只有移动的东西才应该有多个框架。通过调用精灵表上的位置并将它们扔到游戏中,将它们覆盖在背景上(来自同一个精灵表)。

【讨论】:

以上是关于在 iphone 上使用大型精灵表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 的 OpenGLES 中实现精灵表?

iPhone cocos2d - 对许多精灵使用相同的动画动作

在 iPhone 上加载 openGL 游戏的屏幕?

iphone如何自动化点击屏幕?

iPhone - 倾斜移动

使用iPhone应用程序中的过渡移动要触摸的对象