インスタンスを出したり消したりしよう

こんにちは、インターン生の鶴田です。
GameMaker Studio(以下GMS)について紹介していく記事、第8回テーマは「インスタンスを出したり消したりしよう」です。
シンプルなゲームを作るのに必要な「操作キャラから弾を撃たせて、弾が当たった敵が消える」という一連の流れを作ってみたいと思います。

・インスタンスのおさらい
第3回,第4回でちらっと登場したインスタンス。
オブジェクトとごっちゃにしやすいのですが、
「プログラムをやスプライトの設定を組み込む設計図がオブジェクト、設計図を元に実際にゲーム上で動いているのがインスタンス」
という関係にあります。これだけ聞かされても何のことだかピンと来ないと思いますが、頭の片隅に置いたまま説明を読んでいってください。

・その引き金で弾を撃て-Create Instanceブロック-
まずは操作キャラに弾を撃たせる方法から紹介。
いつも通り、オブジェクトとスプライトを作るところから始まります。
今回必要なのは
・キャラクターのオブジェクト(chara)
・弾のオブジェクト(shot)
・キャラクター用のスプライト(charasp)
・弾用のスプライト(shotsp)
の4つ。こんな感じにしてみました。

例によって適当ですが、弾のスプライトはキャラのスプライトより一回り小さくすると若干それっぽく見えると思います。
今回はcharaオブジェクトだけをルームに置いてください。

次に、キャラクターのオブジェクトが弾を撃つようにイベントを作っていきます。
charaオブジェクトにKeyPressedイベントを作りましょう。ここで割り当てたキーが弾を撃つ時に押すボタンになります。
イベントを作ったら、Instancesカテゴリの「Create Instance」ブロックを出します。

Object欄ではどのオブジェクトからインスタンスを作るかを指定します。ここでは弾のオブジェクトを出したいのでshotを選びます。
X,Yは移動処理の時と同じで座標です。キャラのいる場所よりちょっと右に出したいので、Xを30、Yを0にして両方のRelativeにチェックを入れます。
下2つの欄は初期値のままでいいです。

とりあえずこの時点で、「ボタンを押すとキャラの横に弾が出る」という処理はできました。
ただこれだと本当に出てくるだけなので、出てきた弾がビューンと右に飛んでいくようにしましょう。
必要なのは「shotオブジェクトのインスタンスが作られた瞬間から右に動く」ようなプログラム。
つまり、shotオブジェクト内にCreateイベントを作って、向きと速度を設定してやればいいわけです。
実はこれ、第5回でやったのとまったく同じです。Set Direction fixedで向きを、Set Speedで速度を設定してあげましょう。

これで準備は万端。ルームにcharaオブジェクトだけが置かれているのを確認してからRunしてみましょう。

ボタンを押すたびにキャラから弾が出て右に飛んで行っていれば成功です。
Set Speedの数値をいじって弾速を変えたり、Set Direction fixedで向きを変えて変な方向に弾を飛ばしたりしてみるのもいいですね。

・邪魔なモノを吹き飛ばせ-Destroy Instanceブロック-
キャラが弾を撃つ処理ができたので、今度は弾が当たったら消えるオブジェクトを作ってみましょう。
・敵キャラオブジェクト(enemy)
・敵キャラ用スプライト(enemysp)
を用意します。

enemyオブジェクトにイベントを仕込みます。弾とぶつかったときのイベントなので、Collision→shotですね。
このイベント内にインスタンスを消す処理を入れます。Instancesカテゴリの「Destroy Instance」ブロックをドラッグ。
このブロックの処理が発動した瞬間、自身のインスタンスがルームから消滅します。

これで敵オブジェクトの設定は終了ですが、shotオブジェクトにもひと手間加えましょう。
shotオブジェクトに敵オブジェクトとの衝突イベントを作り(Collision→enemy)、こっちにも同じようにDestroy Instanceブロックをドラッグしましょう。

さて、これでプログラムが完成しました。Runの前にenemyオブジェクトをルームに置く必要がありますが、
ここは試しにcharaオブジェクトの真右に2体、その上下に1体ずつ置いてみましょう。

Runして、割り当てたキーで弾を撃ってみましょう。

画像のように、撃った弾と手前の敵がぶつかって両方消えていれば成功です!

・まとめ
インスタンスを出す、消す処理の使い方はわかりましたか?これを読んでいる人の中には、
「今日やった内容と前にやったキーボード移動を組み合わせればシューティングゲームが作れそうだな」
と思ったカンのいい人もいるかもしれません。

確かに間違ってはいないんですが、今の段階だとシューティングっぽいものはできてもシューティングゲームそのものを作るのは難しいです。
なぜかというと、ライフやスコアをどうやって用意するかをまだ説明していないからです。どちらもゲームを作るなら必要になりますよね。
(ノベルゲームなど例外もありますが、それはそれとして)
というわけで最終回となる次回では、ライフやスコアの基になる「変数」の使い方を紹介したいと思います。お楽しみに!

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

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

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

アーカイブ

カテゴリー