人生

やっていきましょう

ついにアクションギミックで生じていたバグを完全に消滅させた。原因は複数ありそれらが複雑に入り組んでいたが、ひとつひとつ調べていくうちに全体像が掴めてきた。

今回の開発で生じていた問題は、敵を1体倒せばスコアが1点入るというシステムがうまく機能しなかったところにあった。マップには100体配置していながら、実際には102点や107点といった数値を返していた。どこかのイベントで、余分にポイントを加算してしまっていたのだろう。しかしその原因がこれまでまったく分からなかった。

しかし今回分かったことだが、最も影響を与えていたのは座標の取得形式だった。座標を変数として代入する際に(標準)と(精密)の二つを選ぶことができるのだが、(標準)を選んでしまっていたことが問題を引き起こしていた原因であると分かった。(標準)は1マスをひとつの単位として、(精密)は0.5マスを単位とする。したがって(精密)の場合では0.5マス分のズレがある場合でも、(標準)の基準では同じマスであると判別する。そしてそのズレを同値と判別したことによって座標の重複が起こりやすくなり、結果としてそれが動作の重複に繋がったと思われる。

はじめ自分は(標準)で座標を取得することで弾の当たり判定を広く取れるから便利だと考えていた。確かにそのような利点はあったが、もしそうするならば主人公の移動できるマスを1マス、すなわち(標準)の判定基準に合わせる必要があった。しかし現時点でのキャラクターの歩幅は0.5マスであり、座標は(精密)の判定に基づいている。キャラクター動作が(精密)でありながら、判定が(標準)といういびつな状況では不具合が生じやすい。

一度座標取得に関する指示のすべてを(精密)に置き換えた。すると今度は問題なく機能した。おそらくこれで解決したように思われる。

改めて思ったが、軽い気持ちでこんなイベントを作るべきではなかった。アクション要素は実現が難しく、マップイベントで完結させるのはもっと難しかった。次にやるとすれば飛び道具をマップイベントではなくピクチャで行う方がいいだろう。そうすれば並列イベントとの衝突も起こらなくなり、当たり判定もピクチャのみで考えればよくなる。とはいっても、またそれはそれで問題が起こるかもしれないが。