はじめてゲームプログラミング 「キャッチ」&「リリース」のギミックを作る【最終回】ついに完成へ

はじプロ ギミック解説
この記事は約6分で読めます。
コンじゃぶろー
コンじゃぶろー

こんにちは!コンじゃぶろーです!

今月のランニング距離が100kmを越えそうです。皆さんは、何か運動されてますか?プログラムで上手くいかなくてイライラした時は、ランニングがおすすめです。

上手くいかない事があっても、ランニングしている間に脳に酸素と血が巡って頭がスッキリしますよ!

はじめてゲームプログラミング 「キャッチ」&「リリース」のギミックを作る【最終回】ついに完成へ

さて、今日はキャッチ&リリースが出来ました!というご報告です!

もぐお
もぐお

今回は、時間かかったね

コンじゃぶろー
コンじゃぶろー

本当に時間かかった(げっそり)

毎日違う方法を試しては、上手くいかないの繰り返し

もぐお
もぐお

地獄だったね

コンじゃぶろー
コンじゃぶろー

作ってはイライラして走るの繰り返しで、ランニング距離も伸びました

もぐお
もぐお

マラソンランナーに転職したのかと思ったよ

さぁ、今回勉強になったポイントは以下の通りです。

・キャッチしてるように見えるマジック
・状態遷移を整理すれば複雑な制御が出来る
・ボタン連打防止のギミック
・デバッグの心得、方法

コンじゃぶろー
コンじゃぶろー

苦労した分、収穫は大きかったので便利なギミックが紹介出来ると思います。

はじめてゲームプログラミング キャッチしてるように見せる仕組み

キャッチのギミックを作った時に1番困るのは、ズバリ「キャッチしている最中」のホールドの弱さです。

コンじゃぶろー
コンじゃぶろー

過去に何度も、キャッチのギミックを作りましたが、少し振り回しただけでボールが飛んでいってしまいます。

これを解決するのに使ったのは、「エクストラチェックポイント38」の「小さく変身」です。

※エクストラチェックポイントとは、ナビつきレッスン7クリア後の、ステージです。

感の良い人はお気づきかと思いますが、そうです。「ボールを持っていない人」と「ボールを持っている人(ボールが連結された人)」を用意して、状態に応じて入れ替える方法をとりました。

このステージは、ワープ入り口とワープ出口を人ノードンに接続して、ボタンを押した瞬間にお互いの位置を入れ替えます

このように接続するとクリア出来ます。

これを利用する事で、ボタンを押したらボールを持つ、ボタンを離したらボールが消えるというプログラムを組む事が出来ます。

もぐお
もぐお

イカサマだ!

正々堂々勝負しろ!

コンじゃぶろー
コンじゃぶろー

ゲーム作りは、マジシャン

ユーザーを夢の世界にいざなうお仕事なんだよ

イカサマでも、なんでもいいから実現するって事が大事なんだ

こういった、「○○してるように見える」方法は、ゲーム開発では良く使われる手法で、とてもクリエイティブで楽しい部分です。

特に、ファミコン時代みたいなハードの性能が今ほど良くなかった時代は、プログラマーの芸術的な作品が多く生まれたんだよ

キャッチ&リリース つかみっぱなしの問題

コンじゃぶろー
コンじゃぶろー

さぁ、人ノードンを途中で入れ替えるギミックを作ると、1番大変なのはつかみっぱなし問題だ

ボールをキャッチしたら入れ替える。ボールを投げたら入れ替える。この動きを作ってみても・・・

このように、ボールを掴んだままになってしまいます。

コンじゃぶろー
コンじゃぶろー

この状態で、ひたすらデバッグしました。その結果、各状態での条件処理に数秒間の穴があり、人ノードンが入れ替わらないタイミングがありました。

デバッグの心得に関しては、後ほど記載します。条件処理が複雑になっていた為、設計書を細かく整理しました。

はじめてゲームプログラミング 状態遷移を整理すれば、複雑な制御が出来る

最初、問題があった時に作った仕様書はこれです。

これを、もう少し細かく整理してみました。

コンじゃぶろー
コンじゃぶろー

プログラマーの中には、頭の中で細かく組んでしまう人や、プログラム自体が見やすくて、細かく分解しなくても良い人はいますが、丁寧にやっていきます。

■状態①「待機」

<初回処理>:なし

・条件判定:ZRボタン押下→状態②「キャッチスタート」に遷移

■状態②「キャッチスタート」

<初回処理>:タイマー起動(タイマーノードンは、リセット出来ないのでカウンターノードンを使って1秒間を管理しました。)

・条件判定:1秒後→状態①「待機」に遷移し、タイマーをリセット

・条件判定:ボールと当たっていた場合→状態③「キャッチ中」へ遷移

・条件判定:ZRボタンを離した→「待機」に遷移し、タイマーをリセット

■状態③「キャッチ中」

<初回処理>:人ノードン入れ替えA→B

・条件判定:ZRボタンを離した→「投げるモーション」に遷移

■状態④「投げるモーション」

<初回処理>:タイマー起動、投げるモーション開始

・条件判定:0.5秒後→状態⑤「投げる」に遷移し、タイマーをリセット

■状態⑤「投げる」

<初回処理>:人ノードン入れ替えB→A、球の打ち出し

条件判定:0.5秒後→状態①「待機」へ遷移

コンじゃぶろー
コンじゃぶろー

初回処理は、状態が切り替わった時に1回だけ実施される処理だよ。状態遷移の制御には必要な考え方だよ。

一度、上の仕様書を元に、組んでみると分かりやすいよ。

答え合わせしてみると、状態の制御の仕方が深く理解出来ると思います。

僕が作った物を公開しますので比べてみて下さい。

コンじゃぶろー
コンじゃぶろー

少し分かりづらいかもしれないけれど、お手本通り作る必要はないぞ!

違う方法でも、実現出来たらそれが答えだ!

はじめてゲームプログラミング ボタン連打防止のギミック

もう一つおまけに、ギミック紹介です。実は、上記のやり方でも連打した時につかみっぱなしになる事があったので、連打防止用のギミックを作りました。

ボタンを押した後で、0.75秒間フラグを立てて、フラグが立っている間は、ボタンを押せなくしました。

コンじゃぶろー
コンじゃぶろー

サンプルの待機状態の辺りを見てみましょう。

はじめてゲームプログラミング デバッグの心得

コンじゃぶろー
コンじゃぶろー

はい、お疲れ様でした。

最後に、今回一番時間をかけたデバッグに関しての心得をひとつ

デバッグとは、不具合の原因を調査する大事なフェイズです。

デバッグで1番大切な事は、100%発生する条件や手順を探すという事です。

闇雲にトライ&エラーを繰り返しても原因は分からないので、デバッグ環境を整えて録画する方法がオススメです。

デバッグ環境を作る

状態のフラグや、AND等の値を、数ノードンで表示して下さい。

出来るだけ多くの数字がどう変化しているのか分かるようにしておけば、不具合の原因が見つけ易くなります。

発生時の状態を録画して残す

不具合が再現出来たら録画しましょう。

スイッチでの録画方法は、Joy-Con左の十字キーの下に録画ボタンがあります。これを長押しすると、長押してから30秒前のプレイが録画出来ます。

コンじゃぶろー
コンじゃぶろー

僕は、この動画をコマ送りで見続けて不具合の原因を調べたよ

2週間も・・・

長々とご清聴ありがとうございました。

ではでは、また。皆様のよいゲーム作りをお祈りしております。

コメント

タイトルとURLをコピーしました