今回もPICO-8スネークゲーム「ピコニョロ」の話です。
カエルを食べて、ヘビの体が膨らんでいる時に、shortアイテムを取ると、ヘビの膨らみのキャラクタパターンが、一瞬体の外で表示されてしまう不具合を見つけました。
それでは、「論より証拠」、「論よりRUN」で実行結果をキャプチャしたので見てください。
デバッグの為、体のパーツに番号を振って、体を透明化し、パスを描画しています。
体の膨らみが、1番の頭からどんどん胴体へ動いていきながら、小さくなっているのが わかりますか?
食べたカエルが消化されていくアニメーションとして実装しましたが、体の5番目の次に一瞬体の外で表示されています。
得意の(?)printhデバッグを試みて、原因を確定しました。
原因は、消化アニメーションは、胴体の1〜6番目の位置まで表示するのですが、途中でshortアイテムを取ると、胴の長さは5になって、6番目の胴は無くなってしまうのに表示させようとするから、体の外に表示されてしまうのです。
しかし、shortアイテムを取ると、パスと体の長さを5になるように配列を削るので、配列(テーブル)の範囲外にアクセスしようとすると、「アクセスした内容はnilだ」とエラーになるはずなのに、なぜ表示されてしまうのかが、不思議です。
そして更に調べてみたら、パスの配列は短くなった分を消していたのですが、体の配列は消していないことに気付きました(体の長さを表す変数だけを5にしていました)。
それで、短くなっても体の配列は消えていないから、体の外で表示されてしまうのです(こちらも修正しておきました)。
これで、このバグは取り除かれました、めでたしめでたし(?)。
次は、「カエルの出現数が増え過ぎるとステージが進まなくなる」不具合を直します。
コメント