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、機種などでしか起こらないので、結構はまりました。
ぺージ情報 | |
---|---|
ぺージ名 : | cocos2d-x/ver2系CCSpriteFrameCacheのsharedSpriteFrameCacheでNULL |
ページ別名 : | 未設定 |
ページ作成 : | njf |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
Counter: 1622,
today: 3,
yesterday: 0
初版日時: 2018-05-05 (土) 22:15:34
最終更新: 2018-05-06 (日) 14:14:39 (JST) (2180d) by njf