【问题标题】:What kind of images should go into a spritesheet for a cocos2d ios app?cocos2d ios应用程序的spritesheet应该放入什么样的图像?
【发布时间】:2012-12-28 03:03:54
【问题描述】:

我为这个冗长的问题预先道歉,有多个子问题,但问题确实如标题中所述。接下来是对问题不同方面的详细分解。

在我使用 cocos2d 构建的通用 ios 游戏中,我有四类图像 - 我想确定哪些应该进入 spritesheets,哪些最好作为单独的图像加载。我目前的猜测是,只有在整个游戏中运行的角色动画才能提供作为 spritesheets 加载到内存中的值:

  1. 在整个游戏过程中运行的角色动画(除了 当用户在菜单中时):对于这些,我假设有图像 在 spritesheet 中将减少运行时内存使用(由于 将单个文件填充到两个字节边界的幂),因此 他们是 spritesheet 的候选者。那是对的吗?
  2. 小图(约200张),其中0到4张任意显示 时间,随机选择,在游戏过程中。对于这些,我不确定 是否值得将所有 200 张图像加载到内存中 一次使用大多数任何 4 个。所以最好直接 将它们作为图像访问。那是对的吗?
  3. 一些(大约 20 个)小的菜单元素,例如仅在静态菜单中使用的按钮:由于菜单项仅在菜单显示期间使用,我认为它们在通过精灵表改善内存访问方面没有太大价值。那是对的吗?
  4. 几张大图用作菜单、游戏场景等的背景。这些图片大多与屏幕分辨率一样大。由于屏幕分辨率大致等于单个图像的最大尺寸(例如,对于 ipad Retina,图像尺寸为 4096 x 4096 与屏幕尺寸为 2048 x 1536),使用 spritesheets 最多没有太多增益 1或 2 个大图像将适合一个精灵表。此外,由于这些大文件中的每一个都只在一个场景中使用,因此将所有这些大图像作为 spritesheets 预先加载到内存中似乎是一种不必要的开销。因此,直接将它们作为 spritesheets 访问。对吗?

几个常见的相关问题:

a) 将跨不同场景使用的图像打包到同一个 spritesheet 中,即使在该场景中仅使用图像的一个子集时,我们也可以将它们加载到内存中。我认为这是一个坏主意。对吗?

b) 只能在较旧的设备(iPad 1 和 iPhone 3gs)上玩游戏时出现口吃。 spritesheets 会帮助减少这种卡顿吗?

c) 我假设 spritesheets 只会有利于运行时内存占用,而不是应用存档的磁盘大小。例如,我注意到一组大小为 11.8 MB 的文件在放入 spritesheet 时为 11 Mb - 压缩优势不大。这是一个有效的假设吗?

请让我知道您对上述理由的看法。

谢谢

阿南德

【问题讨论】:

    标签: ios cocos2d-iphone sprite-sheet


    【解决方案1】:

    经验法则:一切都在 spritesheet(纹理图集)中,除非有充分的理由不这样做。

    1. 绝对纹理图集。

    2. Cocos2d 的缓存机制会导致所有单独的图像被缓存并保留在内存中,因此最终它们会比在纹理图集中使用更多。如果很少需要它们,我只会使用单个图像(即菜单图标),并且在将它们添加到场景后,我也会将它们从 CCTextureCache 中删除,以确保在离开该菜单屏幕时将它们从内存中删除.

    3. 假设可能是错误的。 320x480 图像使用 512x512 作为内存中的纹理。如果您有多个,最好将它们全部放在一个纹理图集中。除非你在 cocos2d 中启用了 NPOT 支持。同样,不要忘记 CCTextureCache 正在缓存纹理。

    4. 请记住,大型纹理从 spritebatching 中受益匪浅。因此,即使纹理图集中可能只有 2-3 张图像,它也会对性能产生影响。

    a) 这真的取决于。如果您的应用程序内存不足,您可能需要单独的纹理图集。否则不将图像打包到单个纹理图集中(如果可能的话)将是一种浪费。

    b) 这取决于导致口吃的原因。最常见的问题:在游戏过程中加载资源(即图像),或者每帧创建和删除许多节点而不是重用现有节点。

    c) 可能。它可能取决于纹理图集工具(我推荐 TexturePacker)。这绝对取决于文件格式。如果您可以将多个 PNG 打包到一个 .pvr.ccz 纹理图集中,您将节省大量内存(并提高加载速度)。

    更多信息请参考我的cocos2d memory optimization blog post

    【讨论】:

    • 谢谢,这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2018-01-06
    • 1970-01-01
    • 2011-05-18
    • 2013-07-08
    相关资源
    最近更新 更多