tswi's dev

動くものが正しいものだ

重なったSpriteの表示順を変更する

cocos2dで、スプライトを動かしながら描画の奥行きを入れ替えたいときの方法。
バージョンは1.0.1。
例えば下記みたいに、マップの上を動くような挙動をさせる場合。
f:id:tswi:20120328215737p:plain
f:id:tswi:20120328215729p:plain


詳細はcocos2dに付属のサンプル(TileMapTest.mなど)を参照すれば書いてあるので、
f:id:tswi:20120328220046j:plain
要点のみ抜粋。

やり方はすごく簡単で、CCNodeクラスのreorderChild:z:メソッドを使えばいいっぽい。

-(id) init
{
    if( (self=[super init]) ) {

        (省略。Spriteのインスタンスを生成したりする)

        // 定期的に実行するメソッドを指定
        [self schedule:@selector(repositionSprite:)];
    }
    return self;
}

-(void) repositionSprite:(ccTime)dt
{
        (省略。x, y軸の値を変更したりする)

	int newZ = <任意のz値>;
	
        //z値を指定
	[map reorderChild:tamara z:newZ];	
}

ちなみにCCNodeにvertexZというプロパティがあるけど、これにfloat値を代入して当該ノードの大きさを拡大縮小することで擬似的に奥行きを表現することができるらしい。

今回の収穫は、「こういうのってどうやってやるんだろう?」というとき、とりあえずサンプル動かしてみるのが近道だということがわかったってこと。