2019年12月09日

ActiveBasicとDXライブラリでゲームプログラミング!~第14回・シューティングゲームを作ろう!その6

n88_reon.gif
玲音:どうもこんにちは! この講座も、いよいよ今回で最終回! 頑張っていきましょう!

n88_kaede.gif
楓:こんにちは、楓です! だけど、先輩に引きずり込まれて始まったこの講座もいよいよ最後だと思うとさびしいですよね。


n88_reon.gif
だから、引きずり込んだんじゃないってー。さてさて、今回はタイトルやゲームオーバー画面、それにBGMや効果音を入れて、ゲームを完成させていくよ! よろしくね!

~タイトルとゲームオーバー画面を入れよう!

n88_reon.gif
さて。それでは、まずはタイトル画面の処理から入れて行こう! さっそく問題。タイトル画面の処理かどこに書くかな?

n88_kaede.gif
はーい! Titleサブプロシージャです!

n88_reon.gif
はい、正解。さて、ここに書いていくわけだけど、書いていくのは次の処理です。
・タイトル画面を表示する
・スペースキーが押されたら、変数funcにFUNC_PLAYINITを入れて、サブプロシージャPlayInitに処理をうつす

n88_kaede.gif
ふむふむ。

n88_reon.gif
それじゃ、まずはタイトル画像をハンドルに読み込む……前に、Case FUNC_TITLEの下の
func = FUNC_PLAYINIT
を消しておこう。そうしないと、すぐにサブプロシージャPlayInitに進んじゃうからね。

n88_kaede.gif
なるほど!

n88_reon.gif
さて、それが済んだところで、いよいよ処理を作っていこうか。まずはタイトルのハンドル用の変数の定義ね。
''※このほかにも必要な変数があればこの下に追加してください
の行と、
''メイン関数
の行との間に、次の一行を入れてね。

abdx1912-l01.JPG

n88_reon.gif
続いて、MaterialLoadサブプロシージャに、次の一行を追加。

abdx1912-l02.JPG

abdx1912-p01.JPG
▲追加した後のMaterialLoad(赤枠が追加した部分)

n88_reon.gif
そして、Titleサブプロシージャに、次のコードを書いてね。

abdx1912-l03.JPG

n88_reon.gif
プログラムの内容は、さっき話した通り。DX_PAD_INPUT_Mは、スペースキーを表してるよ。

n88_kaede.gif
ふむふむ。

n88_reon.gif
それじゃ続いて、ゲームオーバー処理も作っていこう。まずは、ゲームオーバー画面のハンドル用変数の定義からね。これは、
''※このほかにも必要な変数があればこの下に追加してください
の行と、
''メイン関数
の行との間に書いてね。

abdx1912-l04.JPG

n88_reon.gif
そして、ゲームオーバー画面を読み込む処理。こちらは、MaterialLoadサブプロシージャに。

abdx1912-l05.JPG

abdx1912-p02.JPG
▲ 追加後のMaterialLoadサブプロシージャ(赤枠が追加した部分

n88_reon.gif
そして、肝心のゲームオーバーの処理。これは、GameOverサブプロシージャに書いてね。

abdx1912-l06.JPG

n88_reon.gif
コードはほとんど、タイトル画面と同じ。違うのは、表示させてるのがゲームオーバー画面ということと、変数funcにFUNC_TITLEを入れてるところだけかな。

n88_kaede.gif
なるほどっ。

n88_reon.gif
ついでだから、スコアの処理も入れちゃおう! まず、
''※このほかにも必要な変数があればこの下に追加してください
の行と、
''メイン関数
の行との間に、次の一行を書いてね。

abdx1912-l07.JPG

n88_reon.gif
そして、PlayInitサブプロシージャに次の一行を追加。

abdx1912-l08.JPG

abdx1912-p03.JPG
▲ 追加した後のPlayInitサブプロシージャ(赤枠が追加した部分

n88_reon.gif
続いて、AtariJikiTamaToTekiサブプロシージャにこれを追加。
これは、自機の弾が敵に当たった時に、スコアを加算する処理だよ。

abdx1912-l09.JPG

abdx1912-p04.JPG
▲ 追加した後のAtariJikiTamaToTekiサブプロシージャ
(赤枠が追加した部分)

n88_reon.gif
そして最後に、スコアを表示する処理を作ろう!
処理はサブプロシージャにして、タイトル画面、実際のゲーム中、そしてゲームオーバーのどこからでも見れるようにするよ。

abdx1912-l09b.JPG

n88_reon.gif
そして、このサブプロシージャを呼び出すための次のコードを、Title、GameMain、GameOverの各プロシージャに追加するよ。

abdx1912-l10.JPG

abdx1912-p05.JPG
▲ 追加した後のTitleサブプロシージャ
(赤枠が追加した部分)

abdx1912-p06.JPG
▲ 追加した後のGameMainサブプロシージャ
(赤枠が追加した部分)

abdx1912-p07.JPG
▲追加した後のGameOverサブプロシージャ
(赤枠が追加した部分)

n88_reon.gif
これで出来上がりだよ!

n88_kaede.gif
おー! スコアが表示されてます!

~BGMと効果音を入れよう!

n88_reon.gif
さて。次はBGMと効果音だけど……素材の著作権の問題で、素材のファイルは掲載しません。適当なBGMや効果音を、インターネットからダウンロードしてきて用意してね。
ここでは、BGMのファイル名を、「bgm.mp3」「shot.mp3」「bomb.mp3」として進めていくよ。それぞれ、BGM、ショットの発射音、そして敵の爆発音の素材だよ。

n88_kaede.gif
はーい

n88_reon.gif
まず、DXライブラリでは、画像と同じように、ロードして、そのハンドルを使って再生したりします。
ということで、まず音声ファイルのハンドルを入れる変数の定義からね。
''※このほかにも必要な変数があればこの下に追加してください
の行と、
''メイン関数
の行との間に、次のコードを書いてね。

abdx1912-l11.JPG

n88_reon.gif
次に読み込む処理。MaterialLoadサブプロシージャに追加してね。
音声ファイルを読み込むには、dxLoadSoundMem関数を使うんだよ。

abdx1912-l12.JPG

abdx1912-p08.JPG
▲ 追加した後のMaterialLoadサブプロシージャ
(赤枠が追加した部分)

n88_reon.gif
続いて、BGMを演奏するサブプロシージャ、BGMの演奏を終了するサブプロシージャ、そして効果音を鳴らすサブプロシージャを作ろう。サブプロシージャを呼び出すようにすれば、プログラムがすっきりするからね。

abdx1912-l13.JPG
▲ BGMを演奏するBGMPlayサブプロシージャ、BGMの演奏を終了するBGMStopサブプロシージャ、効果音を鳴らすSEPlayサブプロシージャ

n88_reon.gif
さて、ここで新しくdxPlaySoundMem関数と、dxStopSoundMem関数が出てきたね。これについても説明しちゃおうか。
dxPlaySoundMemは、指定したハンドルの音声ファイルを再生する関数、dxStopSoundMemは、指定したハンドルの音声ファイルの再生を止める関数だよ。それぞれ、このように書くんだ。

dxPlaySoundMem(ハンドルの変数, 再生モード)
dxStopSoundMem(ハンドルの変数)

n88_kaede.gif
この再生モードには、何を入れたらいいんですか?

n88_reon.gif
うん。ここに入れるのは、DX_PLAYTYPE_BACKとDX_PLAYTYPE_LOOPの二つ。もうひとつ、DX_PLAYTYPE_NORMALというのもあるけど、これを使うと再生するたびに処理が止まっちゃうから、あまり使うことはないかな。

n88_reon.gif
さて。前者を入れると、普通に一回だけ再生、後者を入れると、何度でもループ再生するよ。その場合、止めるのはdxStopSoundMem関数を使うの。

n88_kaede.gif
なるほどー。

n88_reon.gif
さて、話を戻すね。サブプロシージャができたら、PlayInitサブプロシージャ、GameOverサブプロシージャ、JikiMoveサブプロシージャ、そしてAtariJikiTamaToTekiを、次のように変更してね。

abdx1912-p09.JPG
▲ 変更後のPlayInitサブプロシージャ。(赤枠が追加した部分)

abdx1912-p10.JPG
▲ 変更後のGameOverサブプロシージャ。(赤枠が追加した部分)

abdx1912-p11.JPG
▲ 変更後のJikiMoveサブプロシージャ。(赤枠が追加した部分)

abdx1912-p12.JPG
▲ 変更後のAtariJikiTamaToTekiサブプロシージャ。(赤枠が追加した部分)

n88_reon.gif
これで出来上がり。実行すると、BGMや効果音付きでゲームが楽しめるよ。

n88_kaede.gif
わー、ほんとだー!


n88_reon.gif
これでも、まだまだ課題は多いよ。今はゲームオーバーの時にスペースキーを押しっぱなしにするとすぐにゲームが始まっちゃうからそれを解消するとか、爆発を表示するとか、ボスキャラを入れるとか色々。そこは自分で、いろいろ工夫してやってみてね。

n88_kaede.gif
はーい。

n88_reon.gif
それでは、この講座はこれでおしまいです!
皆さん、ActiveBasicとDXライブラリで、一杯ゲームプログラミングを楽しんでくださいね!



==========
※次の更新は『師匠Tのチャレンジ・ARSゲーム!』の予定です。お楽しみに!

この記事へのコメント
コメントを書く
コチラをクリックしてください