【问题标题】:Cocos2D / CocosBuilder Texture Atlas Memory UsageCocos2D / CocosBuilder 纹理图集内存使用
【发布时间】:2013-04-24 23:28:57
【问题描述】:

我是 Cocos2D 和 CocosBuilder 的新手,我有几个关于内存使用的问题。

1) 在 CocosBuilder(或 Cocos2D)中,如果我对同一场景中的所有 CCSprite 对象使用相同的纹理图集(spritesheet),是否会比每个精灵的单独纹理节省内存使用? 准确地说,如果我使用一个 4k*4k 纹理,游戏是否只​​需要一个纹理图集的内存(例如 4k * 4k * 32 位)?

2) 我可以为不同的精灵使用不同的纹理模式来节省内存吗? 例如,对背景图像使用无 alpha 模式。 也就是说,Cocos2D 能否在同一个场景中处理不同的纹理模式?

3) 我必须在一个场景中实现一个包含大约 100 个对象的游戏,总共三个场景。 现在,同一场景中的所有对象都使用相同的 spritesheet。尽管如此,在场景之间切换几次后游戏还是崩溃了。每次我收到内存警告信息。 解决此问题的最佳方法是什么? 我试图转储所有这些缓存,但仍然崩溃。

非常感谢!

【问题讨论】:

    标签: iphone ios ipad cocos2d-iphone cocosbuilder


    【解决方案1】:

    1) 一个纹理只加载一次,无论有多少对象从中绘制。通常,使用单个纹理不会节省(太多)内存,但可以通过尽可能少地绘制纹理图集而不是单个图像文件纹理来提高加载时间和渲染性能。

    2) 是的。例如,您可以在同一场景中拥有 RGB565(无 alpha)、RGB5551(布尔 alpha)或 RGBA4444/RGBA8888 纹理,没问题。

    3) 使用仪器。检查是否有泄漏。如果您不使用 ARC,那么现在是时候切换了。 PS:不要清除缓存,这只是浪费时间和内存,因为最终需要再次重新加载纹理。如果你想释放一个你确定当时没有使用并且在不久的将来不会使用的纹理,那么取消缓存这些纹理并且只取消那些。

    【讨论】:

    • 谢谢!这很有帮助。我们的游戏不经常重复使用纹理。所以,我认为我们可以清除一些不会很快使用的东西。
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 2013-10-12
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多