ゲーム開発日誌part8 リフトに乗って移動する処理

本日は、part7でつくった落とし穴を使って、その上をリフトを使って移動する処理を考えていました。これを使えば、ダンジョンも面白くなるはずです。 どのような処理をすれば、リフトが実装できるかをまず考えました。

こんなふうに実装していけばできるのではないか。

リフトとPlayerが重なっている時は落とし穴に落ちない

まずは、リフトを表すクラスを作ります。 Movefloor

Tiledにはとりあえず2つのプロパティを設定します。 2012 4 28 dddss

これを使って、まずはリフトだけを動かす処理をupdateメソッドの中に書きます。

Player側での処理

「落とし穴」に落ちるメソッドの中に、条件式をいれて、リフトとPlayerが重なっている時は落ちないように設定します。 [c] //CGRectContainsPointを使って、リフトのRectとPlayerのpositionが重なったときの処理を考えます。 if (CGRectContainsPoint("ここにリフトのRect", "player.position")) {

//この中に重なったときにどうするかを記載します。            

} [/c]

Playerもリフトと同じように移動をする

これは、リフトの移動と同じようにPlayerを移動させてあげればいいだけなので、簡単。 例えば以下のように、リフトとplayerの動きを同じにしてあげる。 [c]

//リフトの動き self.position = ccpAdd(self.position, ccpMult(point, delta));

//リフトとプレイヤーが重なっているときだけ if (CGRectContainsPoint([self liftrect], player.position)) { //Playerの移動 player.position = ccpAdd(player.position, ccpMult(point, delta));

    }

[/c]

難しい点はTiledでどこにオブジェクトを設置するか

Tiledでオブジェクトは以下のように設置していくのですが、この場所の調整が難しい。 2012 4 28 6544

特に何もアンカーポイントを設定していない場合。クラスのCCSpriteはこのように表示されます。 2012 4 28 ffss

これを考えて配置しないと、床とリフトの間に隙間ができて乗れなかったり、リフトが反対側まで届かなかったりします。 これは実際にiPhoneのシュミレーターで確認しながらやるのがとても怠いです。

本日実装した結果

このようか感じです。

新しいものを一日に2つは作っていけるように頑張って行きます。