cocos2d-x v3 チュートリアル 8

ゲームオーバーの実装など

元記事はこちらです。
Parkour Game with JavaScript (Cocos2d-JS v3.0) Chapter9

はじめに

ここでは、ゲームオーバーとHUDの更新の実装をします。

ゲームHUDの更新

プレーヤーの走った距離の更新

まず、2つのラベルをローカル変数から、メンバー変数に変更します。更に、コインの数のための変数 coins を追加して、コンストラクタで0に初期化します。

次に、StatusLayerクラスに updateMeter メソッドを追加しましょう。

このメソッドは、常に labelMeter の値を変更します。ここでは、 std::stringstream クラスを使って文字列を合成し、 std::string クラスの文字列として値を設定しています。

引数の px はピクセル(pixel)で、10ピクセルで1mになっています。

では、このメソッドを毎フレーム呼び出すようにします。

GameplayLayer.cpp を開いて、 update を関数追加します。

コインの数の更新

プレーヤーがコインを集めた時、コインの数の表示を更新します。

最初に、 addCoin メソッドを StatusLayer に追加します。

さらに、init 関数の最後に次のコードを追加して、毎フレーム update 関数が呼び出されるようにします。

最後に、プレーヤーがコインに接触したら、このメソッドを呼び出すようにします。

PlayScene.cpp を開いて、次のコードを colisionCoinBegin メソッドの最後に追加します。

プレーヤーがコインと接触する度に、 onCollisionBegin メソッドが呼び出され、コインの数は1ずつ増えます。

画面はこんなふうになります。

Play final

ゲームオーバーロジックの追加

GameoverLayer の設計と実装

単純にするため、ゲームオーバーレイヤーの中心にメニュー項目を置くことにします。

restart が押されると、ゲームはリスタートします。

設計はとても一般的なものなので、さっさと実装しましょう。

これが、 GameOverLayer.hGameOverLayer.cpp の実装です。

ここで、 s_restart_ns_restart_s の2つのスプライトを追加して、リスタートメニューを作成しています。

ですから、リソースファイルを Resource ディレクトリに追加してください。

init メソッドは、よくあるものですが、コールバック関数の onRestart メソッドに注意してください。

そこでは、Director の resume 関数を呼び出しています。どうしてでしょうか?それは、プレーヤーが死んだ時に pause メソッドを呼び出すからです。

プレーヤーが岩と衝突した時のゲームオーバーの処理

では、プレーヤーが岩と衝突した時にゲームオーバーレイヤーを表示しましょう。

PlayScene を開いて、次のコードを onCollisionBegin メソッドのゲームオーバー処理の位置に挿入してください。

これで終わりです。実行してみましょう。

これが、最終的なスクリーンショットです。

Restart

タッチの認識

この節では、タッチの認識をします。この部分は、元のJavaScriptの実装ではスワイプですが、ここでは単純なタップのみでジャンプをさせることにし、更にジャンプのアニメーションの変更もしません。

タッチの認識をするためには、イベントリスナーを用意して、リスナーをディスパッチャーに登録します。
GameplayLayer.cppinit 関数の最後の部分に、次のコードを追加します。

また、タッチされた時のコールバック関数も追加します。

画面をタッチすると、 onTouchBegan が呼び出されます。

イベントリスナーの削除

少し乱暴ですが、今のままでリスタートするとリスタート後にジャンプがうまくいきませんので、少し乱暴ですが、PlayScene でLayerの初期化をした直後にイベントリスナーをすべて取り除きます。

まとめ

おめでとう。これでほぼ終わりです。

このチュートリアルで何をしたか見てみましょう。

最初にゲームのHUDの要素を更新しました。

次に、ゲームオーバーロジックを追加しました。

最後に、タッチを利用してジャンプする処理を作成しました。

Digiprove sealCopyright secured by Digiprove © 2015

cocos2d-x v3 チュートリアル 8」への1件のフィードバック

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください