人生

やっていきましょう

591日目

33日前の記事に書いた「障害物の当たり判定」のバグについて一度考えなおした。当時はこの問題についてよく分かっておらず混乱していたが、色々考えていく中で解決法を見出したので一度この問題を整理したいと思う。

nihility.hatenablog.com

上記では”障害物がグラフィック上で当たる前に当たり判定が作動してしまう問題”と、”既定のルートを辿る障害物に主人公が半歩移動で下から上に接触すると当たり判定が作動しない問題”の2つを問題にしていた。当時はそれらの問題を混合していたが、これらはまったく別の問題なので今回は分けて考える。今回は後者のみを扱う。

記録は前者の解決をもって終了し、後者をウディタ側の仕様とすることでこの問題から一旦離れた。だが結局何が原因でこの問題が生じるのかということについてはまったく分かっていなかった。それゆえこの問題は放置することを選んだのだが、今回考え直してみて分かったことがある。

今回の問題は、0.5マス移動をしている障害物が、同じく0.5マス移動をしている主人公と【起動条件:イベント接触】を通じて接触した際、【謎の判定】によって障害物の移動が阻害されているにもかかわらず、【起動条件:イベント接触】が機能しないという問題だった。

この問題について混乱していたが、要はイベントの当たり判定と、イベントの移動幅が一致していないことが原因だったようだ。イベントの当たり判定が1×1、イベントの移動幅が1×1(つまり全歩移動)である場合、こうした不具合は起こらない。イベントの移動幅が0.5×0.5マス、イベントの当たり判定が1×1マスのときになぜかこうした問題が起こる(現時点ではよくわかっていない。後日改めて考えなおす)。

そこで移動幅の問題を無くすことで問題の解決を図った。つまり移動する障害物を「すりぬけ」させることによって、【謎の判定】を回避し、主人公の当たり判定に接触させることを考えた。これがなぜかうまくいった。

課題はある。障害物がまったく衝突しなくなるので、障害物同士がぶつからず、また主人公の0.5マス上での判定の場合に限り障害物と主人公がグラフィック上で多少重なってしまう場合がある。が、そこはもう妥協できる。とにかく当たり判定が機能するという点に注目すればこれで十分だと思う。

今後新たなバグが出たらと思うと不安になる。だが今はこれで妥協しておく。少なくとも判断のバグはこれで解決された。