人生

やっていきましょう

329日目

バグの修正に数時間かかった。調べてみてもこの問題に言及されているサイトはなく、どうにか自分で対処する他なかった。

簡単に言えば、先日述べた「並列実行で起動する」カウントダウンタイマーのイベントと、「決定キーで実行する」タイピングクイズのイベントを同時に起動させたときに不具合が生じた。自分が本来実装したかったのは、タイピング中に制限時間が0になったら文字の入力画面(文字列操作のキーボード入力)を強制終了して「時間切れ、ゲームオーバー」という文章を出すことだった。しかし実際はいくら試しても文字の入力が実行されている間に強制終了することができない。

唯一できたことは、文字入力が強制終了されないまま「時間切れ、ゲームオーバー」という文章を表示することだけである。

だがこれでは問題がある。時間切れになっているにもかかわらず、文字の入力ができてしまっているからだ。以下の動画が参考になる。自分もまったく同じ症状になっている。

www.nicovideo.jp

ゲームの終了後にも文字の入力ができてしまっている。このことから新たな問題が発生した。もし仮に制限時間を過ぎて正しい答えを入力した場合、その判定はどうなるのか?実際に試したところ、不正解のイベントが起こった後に正解のイベントが演出された。この処理には随分手間取ったが、正解直後に現時点で時間切れかどうかの条件分岐を行ったことでどうにか解決した。

また、ゲームの終了後に「時間切れ、ゲームオーバー」という文章が表示されるが、このときバックスペースキーを押すと、文章だけが消えてタイピングの入力画面だけが表示されたままになる。ここで決定キーを押すと画面は消えるが、その押した決定キーが、主人公の目の前のイベントを発生させるスイッチになってしまい、イベントが自動的に再開してしまう。

(ゲームはRPGミニゲーム形式で、主人公がコンピュータ(NPC)の前に立って話しかけるとタイピングゲームが始まるという仕様になっている。バックスペースで文章だけが消えた後、再び決定キーを押すと、なぜか目の前のコンピュータに話しかけたという判定になってしまい、そのままイベントが開始されてしまう)

ここで自分が行ったのは「並列実行で起動する」タイマーイベントの中で「時間切れ、ゲームオーバー」という表記が出る前に、主人公を物理的に1マス↓にさげたことだ。そして「決定キーで実行する」方のイベントで処理の最後に主人公を物理的に↑に戻した。これで誰かが誤って「時間切れ、ゲームオーバー」の画面が出たときにバックスペースキーを押したとしても、再び決定キーを押せば自動的にコンピュータの判定が起こらず、問題なく元どおりの行動画面に戻ることができる。

バックスペースを押さなければ正常に機能する。だから無視してもよかったのだが、明らかに自分が認識しているバグがある以上、どうしても対処する必要があると感じた。できれば先に述べたバックスペースを押す事で文章だけが消えて入力画面だけが残ってしまうバグも直したかったが、こればかりはどうしようもなかったので諦めた。

この入力画面が強制終了できないというたった1つの問題だけで8時間以上かかった。これだけ時間をかけるくらいなら、例のサイトでタイピングのコモンイベントごとダウンロードすれば良かったかもしれない。今自分のイベントを見直してみると無駄が多く、とても完成度が高いとはいえない。

改めて自分で何かを作ることの難しさを知った。手探りの状態で暗中模索したとしても、所詮この程度のものしかできないのだと思った。自分はプログラミングも知らなければ、アルゴリズムについても詳しくない。もしそうした知識や技能を持っている人が、同じ問題に取り組んだとしたらもっと素早く的確にできていただろうとおもう。

とりあえずは完成したものの、今日は自分の知識不足を思い知った。それに1つの問題を考えすぎて精神が擦り切れた。明日はこれを少し修正して完成に持っていき、別のイベントの作成に取り組んでいく。とは言え今日で一番の難所は超えたので、明日からはリラックスして取り組むことができると思う。