プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

cocos2d スクロールを使った処理

cocos2dで作るiPhone&iPadゲームプログラミング7章

v2における変更点もそんなに多くないようなので、今のところ本の内容はかなり参考になっている。
この本を読み終わったら、詳しく変更点を調べたりしてみようと思う。

ColoredSquareSprite.mなどで出たエラーの対処

関数の先頭で、これらの行をコメントアウトします。 
//glDisableClientState(GL_TEXTURE_COORD_ARRAY);
//glDisableClientState(GL_COLOR_ARRAY);
//glDisable(GL_TEXTURE_2D);
//glVertexPointer(2, GL_FLOAT, 0, circleVertices_);
//glColor4f(color_.r/255.0f, color_.g/255.0f, color_.b/255.0f, opacity_/255.0f);
関数の一番下に、これらの行をコメントアウトします。 
//デフォルトのGLの状態を復元 
//glEnableClientState(GL_TEXTURE_COORD_ARRAY);
//glEnableClientState(GL_COLOR_ARRAY);
//glEnable(GL_TEXTURE_2D);
関数の先頭で、次の行を追加します。 
ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position | kCCVertexAttribFlag_Color);

http://www.cocos2d-iphone.org/forum/topic/31928

あとは画像が1種類しか用意されていなかったら解像度ごとにスケールを切り替えるみたいな処理を追加できたらもっと制作しやすくなるかもしれない。
今のままだと解像度の異なるデバイスでは画面の表示が変化するので、サンプルの作成でモヤモヤする。

7章では6章のプログラムをシューティングっぽくするらしい。
仮想ジョイパッドSneakyInput、独自の視差背景スクロールなど。

7.1高度なパララックススクロール

CCParallaxNodeでは無限にスクロールできないので、独自にCCNode派生クラスを作成する。
まず複数の画像を用意する。これらはテクスチャアトラスにしておく。
それをSpriteBatch化して配置する。
※サンプルプログラム内ではすでにキャッシュ済みの画像をCCTextureCacheのaddImageで取り出しているが、これはtextureForKeyでも取得できるらしい。
次に移動。これはレイヤごとに視差の係数を用意してスプライトを移動する。
連続してスクロールさせるために、同一の背景レイヤを左右反転し、交互に表示する。
テクスチャを繰り返す方法としてOpenGLのGL_REPEATテクスチャパラメータを使う方法もある。ただしこれは正方形の画像に限る。

7.2仮想ジョイパッド

SneakyInput・・・すくなくともv2に同梱されているのは微妙。サンプルが悪いのか、マルチタッチに対応していない。
本には新規にSneakyInputを統合する方法も書かれていた。
境界チェックは毎回どこへ配置するか悩む。サンプルではCCSpriteを継承したShipクラスが入力により画面外へ出ないようにsetPositionをオーバーライドしていた。
仮想ジョイパッドは他にもあるらしいので、使用したくなったら再度調べるとよさそう。

参考:

cocos2dで作る iPhone&iPadゲームプログラミング

cocos2dで作る iPhone&iPadゲームプログラミング