2014年7月10日木曜日

テクスチャアトラスとBatchNode

大量の同一画像を画面に表示する際、都度画像を読み込むのではなく、
BatchNodeに登録して一括表示させる方が無駄がないのは開発者としては
もはや聖闘士に同じ技が二度と効かないのと同じくらいの常識。



で。更に先の記事の前書きにもあるように、
画像もただ画像として表示させるのではなく
テクスチャアトラスをキャッシュ化して表示させた方が良いという事なので
合わせ技でBatchNodeにテクスチャアトラスを登録するのが
最もスマートでスタイリッシュであるという事らしい。

コード的にはこんな感じ?。例によって、書籍を参考にしております。

//Plistのキャッシュ化
SpriteFrameCache* hogehogeCache = SpriteFrameCache::sharedSpriteFrameCache();
hogehogeCache->addSpriteFramesWithFile(“hogehoge.plist");
//バッチノードの作成
SpriteBatchNode* hogehogeBatch01 = SpriteBatchNode::create(“hogehoge_all.png");
this->addChild(hogehogeBatch01);

実際にやってみてすごく便利だなと思ったのが、
BatchNodeって基本的に
一つのBatchNodeに一つの画像しか登録できないのだけど
テクスチャアトラスのシートを最初に登録してしまえば
そのシート内にある画像はすべて一つのBatchとして使用できるということ。

例えばゲームステージの地面になる画像4種類用意して


※こんなんが4種類ほど

画像をBatchNodeに登録していく場合、

SpriteBatchNode* FloorBatch01 = SpriteBatchNode::create("floor_A_01.png");
this->addChild(FloorBatch01);

SpriteBatchNode* FloorBatch02 = SpriteBatchNode::create("floor_A_02.png");
this->addChild(FloorBatch02);

SpriteBatchNode* FloorBatch03 = SpriteBatchNode::create("floor_A_03.png");
this->addChild(FloorBatch03);

SpriteBatchNode* FloorBatch04 = SpriteBatchNode::create("floor_A_04.png");
this->addChild(FloorBatch04);
こんな感じで4種類の画像毎にBatchNodeを作る必要がある(多分)。 しかし、テクスチャアトラスで一枚化してから登録する場合


この画像が1つとして扱われるので

SpriteBatchNode* FloorBatch = SpriteBatchNode::create("FloorA_all.png");
this->addChild(FloorBatch);
の一つで登録し、
記述によってどこを取り出すか変えられる。
BatchNodeとしては1つだけですむ。

floor01 = Sprite::createWithSpriteFrameName("floor_A_01");
FloorBatch->addChild(floor01);
floor02 = Sprite::createWithSpriteFrameName("floor_A_02");
FloorBatch->addChild(floor02);
floor01と02で違う画像なのに同じBatchNodeに登録できる。
記述する側としては、結構楽。
素敵!!


☆★というわけでcocos2d-xで制作しました★☆
☆★テクスチャアトラスやBatchNodeでアニメーション表現してます☆

レッド・ザ・パニッシャー ―スタイリッシュレトロアクション―
カテゴリ: アクション
Google Playで詳細を見る

今なら(永久に)無料! 今すぐチェック!!

0 件のコメント:

コメントを投稿