在我的游戏中我想制作几个主题。 (像涂鸦跳) 框架名称在不同的主题中是相同的,我想我只需要更改plist文件。
Helper.m中的:
+(void) addCache {
ThemeTypes themeType = [Helper getCurrentThemeType];
if (themeType == ThemeTypeDefaultTheme) {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"block.plist"];
}
else if (themeType == ThemeTypeJungleTheme) {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"jungle1.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"jungle2.plist"];
}
else if (themeType == ThemeTypeXmasTheme) {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"xmas1.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"xmas2.plist"];
}
else if (themeType == ThemeTypeWhiteTheme) {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"blockwhite.plist"];
}
else if (themeType == ThemeTypeOuterSpaceTheme) {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"outer1.plist"];
}
else if (themeType == ThemeTypeSkyTheme) {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sky1.plist"];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sky2.plist"];
}
else {
}
}
+(void) purgeCache {
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[CCSpriteFrameCache purgeSharedSpriteFrameCache];
}
+(void) refreshCache {
[Helper purgeCache];
[Helper addCache];
}
这段代码在我的BlockCache中('普通块'是游戏中的一种块')
CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"normal.png"];
batch = [CCSpriteBatchNode batchNodeWithTexture:frame.texture];
[self addChild:batch];
(注意每个plist文件中都存在@“normal.png”。使用相同的名称。
但在更改主题后,“块缓存”仍然使用原始图像。但是,后台等使用正确的(我使用bg = [CCSprite spriteWithSpriteFrameName:]方法
更新:选择主题后,我杀了游戏,然后重新启动它,它工作正常。这意味着来自Appdelegate的调用很好,但我无法在运行时更改缓存。
答案 0 :(得分:1)
精灵帧参考纹理。纹理缓存在CCTextureCache中。您可能还需要从CCTextureCache中删除纹理。
如果您仍然在屏幕上使用纹理A但您希望它们使用纹理B的精灵,您可以选择以下选项:
请注意,在任何情况下调用[CCSpriteFrameCache purgeSharedSpriteFrameCache];
都是多余的。您不需要释放单例,只需清除缓存的任何内容。
您可以找到纹理卸载的工作解决方案,并替换sprite在我Cocos2D Webcam Viewer tutorial的代码中使用的纹理。