Ad

cocos2d-xのver2系CCSpriteFrameCacheEditのsharedSpriteFrameCacheEditを使ってフレームなどを取得していると、時々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、機種などでしか起こらないので、結構はまりました。


Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1155, today: 1, yesterday: 0
Princeps date: 2018-05-05 (Sat) 22:15:34
Last-modified: 2018-05-06 (Sun) 14:14:39 (JST) (1558d) by njf
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF