人生

やっていきましょう

昨日は相手を直接吹っ飛ばす演出の不具合を解決した。今日は飛び道具を使って相手を吹っ飛ばす演出を完成させる。一歩前進を何度か繰り返すのではなく、1度ジャンプを行うことで工程数を減らすという試みだった。飛ばされた敵の着地点はx,y座標を乱数で決める操作を行うことで、より躍動感のある演出が生まれるということだった。

実際、その通りに機能した。しかしここで問題が起こった。工程を減らしているにもかかわらずスコアが正常にカウントされないのである。本来相手をぶっ飛ばした瞬間スコアを管理する変数が1加算され、それが画面上に表示されることになっていた。実際直接ぶつかって発動させるイベントの方ではそれがうまくいっていた。しかし飛び道具にすると、通常のスコアよりもいくつか余分な数値をはじき出す。

自分ははじめ工程数の問題かと考えていた。並列実行によるイベントは不具合を起こしやすく、また複雑な操作を行っているため正常に数値が反映されていないのではないかと考えていた。しかし問題はまったく別のところにあった。

結論を言うと、一度飛ばして削除したはずの敵のイベントIDを、再び参照してしまっていることが問題だった。そもそも自分は、敵を吹っ飛ばすとき乱数で指定した距離に敵を飛ばして【セルフ変数0に1を代入する】という形でイベントを消すという演出を行っていた(敵のイベントの起動条件がセルフ変数0=0の場合なので、1を代入するとマップからイベントが消えるという仕組みである)。

しかしここで勘違いをしていたのだが、セルフ変数0の値が1であったとしても画面上からそのイベントが消えるだけで、イベント自体はまだそこに置かれているのである。その証拠に、自分が飛び道具をなにもない場所に玉を出したら勝手に数値が増えていった。そこには吹っ飛ばされて透明になったイベントが着地していたのである。

そこで敵のイベントにページを1つ追加し、その起動条件をセルフ変数0=1としたものを作った。ここには何も書かないが、唯一敵の影をデフォルトの影にだけ戻した。この影は重要NPCを弾丸でぶっ飛ばして進行不能にさせないために利用していたものだ。この一般的な影を影1、ぶっ飛ばせる敵の影を影2としたとき、当たり判定の条件のひとつに影2である場合を追加することで無事影2のイベントだけをぶっ飛ばせるようになるというわけである。

これを利用して、吹っ飛ばす前の敵の影を影2、吹っ飛ばした後の透明になった敵の影を影1とすると、仮に弾丸の座標と吹っ飛ばして透明になった敵の座標が一致していたとしても条件に弾かれて当たり判定が発動することはない。実際これをテストしてみたところ、何度試してもそこにあるイベントの数だけのスコアをはじき出した。バグは解消されたのである。

ようやくここの開発に終わりが見えてきた。あとは適当に敵を配置して、それらしい演出を作れば完成である。