Memorandum

自分へのメモ。そして誰かの役に立てば、うれしい。

cocos2d-xでゲームを作ろう! 第九回 キャラクタを動かそう編

さて、NPCが複数表示できたところで、前回宣言したように動かしてみようと思います。
さて、どんな感じで動かしましょう?折角、Humanクラスを作成したので、そのメソッドとして「歩き回る」みたなものを作成して、それをコールするようにしてみましょうか。

メソッドを追加しよう!

呼び出しもととしては、Humanクラスのメソッドとして、以下のような「walkAround」っていうのを作って、それぞれのHumanインスタンスから呼び出すことで、自動的に歩き回ってほしいと考えています。

このメソッドの引数としては何が必要でしょう?
このメソッドの中では、scheduleメソッドを呼び出して、その周期にて歩き回らせようと思ってました。
じゃ、どのインスタンスにschedule登録しましょう。。。?やっぱり、Spriteを表示しているLayerでしょうか。
では、そのインスタンスをもらわないといけませんね。あと、開始と終了も制御したいので、こんな感じかな?

乱数で移動方向を確定しよう!

このスケジューリングの周期で、Human::walkRamdom()っていうメソッドを呼び出して、このメソッドの中て乱数を使って、上、下、右、左のどちらの方向に進んでいくかというのを選択させようかと思います。

以下のメソッドで、それぞれの移動方向に歩いていくように処理を行います。

移動メソッドを書こう!

移動メソッドは、以下のような感じです。

これは前向きに移動する処理ですが、他の処理も向きのアニメーションと移動する座標が異なるだけで、やっていることは同じです。
やってることとしては、アニメーションキャッシュから、前向きのアニメーションを取得してそのアニメーションの設定と、CCMoveTo()メソッドを使って特定の位置に指定した時間をかけて移動するという設定です。これで、歩きのアニメーションと同時に、場所の移動もしてくれるというものです。簡単ですね!

キャラクタを歩かせてみよう!

さて、これで準備完了です!まずは、NPCのBキャラを歩かせてみましょう!bool HelloWorld::init()に、歩き開始のメソッドを追加して、いざ!

なにー!

f:id:Keizi:20130929184431p:plain
落ちてもうたー。なんかよくわらかないとこで落ちてる。なんでー?
この問題と対決することで、色々と理解していないことが明るみになるのでした。
解決編は次回にて!