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

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

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


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

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

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

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

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

Player側での処理

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

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

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

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



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


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

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

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

本日実装した結果

このようか感じです。


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

Related Posts Plugin for WordPress, Blogger...