Learn iPhone, iOS, Objective-c, Swift, cocos2dx, Unity and ….?

iOSやAndroid開発でのエラー解決法や便利tipsのメモ

RSS Feed

cocos2d 〜メモリ節約Tips〜

0 Comments
Posted by Kuro on 2013/01/20

Learn cocos2d本の著者のサイトでメモリ節約テクニックについての記事がありました。

90%ものメモリを消費しているものがなんだか分かりますか?ほとんどの場合アプリのメモリの大半を消費しているのはテクチャ(Texture)なのです。

こんな説明から始まって、テクスチャの読み込みについてのTipsがたくさん書いてあります。

ここでは超大雑把に概要だけ紹介します。

テクスチャを読み込むときに起こる問題は、読み込みに2ステップ必要だということです。まず、imageファイルからUIImageを作り、次にUIImageからCCTexture2Dオブジェクトを作ります。つまり、テクスチャを読み込むときには2倍のメモリを消費するということです。

イメージファイルサイズが小さいからといってmemory warningとは無縁ということではありません。ファイルサイズとテクスチャのメモリ消費は同じではありません。例えばテントのようなものです。イメージファイルは、テントを鞄の中に畳んで入れてあるときにどのくらいのスペースをとるかということで、実際に使うときには広げなくてはなりません。イメージファイルは圧縮されていますが、グラフィックプロセッサーが扱えるテクスチャになるときには圧縮されずにメモリに入ります。

では、どうするかという、以下のような方法が紹介されています

  • 通常32bitを使っているテクスチャを16bitにする。
  • すべてのテクスチャを前もって読み込んでおく
  • 最も大きいテクスチャから順に読み込む
  • メモリワーニング時にキャッシュが削除されることを避ける
  • 自分で不要なキャッシュはクリアしてあげる
  • Loading sceneを使う(古いシーンがdeallocされてから新しいシーンを読み込む)
  • テクスチャをバックグラウンドで読み込む
  • などなど。

    あと、「JPGは使うな!」だそうです。
    cocos2dではJPGの読み込みに問題があり、画像の読み込みに3倍ものメモリを必要とするそうです。

    Textureとは?

    そもそもテクスチャ(Texture)とは何なのかピンとこなかったので調べてみました。

    OpenGLのwikiを参考に簡単な定義を書いておきます。

    テクスチャーとは同じフォーマットの画像を1つ以上持つOpenGLのObjectです。
    比較のために定義すると、画像(image)はサイズとフォーマットが決まったある次元(1D,2D, or 3D)のピクセル配列のことだと言えます。
    そして、テクスチャー(texture)は1つ以上の画像を乗せるコンテナーだと言えます。

    スポンサードリンク


    Filed under cocos2d, Programming
    Tagged as ,
    You can leave a comment, or trackback from your own site.

    0 Comments

    You can be the first to comment!

    コメントを残す

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

    スポンサードリンク

    Popular Posts