変数でライフやスコアを作ろう(前編)

こんにちは、インターン生の鶴田です。
GameMaker Studio(以下GMS)について紹介していく記事、第9回のテーマは「変数でライフとスコアを作ろう(前編)」です。
最終回に向けて、2回にわたって変数を使った処理をやっていきます。

プログラミングを勉強していれば絶対に扱う変数ですが、そうでない人にとっては数学で聞いたことあるかも?くらいのものだと思います。
でも実は、得点(スコア)やプレイヤーや敵キャラの体力(ライフ)をはじめ、ゲームに出てくる数字はほとんど変数を使って管理されています。
変数についてのお勉強…は、ここでは時間が足りないので省略!
今回はGMSのドラッグ&ドロッププログラミングで変数を扱う方法を紹介します。
第8回で作ったプロジェクトに付け足す形で作っていきますから、前回作ったプロジェクトを開いてから記事を読んでいってください。
(間違えてやり直したくなった時のために、Fileタブの「Save Project As」から別の名前でプロジェクトを保存して第8回の内容を残しておくことをおすすめします)

・キャラのライフを設定しよう-変数の初期化-
前回、「キーを押すとキャラから弾が出て、当たった敵が倒される(消える)」というプログラムを作りました。
これをちょっと改造して、敵に弾を3発当てないと倒せないように設定を変えてみます。つまり、敵キャラにライフを設定するわけです。

早速やっていきましょう。敵キャラを改造するので、敵キャラのオブジェクトをいじっていくことになります。
enemyオブジェクトのイベント一覧にCreateイベントを追加して、その中にCommonカテゴリの「Assign Variable」ブロックを出します。

このブロックは単純な数値型の変数を扱うときに使います。定義も代入もこれ1つでできます。(プログラミング経験者向けの説明)
ブロックを出したらName(変数名)欄にlifeと、Value(変更後の数値)欄に3と入れましょう。Relativeにチェックはしません。
これで、「lifeという名前の新しい変数を作って、初期値に3を代入する」というプログラムができました。

このlifeという変数を文字通り敵キャラのライフとして使っていくのですが、そのためには
・キャラが弾に当たったとき、そのキャラのライフを減らす
・ライフが0になった敵キャラが消える
という二つの処理が必要になります。順番に作り方を説明していきますね。

・弾に当たるたびライフが減る-変数の代入
変数は作って終わりではなく、プログラムによって数値を変えたり参照・代入したりできます。
今回は「キャラが弾に当たったとき、キャラのライフが減る」という処理を使って解説していきます。
enemyオブジェクトには前回作った「弾に当たったときこのインスタンスを消す」というプログラムが残っているはずなので、
これを改造してライフが減るようにしてみましょう。
shotとの衝突イベントの中にあるDestroy Instanceブロックを消します。(本当に消すか警告が出るのでOKを押しましょう)
ブロックが消えたのを確認して、さっきと同じAssign Variableブロックを出します。

同じブロックですが、今回は新しく変数を作るのではなくすでに作ってある変数の中身を代入する(書き換える)のに使います。
Name(代入する変数名)にさっき作った変数の名前(例だとlife)を、Value(変更後の数値)に-1を入れ、Relativeにチェックを入れましょう。
これで「shotオブジェクトのインスタンスにぶつかった時、変数lifeの値を-1する」という処理ができました。
つまり、弾に当たるたびにキャラのライフが1減るわけです。

・ライフが0になったことを判断する-If Variableブロック-
ライフを減らす処理が完成したので、次は「ライフが0になったキャラが消える」処理を作ります。
ライフが0、つまり変数lifeの値が0になったことをプログラム上で判断するには、いわゆるif文が必要です。
GMSのブロックプログラミングではif文に対応するブロックがいくつかありますが、今回は基本的な使い方だけ紹介します。
さっきのAssign Variableブロックの下に、Commonカテゴリの「If Variable」ブロックを出します。

このブロックを使うと変数の値によってプログラムを分岐させることができます。
if文を知っている人なら見ればわかるでしょうし、知らない人は習うより慣れよ…ということで実際にやってみましょう。
Variable(判定する変数)の欄を最初に作った変数(例では「life」)に、
Notのチェックボックスはチェックを入れずにスルー、
Is(条件)は「Less or Equal(以下)」、
Value(条件の基準値)は「0」に
それぞれ設定しましょう。

これで、変数lifeの値が0以下になっていた時だけ分岐するよ!という処理ができました。
後は分岐したときの処理にインスタンスを消すブロックを入れれば、「ライフが0になった時にこのインスタンスを消す」プログラムが完成します。
早速やってみましょう。第8回でやった通り、インスタンスを消す処理はDestroy Instanceブロックです。
ifブロックから分岐する処理(いわゆるtrue)は、ifブロックの右側につけるようにドラッグします。(If Variableブロックの下からうにょーんと緑色の線が伸びていればOKです)

これで準備ができました。Runしてみましょう。
敵キャラが弾を2発まで耐えて、3発目で倒せていれば成功です!

・スコアの表示(準備編)
次にスコアを作っていくのですが、区切りの都合で本格的な処理は次回に回します。
今回は次回に向けての下準備を先にやっておくことにしました。

さっき作った敵キャラのライフと違って、スコアは画面に表示されていたほうがいいですよね。
なので、スコアを表示するためのオブジェクトを新しく用意します。例ではtokutenにしました。
(ちなみにオブジェクトや変数などの名前に「score」を使うとGMSの機能と競合して不具合が起きるので別の名前を使いましょう)

忘れないうちにルームに置きます。キャラとして登場させるのではなく中のプログラムだけを使うので、スプライトは必要ありません。
置く場所もどこでもいいですが見失わない場所にしましょう。

ルームに配置できたらプログラムを作っていきます。必要なのはCreateイベントと、新しくDrawというイベントを使います。
Add EventからDraw→Drawと選んで追加してみましょう。

Drawイベントはインスタンスが消えるまでずっと処理が続き、同じタイミングの他の処理が終わった後に処理が始まるという特徴があります。
そのため、Drawという名前の通り何かを表示する処理の為だけに使うイベントとして用意されています。
注意事項としてDrawイベントで処理をするオブジェクトは画面上に表示されなくなります。
なので、キャラクターや障害物のような画面に登場するオブジェクトにはDrawイベントを使わないようにしましょう。

今回はCreateイベントでスコアの変数を作って、それをDrawイベントで表示する、という流れでやっていきます。

・まとめ
どうだったでしょうか。
最終回間近ということで説明が駆け足になってしまってすみません。
なるべくシンプルな説明でゲームを作る体験をしてもらおうと思い必要最低限の説明に留めていますが、
もともと説明が上手ではないのでわかりにくいところもあると思います。
それでも、変数の使い方を知れば自作ゲームを作りたい!という夢へ大きな一歩を踏み出すことができます。
この記事が少しでも、その一歩を後押しする原動力になれば幸いです。

さて、改まった挨拶の後ですが、最終回となる次回は今回よりさらに複雑な内容になります。
ここまで読んできて「余裕!」な人も「もうヘトヘト…!」な人も、もう少しだけお付き合いください!

※記事中の画像はすべてGameMaker Studio 2のスクリーンショットを加工したものです。

興味を持たれた方はお気軽にお問い合わせください。

インターンシップへの申し込み・お問い合わせ先

インターンシップへの申し込み・お問い合わせ先
メールでのお問い合わせは、下記フォームに入力して送信してください。
ご氏名 (例)山田 太郎
メールアドレス 半角英数字:ご入力間違いのないようにご注意ください
メールアドレス(確認用) 半角英数字:ご入力間違いのないようにご注意ください
電話番号 (例)0354339211 ※ハイフン抜きで入力してください
題名
お問合わせ内容

アーカイブ

カテゴリー