我、_update60()の動きを知る

公式マニュアルの_update60()の所 PICO-8
公式マニュアルの_update60()の所

私、恥ずかしながら2016年の3月にPICO-8を購入して使っていますが(9年以上使っている)、今回初めて_update60()の挙動を知りました。

知ったキッカケがありまして、_update60()でカウンターに+1する命令をして、_draw()でそのカウンターに2で割ったあまりが0ならば表示するようにして、細かい点滅エフェクトを実装していたのですが(敵のナイトの昇天パターンです)、ある時から点滅ではなく、表示されないようになったことに気づきました。

printh()命令で、_update60()と_draw()の時のカウンターの内容をコンソールに表示させてみました。

すると、_draw()時のカウンターが1、3、5、7、9・・・・と奇数だけ表示されるのです。

また、よく見てみると、_update60()が2回実行されたあと、_draw()が実行されるのを繰り返しているのにも気付きました。

「ええっ!!何で_update60()が2回連続で実行されているのだろう?カウンターアップの命令が2回実行されているということは、そういう処理になっているということか?」と、コードをトレースするも、1回キリの実行です。

色々と試して解析してみましたが、問題の原因は突き止められず、時間は進み、お酒は減り・・・・。

酔っ払った勢いで、ChatGPTに愚痴をこぼしてみると、「はい、それはPICO-8の仕様通りの動作です。
_update60() が 2 回、_draw() が 1 回実行される、というのは正常です。理由を以下に詳しく説明します。」と、しれっと言うではないですか!?

この返答に酔いも一気に覚めましたよ!

「処理が多い場合、_draw()の前に_update60()が数回実行される場合がある」とPICO-8の公式マニュアルにも書いてあるのを発見!

公式マニュアルの_update60()の所
公式マニュアルの_update60()の所
公式マニュアルの_update60()の所(和文)
公式マニュアルの_update60()の所(和文)

ガーン!

勝手に処理が重かった場合は、数フレームにわたり、_update60()と_draw()が対で実行されると思っていました、私。

こりゃ、「_update60()でカウンター操作したものを_draw()でチェックしたら、不都合な場合が出てくるわけだ」と言うことです。

そうなっても良いように(妥協して)、対応できるようにしました。

今回の場合では、カウンター%2==0 というチェックを カウンター%4>=2にして実現させました。

みなさんも その様に勘違いしていませんでした??私だけ?

気を取り直して、進めます。

コメント

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