cocos2d ios应用程序的精灵表中应该包含哪些图像?

cocos2d ios应用程序的精灵表中应该包含哪些图像?,ios,cocos2d-iphone,sprite-sheet,Ios,Cocos2d Iphone,Sprite Sheet,我很抱歉,前面的问题很长,有多个子问题,但问题确实如标题所述。接下来是对问题不同方面的详细分析 在我使用cocos2d构建的通用ios游戏中,我有四类图像——我想确定哪些图像应该放在精灵表中,哪些图像最好作为单独的图像加载。我目前的猜测是,只有在整个游戏中运行的角色动画才能提供作为精灵表加载到内存中的值: 在整个游戏中运行的角色动画,除了 当用户在菜单中时:对于这些,我假设 在spritesheet中,由于 将单个文件填充到两字节边界的幂次方,因此 他们是精神病院的候选人。对吗? 其中约200个

我很抱歉,前面的问题很长,有多个子问题,但问题确实如标题所述。接下来是对问题不同方面的详细分析

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

在整个游戏中运行的角色动画,除了 当用户在菜单中时:对于这些,我假设 在spritesheet中,由于 将单个文件填充到两字节边界的幂次方,因此 他们是精神病院的候选人。对吗? 其中约200个小图像,其中0到4个在任意位置显示 在游戏过程中随机选择的时间。对于这些,我不确定 如果值得将所有200个图像加载到内存中,而仅在 大多数情况下,一次使用4个。因此,最好直接 以图像的形式访问它们。对吗? 大约20个小菜单元素,比如按钮,只在静态菜单中使用:因为菜单项只在菜单显示期间使用,所以我认为它们在通过SpriteSheet改善内存访问方面没有多大价值。对吗? 一些大图像用作菜单、游戏场景等的背景。这些图像中的大多数与屏幕分辨率一样大。由于屏幕分辨率大致等于单个图像的最大大小(例如,对于ipad retina,4096 x 4096图像大小与2048 x 1536屏幕大小相比),因此使用spritesheet并没有多大好处,因为一张spritesheet最多可以容纳1或2张大图像。此外,由于这些大文件中的每一个都只在一个场景中使用,因此将所有这些大图像作为精灵表预先加载到内存中似乎是不必要的开销。因此,直接将其作为精灵表访问。对吗? 几个常见的相关问题:

将不同场景中使用的图像打包到同一张精灵表中,使我们能够将它们加载到内存中,即使在该场景中仅使用了图像的子集。我想这是个坏主意。对吗

b只有在较旧的设备iPad 1和iPhone 3gs上,游戏中才会出现口吃。SpriteSheet是否有助于减少此类口吃

我假设SpriteSheet只会占用运行时内存,而不会占用应用程序存档的磁盘大小。例如,我注意到,一组大小为11.8MB的文件,当放在精灵表中时,其大小为11MB,这对压缩没有多大好处。这是一个有效的假设吗

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

谢谢


Anand

经验法则:除非有充分的理由不这样做,否则所有的东西都在spritesheet纹理图集中

绝对是纹理图谱

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

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

请记住,大纹理从SpriteBatch中受益匪浅。因此,即使纹理图集中可能只有2-3幅图像,它也会在性能上产生差异

a这要视情况而定。如果你的应用程序内存不足,你可能需要单独的纹理图谱。否则,如果可能的话,不将图像打包到单个纹理图集将是浪费

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

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


有关更多信息,请参阅我的。

经验法则:所有内容都在spritesheet纹理图集中,除非有充分的理由不这样做

绝对是纹理图谱

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

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

请记住,大纹理从SpriteBatch中受益匪浅。因此,即使纹理图集中可能只有2-3幅图像,它也会在性能上产生差异

a这要视情况而定。如果你的应用程序内存不足,你可能需要单独的纹理图谱。否则,如果可能的话,不将图像打包到单个纹理图集将是浪费

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

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


有关更多信息,请参阅我的。

谢谢,这非常有帮助。谢谢,这非常有帮助。