バグ イッコ ツブス!

printhによる変数の内容をテキストファイルに書き出し PICO-8
printhによる変数の内容をテキストファイルに書き出し

現在制作中のゲーム「Magic Line」、MI68で展示する以前から見つかっていたバグの原因を突き止めて修正しました!

プログラムコードを書いては実行を、取り憑かれたかのように何度も繰り返しています。

そんな時、魔法使いがボタンを押しながら移動すると、
線がない所を通ると、新たな線を引き
線がある所を通ると、その線が消える

とルールを定めて、コードを書きましたが、

「ええっ! 何にもしていないのにバグが出た!」

「触ってないのに、パソコンが壊れた!」

「SNSで絡んでないのに、ブロックされた!」・・・・・w

そんな身勝手な気持ちを(?)抑えつつ、実況検証に数日前から取り掛かりました。

こんな時に頼りになるのが、printh命令のオプションで、変数の中身をテキストファイルに書き出せる機能です(コンソールに表示もできるよん)!

printh("出力するテキスト文字列", ["ファイル名"], [上書きするか(bool値)], [デスクトップに保存するか(bool値)] )

これで、まずはX座標に絞って(縦でも横でも同じような不具合が起こる)、ラインの座標を出力させてみると、横移動しかしていないのに同じ座標を記録していることがわかりました。

ここで不具合が起こる条件の尻尾を掴みました(と思っている)!

次に、その同じ座標が記録された時の関係する変数を幾つか同じタイミングで出力してみると、魔法使いのX座標も同じ状態となっていることがわかりました。

「停止したら座標更新は されないのに、なぜ移動中に同じ座標になってしまうのか?」を考えて、該当する移動箇所のソースコードを見てみると、移動方向の変数がnil(中身が無いの意味)の時は、移動せずに止まる処理を実行するようにしていたのですが、コントローラー操作ならありえないのかもしれませんが、キーボードだと右、左、右、左、右、左、右、左、右、左と細かく押すと、その間の押されていない時を読み取ったようで、移動方向の変数がnilとなり、移動はしないが、昔の座標と今の座標を記録して、違っていたら線を引く処理を行っていたため、
移動はしないが線を引く ≒ 同じ座標に線を引く ≒ 線を消す処理が新たに線を引く
という風になり、見た所は一本線ですが、二重に線を引き、ある程度の長さになったために囲んだと判断して、囲み魔法が発動してしまったということです。

そこで、移動方向の変数がnilの場合は、昔の座標と今の座標をアップデートして同じ座標にすることで、昔の座標と今の座標が違っていたら線を引く処理を飛ばすことで、解決しました。

その後、ソースコード観ていたら、
移動処理は、移動方向の変数がnilじゃなかった場合に行うので、移動処理の中に線を引く処理を入れたら良い
事に気付いて、修正。

トークン数は追記が無く移動しただけなので、変わらず(5728/8192)めでたしめでたし。

で、結果。

こちらが、デバッグ前の不具合の現象を記録しました。

引いた線が戻っても消えず囲んだことになってしまうバグ
引いた線が戻っても消えず囲んだことになってしまうバグ

で、デバッグ後となります。

戻っても線が残ることはなく、ちゃんと消える
戻っても線が残ることはなく、ちゃんと消える

左右に細かく動きますが、線はちゃんと消えています。

で、続きのレベルデザインと音入れを進めていきます。

コメント

タイトルとURLをコピーしました