Animation 首次加载cocos2d时的起伏/缓慢动画

Animation 首次加载cocos2d时的起伏/缓慢动画,animation,cocos2d-iphone,Animation,Cocos2d Iphone,现在就写吧,我正在用cocos2d创建一本交互式电子书。当程序运行时,封面动画只有在初始加载时才是断断续续的。这个动画在封面上,它是巨大的。我们正在讨论13个纹理图谱,26个图像 我知道问题源于预加载/加载图像,但我已经在动画出现之前加载了所有图像 -(id) init { if( (self=[super init]) ) { isTouchEnabled_=YES; //Pg0 Animations [[CCSpriteFrameCac

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

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

我正在通过动画助手运行动画,该助手为我循环浏览图像


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

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

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


我写了一篇博文。最重要的是:获取TexturePacker并仅对纹理地图集使用.pvr.ccz。尽可能将纹理颜色深度减少到16位。并确保转储纹理内存使用情况,以了解实际使用的内存量,以及该内存量是否在合理范围内。包括您可能支持的内存较少的旧设备。

也有同样的问题。当use cocos2d v0.9动画正常时,没有延迟。迁移到cocos2d v2.0时会出现延迟

当您将精灵添加到cocos2d v0.9中的缓存(addSpriteFramesWithFile:(NSString*)plist)时,也会创建纹理2D(CCSpriteFrameCache.m:238),在COCOCOS2D v2.0中没有创建texture2d,纹理是在首次使用CCSpriteFrame时创建的。我通过添加

[[CCTextureCache sharedTextureCache] addImage:textureFileName]; 

在CCSpriteFrameCache.m:207(v2.0)

中,我刚刚在cocos2dv3.1iphone中遇到了这个问题。我已经缓存了SpriteSheet,但在加载时仍然口吃。我在另一篇文章的某个地方发现,你也需要加载纹理本身来消除初始延迟。这就是我在缓存精灵方法中所做的:

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

只需加载一个虚拟CCTexture文件,即可消除所有第一次动画和精灵延迟。希望这有帮助

实际上,我一直在关注你的书中关于大多数优化(yay)-16位,纹理打包机,.pvr.ccz等。然而,我不知道纹理压缩,我一定会实现它,但从我读到的你的博客文章中描述了迄今为止的最佳实践。如果我发现任何其他信息,将保持此更新。非常感谢。我知道我做错了什么!!!如果您的动画使用来自两个不同纹理文件的图像,则将暂停加载新纹理,前提是您尚未预加载特定纹理。只需编写一行代码,例如
[[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@“yourTexture.plist”]将不会加载纹理缓存。必须调用动画所在缓存的特定图像,并将其添加到层中。为此,我简单地添加了所有动画纹理的精灵,并使它们不可见。