2013年4月19日金曜日

cocos2d: スプライトのZオーダー変更と親ノードの変更

『金魚すくって』のバージョンアップ作業中、過去、スプライトのZオーダー(プライオリティ)を変更したつもりでいて、間違っていたところがあったので修正しました。

まだ、cocos2dを始めたばかりの頃に開始したプロジェクトだったので、今見るとなんじゃこりゃ?なコードに時々ぶつかり、寒い思いをします。


Zオーダーを変更していたつもりだったコードはこちら。
sprite.zOrder = newDepth; // ×まねしちゃだめ!
セッター側で良いこと処理してくれるだろうと思っても、とくに変化ありません。

正しくは、こちら。
[parentNode reorderChild:sprite z:newDepth];
spriteを格納している親ノードにreorderChild:を呼んでやります。

ついでに子ノードの、親ノード間移行の方法は、以下のようになります。
[sprite removeFromParentAndCleanup:NO];
[newParentNode addChild:sprite z:theDepth];
一旦、removeFromParentAndCleanup:で親ノードを抜けてから、新しい親ノードにaddChild:します。

注意点としてはremoveFromParentAndCleanup:のパラメータにNOを渡しているところでしょうか。YESとすると、spriteに設定しているアクションやスケジュールがクリーンアップされてしまいます。

同じようなメソッドで、removeFromParentがありますが、こちらは単に、removeFromParentAndCleanup:YESを呼んでいるだけなのでご注意下さい。

関連記事

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...