アクションゲームでは使われるシーンはあまり多くないかもしれませんが、今回は体力ゲージ・HPゲージ・HPバー(どれがホントの呼び方?)を表現するプログラムをつくってみます。
この記事を読んでいただくと、アクションゲームで体力ゲージ・HPゲージを表現するプログラミングの方法が分かります。
なお、体力ゲージやHPゲージではなくて「プレイヤーストック(ライフ)」の作り方についてはこちらの記事で紹介しています。↓↓↓
この記事で使用しているスプライト(キャラクター・背景・オブジェクト・音声など)はすべてパブリックドメインの無料の素材をダウンロードして使用しています。
完成品
この章の内容をご自身のScratch環境に反映すれば、同じ動きを再現することができます。
完成した動き
メインキャラクター(主人公)が敵キャラクターの攻撃を受けると体力ゲージが1メモリずつ、「HP」変数の値が1ずつ減っていきます。
横幅のサイズ調整がちょうど良かったので、メモリの数は最大26にしています。
体力ゲージが0になると主人公がダウンして、すべてのスプライトが動かなくなります。
使用したスプライト
スプライトは「キャラ1」「地面1」「背景1」「天気1」「ティラノ」「体力ゲージ枠」「体力ゲージバー」の7つです。
アクションゲーム用の背景・キャラクター・アイテム等の画像や音声は、パブリックドメインである「スーパーパワーアセットパック(CC0)のprehistoric-platformer」を使っています。
「キャラ1・地面1・背景1・天気1」スプライトについては、こちらの記事の「使用したスプライト」の章で詳しく説明していますので参照してください。↓↓↓
【Scratch 3.0】アクションゲーム ジャンプと地面にめり込まないように着地する方法(Tips)
「ティラノ」スプライトについてはこちらの記事で解説しています。↓↓↓
【Scratch 3.0】アクションゲーム 敵キャラクターの追加とアニメーション①(Tips)
【体力ゲージ枠のスプライト】
「体力ゲージ枠」スプライトの画像は、スーパーパワーアセットパックの「prehistoric-platformer\hud」フォルダ内にある「health-bar-top-1.png(フレーム)」と「health-bar-backgound.png(背景)」ファイルを組み合わせて(重ねて)使用しています。
【体力ゲージバーのスプライト】
「体力ゲージバー」スプライトの画像は、スーパーパワーアセットパックの「prehistoric-platformer\hud」フォルダ内にある「bar-middle.png(メモリ)」ファイルを使用しています。
このファイルは体力ゲージバーの1メモリ分の画像になっているので、実際のプログラムの中では必要なメモリ分のクローンを作って並べています。
完成したスクリプト
完成したスクリプトの全体です。
内容を体力ゲージに絞るため、すべてのスプライトのスクリプトから背景スクロールや一部のアニメーションなどの説明に必須でないブロックは削除しています。そのため、以前の記事に比べてプログラムの量が少なくなっているところがあります。
【キャラ1のスクリプト】
今回のテーマである「体力(HP)ゲージ」のために追加したブロックに赤枠をつけています。
- HP:このスプライトのみ
【地面1のスクリプト】
【背景1のスクリプト】
【天気1のスクリプト】
【ティラノのスクリプト】
「ティラノ」スクリプトの動きについてはこちらの記事で解説済みですので興味があれば参照ください。
- アクション:このスプライトのみ
【体力ゲージ枠のスクリプト】
【体力ゲージバーのスクリプト】
- クローン番号:このスプライトのみ
「メモリを描く」定義ブロックは、「画面を再描画せずに実行する」にチェックを入れて作ります。
スクリプトの作り方
ここからはプログラムを作っていく中でポイントとなる部分を説明します。
ポイント①:体力ゲージの初期状態(ゲージメモリのクローン)をつくる
体力ゲージのメモリは、26個のクローンでつくります。26という数字は「キャラ1」スプライトの「HP」変数の中に入っています。
クローンをつくるときに、「クローン番号」変数に1~26の数字を入れてからつくるようにします。
こうすることで、それぞれのクローンが1~26の別々の番号をもった状態でつくることができるので、あとでメモリを減らすときに『○○番の番号をもっているクローンよ、消えなさい』という命令をすることができるようになります。
なお、クローン番号の状態は下の図のようになっています。
ポイント②:HPが減ったら体力ゲージを1メモリずつ減少させる
体力ゲージの初期状態をつくることができたら、つぎに主人公がダメージを受けたときに1メモリずつバーを減少させるプログラムをつくっていきます。
まず「キャラ1」スプライト側のプログラムは、下の図のように「(体力ゲージバーに反映)を送って待つ」ブロックでメッセージを送ります。
メッセージを受け取りは「体力ゲージバー」スプライトにしているので、あとの処理は「体力ゲージバー」スプライト次第です。
ここでは「体力ゲージバー」スプライト側の処理が終わったら「HPを-1ずつ変える」ブロックでHPを1減らす処理を行っています。
「~を送る」ブロックと「~を送って待つ」ブロックの動きに違いはこちらの記事で説明していますので気になる方は参考にしてください。↓↓↓
つぎに肝心の「体力ゲージバー」スプライト側のスクリプトを見ていきます。
中身はとてもシンプルです。
「クローン番号」変数の値と「キャラ1のHP」変数の値が一致したらそのクローンを削除する、という内容です。
「キャラ1のHP」変数の値は大丈夫だと思います。その瞬間の「HP」変数の中身のことです。
「クローン番号」変数の値ですが、これはポイント①で説明したように1つ1つのクローンが1~26の別々の値を持っています。
そうするとたとえば、「HP」変数の値が26のときなら削除されるは一番右端のクローンです。また「HP」変数の値が1のときなら削除されるのは一番左端のクローンということになります。
「HP」変数の値は「26, 25, 24, 23,・・・」と1つずつ順番に減っていくようにしているので、体力ゲージバーは右端から順番に削除されていくことになり、バーが徐々に減っていくような動きを実現しています。
ここまでのポイントを押さえれば、アクションゲームで体力ゲージ・HPゲージを表現するスクリプトを完成させることができると思います。
失敗しやすいポイント
今回失敗しやすいポイントは特にありません。
応用編
適当な画像をつかって回復アイテム(骨付き肉)をステージの右端に追加しました。
それに合わせて、回復アイテムに触れると体力ゲージを1メモリずつ回復させる部分のプログラムを追加しています。
まとめ
さいごに、今回の記事で説明した『アクションゲームで体力ゲージ・HPゲージを表現するプログラミング』のポイントをまとめます。
- ポイント①:体力ゲージの初期状態(ゲージメモリのクローン)をつくる
- ポイント②:HPが減ったら体力ゲージを1メモリずつ減少させる
今回紹介した内容は、だいぶ前の記事で書いた「クローンごとに別々の変数を持って識別する方法」のテクニックを応用しています。Scratchはクローンを手軽に作成できるので応用の幅はかなり広いと思います。
変数をつくるときに「このスプライトのみ」でつくってクローンごとの値を活用する方法をぜひ模索してみてください。
どうでしたか?上手く再現できたでしょうか?
他にも役に立つTips(ティップス)記事をたくさん書いてますので、ぜひ見てみてください。(記事のタイトルに「Tips」と書いていたり「Tips」タグを貼ってあります)