スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

AndEngine OutOfMemoryについて

AndEngineは気を付けてコーディングしないとOutOfMemoryが頻発する。

ついつい私みたいなJavaやC#に慣れている世代だと「メモリの解放」ということ自体が頭からないため困った困った・・・

■Spriteに読み込んだ画像の解放を忘れずに

私が参考にした以下参考書には書いていなかったのだが、、、



基本的にSpriteを作成するには以下の手順で作成する(はず・・・)
1.gameActivity.getResources().getAssets().open(ファイル)によるInputStreamの生成
2.InputStreamからBitmapの生成
3.BitmapのサイズをもとにBitmapTextureAtlasの作成
4.gameActivity.getEngine().getTextureManager().loadTexture()でBitmapTextureAtlasのロード開始
5.Spriteの生成

で、ゲーム内で画面(Scene)の切り替えなどの時に明示的に表示したSpriteを解放している。
Sprite.detachSelf()やnull格納など。

参考書には上記をやって「メモリ解放しよう」と記載されているが、これだけだと実はちゃんとメモリ解放できていない。

■BitmapTextureAtlasの解放

実は「BitmapTextureAtlas」の解放が必要なのだ。


なので、画面の切り替え時などにSpriteなどを解放するタイミングで、同じように「BitmapTextureAtlas」も解放してあげる。


bitmapTextureAtlas.unload();
bitmapTextureAtlas.clearTextureAtlasSources();
bitmapTextureAtlas= null;


上記三つやると問題ない(と思う・・・)

私はSpriteなどを生成するときに作成する「BitmapTextureAtlas」をどっかにstaticでリスト管理して、画面遷移時にまとめて解放処理を行っている。
※もちろんSprite表示中に「BitmapTextureAtlas」を解放しちゃうと画像が表示されないからね!!


これはAnimatedSpriteでも同じ
スポンサーサイト

コメントの投稿

非公開コメント

おすすめアプリ
カテゴリ
最新記事
リンク
アクセスカウンター
アクセス解析
imobile
i-mobile
i-mobile
i-mobile
i-mobile
i-mobile
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Amazon
Androidお勧め参考書
EC studio
商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。