第一次加载cocos2d时出现Choppy / Slow动画

时间:2012-12-17 14:13:48

标签: animation cocos2d-iphone

现在写,我正在使用cocos2d创建一个交互式电子书。当程序运行时,封面页面动画仅在初始加载时不稳定。这个动画在封面上,很大。我们正在谈论13个纹理地图集,26个图像。

我知道问题源于预加载/加载图像,但我已经在动画发生之前加载了所有图像。

-(id) init {
     if( (self=[super init]) ) {
               isTouchEnabled_=YES;
    //Pg0 Animations
    [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"CB0A0.plist"];
    [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"CB0A1.plist"];
    ...etc.}}

本书的整体设置如下。我构建了一个场景,一个菜单层,然后菜单层推送并弹出不同的图层/不同的页面。

当加载封面页(Pg0)时,如果用户触摸了一张图片,则会在动画中运行。然后当用户再次触摸图片时,第二个动画就会运行。

本书的所有图像都加载在菜单层中(因此在任何页面推送或弹出之前)。我已经尝试在场景或各个页面上加载这些图像以加快处理速度,但这不会影响时间。

我正在通过动画助手运行我的动画,动画助手为我循环播放图像。

任何帮助都会很精彩,如果需要,我很乐意分享更多关于项目的代码或信息。

3 个答案:

答案 0 :(得分:1)

有同样的问题。当使用cocos2d v0.9动画没问题时,没有滞后。迁移到cocos2d v2.0时出现滞后。

当你在cocos2d v0.9中添加sprite到缓存(addSpriteFramesWithFile:(NSString *)plist)时,也会创建texture2d(CCSpriteFrameCache.m:238),在cocos2d v2.0中没有创建textture2d,纹理是在首先使用CCSpriteFrame。我通过添加

来修复它
[[CCTextureCache sharedTextureCache] addImage:textureFileName]; 

在CCSpriteFrameCache.m中:207(v2.0)

答案 1 :(得分:1)

我刚刚在cocos2D v3.1 iphone中遇到过这个问题。我有高速缓存的spritesheets但仍然在装载时口吃。我发现在另一个帖子的某个地方你需要加载纹理本身以摆脱最初的滞后。这就是我在缓存精灵方法中所做的:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"spritesheet.plist"];
CCTexture *temporaryLoadTexture = [CCTexture textureWithFile:@"spritesheet.png"];

只需加载一个虚拟CCTexture文件,即摆脱所有首次动画和精灵延迟。希望这有帮助!

答案 2 :(得分:0)

检查您的AppDelegate是否实现了内存警告方法。检查该方法的作用。

默认情况下,cocos2d实现该方法并清除所有缓存。现在当在预加载纹理时触发它时,会发生的事情是cocos2d删除了预加载的纹理,因为收到了内存警告但尚未使用那些预加载的纹理。 Cocos2d认为它们是“未使用”并将它们从内存中删除。这意味着下次使用该纹理时,需要再次从磁盘加载。

我写了一篇博文where I describe this issue, and ways to solve it。最重要的是:获取TexturePacker并仅使用.pvr.ccz作为纹理图集。尝试尽可能将纹理颜色深度降低到16位。并确保转储纹理内存使用情况以了解您实际使用的内存量,以及该内存量是否在合理限制范围内。包括您可能支持的内存较少的旧设备。