в моей игре я хочу сделать несколько тем. (как каракули прыжок)
имена рамок в разных темах одинаковы, и я думаю, что мне просто нужно изменить файлы plist.
в Хелпер м .:
+(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];
}
в appdelegate, я буду называть addcache, затем в моем ShopScene при выборе темы будет вызываться «обновить кеш».
этот код находится в моем BlockCache («нормальный блок» - это своего рода блок в игре »)
CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"normal.png"];
batch = [CCSpriteBatchNode batchNodeWithTexture:frame.texture];
[self addChild:batch];
(обратите внимание, что @ "normal.png" существует в каждом файле plist. Используйте то же имя.
но после смены темы «кеш блоков» по-прежнему использует исходные изображения. однако фон и т. д. используют правильный (я использую bg = [CCSprite spriteWithSpriteFrameName:] метод
ОБНОВЛЕНИЕ: после выбора темы я убиваю игру, а затем перезапускаю, она работает нормально. это означает, что вызов из Appdelegate в порядке, но я не могу изменить кэш во время выполнения.