シューティングゲームなどのキャラクタが、斜め移動する場合、移動量が多くなる問題があります。
上下左右に移動量が1だったとすると、右斜め上への移動の場合、X座標 Y座標ともに移動量を1加えると斜めに約1.4程進むことになります。
例えると、1辺が1の正方形の対角線の長さが、約1.4になるということです。
PICO-8で、cos(0.125)で計算すると(0.125は右斜め上)、0.7071と出ます。

つまり、斜め方向の移動量が1だと、X座標 Y座標 共に0.7071加えるということになります。
「特に気にしなくていいや」という仕様ならば、それで良いのかもしれませんが、私としては対処したいのです。
そこで、斜め方向を優先してキー入力チェックをし、斜めならX座標 Y座標 共に0.7071加えました。
試しに動かしてみましたが、PICO-8の座標は整数のみを拾う為、等速直線運動にはなりません。
等速運動にするには、0.1〜0.5を加えていく必要があります。
0.7に一番近い0.5を加えて試してみましたが、斜め移動が遅いです(1と0.5では、差が大き過ぎます)。

そこで、あまり差が出ないようにする為に、斜め移動をX Y それぞれ1を加え、上下左右には、1.5を加えることにしました(1/0.7≒1.429≒1.5)。
試してみると、等速直線運動になっているし、移動量にそんなに差を感じさせません。

これが、私の考える現在の最適解です。
ということで、自機の移動処理を実装できました。
コメント