cocos2d-xメモリの管理

Pocket

くまのがっこう神経衰弱バトル

画像や効果音を読みっぱなしにするとメモリを消費して古い機種などではアプリケーションが落ちてしまいます。そこでこまめにキャッシュを削除して消費メモリを抑える努力をしています。

くまのがっこう神経衰弱バトルはiPod 4 (iOS 6.1)メモリ256Mもサポートしているのでメモリはおよそ80Mを下回るようにしています。80Mを超えたあたりからmemory warningが出はじめます。iPhone 5以上ならそのようなことはありませんのでサポートする機種に合わせて目標値を決めれば良いとおもいます。

くまのがっこう神経衰弱バトルでは画像と効果音を大きく3つに分けて管理しています。

  1. 各シーン毎の画像/効果音
  2. ゲーム共通の画像/効果音
  3. アプリケーション共通の画像/効果音

cache

1.各シーン毎の画像/効果音は、シーンの開始時にキャッシュに読み込んで、そのシーンが終了するときにキャッシュを破棄します。主にシーン専用の背景画像やキャラクター、BGMなどです。

2.ゲーム共通の画像/効果音は、12ステージあるゲームの開始時にキャッシュに読み込んで全ステージを終了したときにキャッシュを破棄します。主にゲームのスコア表示やフレーム、ゲームエフェクトなど全ステージで共通の画像です。

3.のアプリケーション共通の画像/効果音は、アプリケーションを起動したときにキャッシュに読み込んで、アプリケーションが終了するまでキャッシュを破棄しません。主に全体で使用するボタン類、メッセージなどです。

シーン毎の画像/効果音のキャッシュへの読み込みと削除はコンストラクタとデストラクタで行っています。

HelloWorldScene.h

HelloWorldScene.cpp

この場合にシーンを切り替えた次のシーンでも同じHelloWorld.plistを使用していると現在のシーンのデストラクタにキャッシュが削除されてしまいエラーになりますので注意してください。

またシーンの切り替え中は現在のシーンと次のシーンのキャッシュ両方を同時に持つ事になるのでメモリの使用量は2重になりますので注意してください。

scene

キャッシュの設計を終えたら実際に動かしてXcodeのデバッグナビゲータを使ってメモリの使用量を測定して何処で何がメモリを喰っているか分析します。

memory

メモリを多く消費するところがある場合には画像の読み込みと破棄のタイミングを個別に調整してメモリの消費を抑えています。

古い機種を切り捨てればここまで神経を使わなくてもいいのかな…

Pocket

投稿者: Kei Osumi

GAME SHONENのプログラマー

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です