Ad

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、機種などでしか起こらないので、結構はまりました。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 85, today: 2, yesterday: 0
初版日時: 2018-05-05 (土) 22:15:34
最終更新: 2018-05-06 (日) 14:14:39 (JST) (74d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF