我面临游戏问题我正在开发。我有几个动画,我的问题是,它们正常工作,但第一次加载,有一个延迟,只是第一次。我不知道如何解决它。我已阅读有关CCAnimationCache的所有文档,我已阅读论坛,但我没有成功。我仍然有同样的问题,动画工作,但第一次加载其中一个,有一个延迟。你能帮帮我吗?我也读过这个网站:http://www.johnwordsworth.com/2011/07/loading-cocos2d-sprite-frame-animations-from-plist-files/他们谈论预加载但我的结果是一样的。
我在开头缓存动画,看起来它们都在缓存中,但结果不是所有的时间,每次我第一次加载其中一个动画时都会出现这种延迟。
我编写了一个函数来预加载规范之后的所有动画并使用CCAnimationCache,它不起作用或者我错了。以下是我制作的一些代码:
for(int element = 0; element < 3; element++){
for(int pos = 0; pos < 3; pos++){
CCAnimation *auxAnimation = nil;
animation = getAnimationInformationWithElement(element, pos);
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[NSString stringWithFormat:@"%@.plist",animation.animationFileHeader]];
for(int i = 0; i <= animation.numberOfFrames; i++) {
if(i<=9)auxFileName = [animation.animationPNGFileName stringByAppendingString:@"0000"];
else auxFileName = [animation.animationPNGFileName stringByAppendingString:@"000"];
[elementsAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"%@%d.png",auxFileName,i]]];
}
auxAnimation = [CCAnimation elementsAnimFrames];
[animationsToBeSaved elementsAnimFrames];
elementsAnimFrames = [[[NSMutableArray alloc] init] autorelease];
[[CCAnimationCache sharedAnimationCache] addAnimation:auxAnimation name:[NSString stringWithFormat:@"animation_%d_%d",element,pos]];
}
}
有什么想法吗?
答案 0 :(得分:0)
假设您的动画是.png Spritesheets,我建议您将图像异步预加载到缓存中。
/ **异步,从文件加载texture2d。 *如果先前已加载文件图像,则会使用它。 *否则它将在新线程中加载纹理,并且在加载图像时,将调用该块。 *回调将在cocos2d线程中调用,因此从回调中创建任何cocos2d对象是安全的。 *支持的图像扩展名:.png,.bmp,.tiff,.jpeg,.pvr,.gif * @since v2.0 * /
-(void) addImageAsync:(NSString*) filename withBlock:(void(^)(CCTexture2D *tex))block;
例如,按如下方式使用它:
[[CCTextureCache sharedTextureCache] addImageAsync:@"spritesheetName.png" withBlock:^(CCTexture2D *texture){
@synchronized(self){
if (texture)
//increment preloaded assets count or whatever..
}
}];