2012-01-28 15 views
1

私のゲームではいくつかのテーマを作りたいと思います。 (doodle jumpのように) フレーム名は異なるテーマで同じで、私はplistファイルを変更する必要があると思います。cocos2dスプライトフレームキャッシュは変更できません

Helper.mで

:appdelegateで

+(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]; 
} 

、私はテーマを選択するときに、私のShopSceneで、 'リフレッシュキャッシュは' と呼ばれます、 'addcache' と呼ぶだろう。

このコードは私のBlockCacheである(「通常ブロック」はゲーム内のブロックのようなもの」です)

CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"normal.png"]; 
    batch = [CCSpriteBatchNode batchNodeWithTexture:frame.texture]; 
    [self addChild:batch]; 

( 『normal.png』 @ごとのplistファイルに存在していることに注意してください。同じ名前を使用します。

が、テーマを変更した後、「ブロックキャッシュ」まだ元の画像を使用するが、背景などは(私が使用BG = [CCSprite spriteWithSpriteFrameName:]正しいものを使用しています。方法

UPDATE:選択した後テーマ、私はゲームを殺すし、それを再起動、それはfiを動作させるne。 Appdelegateからの呼び出しは正常ですが、私は実行時にキャッシュを変更することはできません。

答えて

1

スプライトフレームはテクスチャを参照します。テクスチャはCCTextureCacheにキャッシュされます。おそらく、CCTextureCacheからテクスチャを削除する必要もあります。

そして、あなたはまだテクスチャAを利用することができますが、それらは、テクスチャBを利用したいされている画面上のスプライトを持っている場合は、これらのオプションがあります。

  • setTextureを送信します。新しいテクスチャを使用してメッセージを各スプライトに
  • [CCSpriteFrameCache purgeSharedSpriteFrameCache];を呼び出すと、いずれの場合では不必要であることを
  • は、現在のシーンに

注意をリロード古いスプライトを削除し、新しいものを追加します。シングルトンの割り当てを解除する必要はありません。キャッシュしているものを削除するだけです。

テクスチャのアンロードとスプライトが使用するテクスチャの置き換えには、Cocos2D Webcam Viewer tutorialのコードを使用することができます。

+0

テーマが異なる場合、DefaultThemeのように別のものを使用することがあります。テクスチャキャッシュとフレームキャッシュの両方に@ "junglebg.png"がありません。テーマを変更した後、FrameNameを使用したい場合もありますDefaultTheme。 (フレーム名は同じですが、ファイルのセットは異なります)。 – OMGPOP

+0

私はspriteWithFile:@ "junglebg.png"を直接使用しています。サイズは960x640ですが、1024x1024のメモリが必要ですか?しかし、私はzwoptexを使用する場合は、私は2つの1024×1024シートが他のスプライトのために、空き領域の多くが必要です。 – OMGPOP

関連する問題