本日は、part7でつくった落とし穴を使って、その上をリフトを使って移動する処理を考えていました。これを使えば、ダンジョンも面白くなるはずです。 どのような処理をすれば、リフトが実装できるかをまず考えました。
こんなふうに実装していけばできるのではないか。
リフトとPlayerが重なっている時は落とし穴に落ちない
これを使って、まずはリフトだけを動かす処理を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でオブジェクトは以下のように設置していくのですが、この場所の調整が難しい。
特に何もアンカーポイントを設定していない場合。クラスのCCSpriteはこのように表示されます。
これを考えて配置しないと、床とリフトの間に隙間ができて乗れなかったり、リフトが反対側まで届かなかったりします。 これは実際にiPhoneのシュミレーターで確認しながらやるのがとても怠いです。
本日実装した結果
このようか感じです。
新しいものを一日に2つは作っていけるように頑張って行きます。