人生

やっていきましょう

アクション要素の開発に行き詰った。昨日の段階では上手く行くと思っていたが、思わぬ不具合に遭遇した。

一番の問題は当たり判定だ。弾の座標と同じ場所にあるイベントIDを獲得するという処理を行おうとしていたが、常に弾のイベントIDを取得してしまうという問題があった。弾のx座標、y座標を取得しているのだから当然である。弾と被弾したイベントの座標が重なった時、弾でない方のイベントID、x座標、y座標を取得する方法を探さなければならない。しかしどうすればいいのか。

独力に限界があったので調べることにした。するとそこには解決法が分かりやすく書かれていた。

donichi-game.com

要はマップ上にあるすべてのイベントIDの座標を調べ上げ、弾の座標と一致するイベントIDを出力するという処理を行えばよかったのである。具体的には上記の通り、回数ループと変数の加算を応用すればよかった。回数ループを利用したイベントIDの検索方法は目から鱗だった。このテクニックは何かに応用できるかもしれない。

その他いくつか不具合を修正した。主人公と逆方向を向くというのは流石に処理が雑だったらしくうまくいかなかった。そこで今度は主人公の8方向に応じた方向に弾を向かせることで解決した。

弾の動きがカクカクしてキレイに飛ばない問題もあった。これは同じマップの並列イベントが悪さをしていたらしく、一方をコモンイベントに格納することで解決した?。弾が対象に当たっているのに当たった判定を返さない問題もあった。これは動作指定に【移動できない場合は飛ばす】という項目があり、これのチェックを外したことで解決した。弾の当たり判定があまりに小さいという問題もあったが、イベントの座標管理を(精密)ではなく(標準)にしたことで広く当たり判定を取ることができた。

作っている中で思ったことだが、機能ごとにコモンイベントを厳密に分割し、必要なときにイベント呼び出しをすることでコモンイベントを道具のように扱えそうだと思った。例えば先ほどのイベントでいうと【キー入力の判定】を制御するイベント、【弾の動作】を管理するイベント、【当たり判定】の処理を行うイベントの3つを越境せずに完全に分類することで、わざわざ全体を見ることなく個別のイベントだけを見れば済むようになる。これを専門用語ではモジュール化というらしい。ひとつ賢くなった。

とにかくこれでアクション部分は完成した。あとは合計討伐数を表記したり、1方向の弾丸だけでなく多様なアクションを実現すれば、ミニゲームとしては極めて面白いものができる。明日はこの部分を作りたい。