修正したけれど・・・

画面にゴミが出てしまう問題 PICO-8
画面にゴミが出てしまう問題

今回もPICO-8スネークゲーム「ピコニョロ」の話です。

カエルを食べて、ヘビの体が膨らんでいる時に、shortアイテムを取ると、ヘビの膨らみのキャラクタパターンが、一瞬体の外で表示されてしまう不具合を見つけました。

それでは、「論より証拠」「論よりRUN」で実行結果をキャプチャしたので見てください。

おわかりいただけただろうか?その1
おわかりいただけただろうか?その1
おわかりいただけただろうか?その2
おわかりいただけただろうか?その2

デバッグの為、体のパーツに番号を振って、体を透明化し、パスを描画しています。

体の膨らみが、1番の頭からどんどん胴体へ動いていきながら、小さくなっているのが わかりますか?

食べたカエルが消化されていくアニメーションとして実装しましたが、体の5番目の次に一瞬体の外で表示されています。

得意の(?)printhデバッグを試みて、原因を確定しました。

原因は、消化アニメーションは、胴体の1〜6番目の位置まで表示するのですが、途中でshortアイテムを取ると、胴の長さは5になって、6番目の胴は無くなってしまうのに表示させようとするから、体の外に表示されてしまうのです。

しかし、shortアイテムを取ると、パスと体の長さを5になるように配列を削るので、配列(テーブル)の範囲外にアクセスしようとすると、「アクセスした内容はnilだ」とエラーになるはずなのに、なぜ表示されてしまうのかが、不思議です。

そして更に調べてみたら、パスの配列は短くなった分を消していたのですが、体の配列は消していないことに気付きました(体の長さを表す変数だけを5にしていました)。

それで、短くなっても体の配列は消えていないから、体の外で表示されてしまうのです(こちらも修正しておきました)。

これで、このバグは取り除かれました、めでたしめでたし(?)。

次は、「カエルの出現数が増え過ぎるとステージが進まなくなる」不具合を直します。

コメント

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