0

现在写,我正在使用 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)时,如果用户触摸一张图片,它会运行动画。然后,当用户再次触摸图片时,会运行第二个动画。

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

我通过一个动画助手运行我的动画,它为我循环遍历图像。

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

4

3 回答 3

1

有同样的问题。使用 cocos2d v0.9 动画效果很好,没有卡顿。迁移到 cocos2d v2.0 时出现滞后。

当你在 cocos2d v0.9 中添加精灵到缓存(addSpriteFramesWithFile:(NSString*)plist)时,texture2d 也会被创建(CCSpriteFrameCache.m:238),在 cocos2d v2.0 中没有创建 textture2d,纹理是在第一次使用时创建的CCSpriteFrame。我通过添加来修复它

[[CCTextureCache sharedTextureCache] addImage:textureFileName]; 

在 CCSpriteFrameCache.m:207 (v2.0)

于 2013-08-29T08:15:48.227 回答
1

我只是在 cocos2D v3.1 iphone 中遇到了这个问题。我有缓存的精灵表,但在加载时仍然结结巴巴。我在另一篇文章的某处发现您还需要加载纹理本身以消除初始滞后。这就是我在缓存 sprites 方法中所做的:

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

只需加载一个虚拟的 CCTexture 文件,就可以消除所有首次动画和精灵滞后。希望这可以帮助!

于 2014-09-01T04:08:16.623 回答
0

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

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

我写了一篇博客文章,描述了这个问题,以及解决它的方法。最重要的是:获取 TexturePacker 并仅将 .pvr.ccz 用于纹理图集。尽可能将纹理颜色深度降低到 16 位。并确保转储纹理内存使用情况,以了解您实际使用了多少内存,以及该内存量是否在合理范围内。包括您可能支持的内存较少的旧设备。

于 2012-12-17T23:16:47.620 回答