1: 2018-05-05 (土) 22:15:34 njf[5] [6] [7] | 現: 2018-05-06 (日) 14:14:39 njf[5] [8] [9] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | sharedSpriteFrameCache | + | cocos2d-xのver2系CCSpriteFrameCacheのsharedSpriteFrameCacheを使ってフレームなどを取得していると、時々NULLが返ります。例えば、 |
+ | |||
+ | CCSpriteFrame *frame; | ||
+ | CCSpriteFrameCache *csfc =CCSpriteFrameCache::sharedSpriteFrameCache(); | ||
+ | frame = csfc->spriteFrameByName(IMG_FRM_IMG); | ||
+ | |||
+ | とした時に、その名前のフレームがあるにもかかららずframeにNULLが入ることがあります。 | ||
+ | |||
+ | どうもキャッシュなのでいつの間にかメモリが解放されているようです。 | ||
+ | frameがNULLなら以下のような処理を入れる必要があるようです。 | ||
+ | |||
+ | CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(IMG_TEXTURE_PLT, IMG_TEXTURE_PNG); | ||
+ | |||
+ | しかし、これは対症療法にすぎません。キャッシュが破棄されると言うことは、メモリが足りなくなっていると言うことなので、その対策も必要となります。放置するとやがてアプリがクラッシュする可能性があります。 | ||
+ | |||
+ | 私の場合は一枚のスプライトシートのサイズが大きすぎました。あまり使っていない画像をスプライトシートから分離し、別途読み込みするようにすると、NULLが返ることはなくなりました。 | ||
+ | |||
+ | メモリ関連の処理のせいか、特定のバージョン、OS、機種などでしか起こらないので、結構はまりました。 |
(This host) = https://njf.jp