4.動かしてみよう

サンプルでは赤字の箇所で動きに関する命令を行っています。



イニシャルルーチンやメインルーチンが呼び出されるとき、
Xレジスタに スプライトのインデックス番号が代入されます。
スプライトが関係するRAM・レジスタをさらっと見てください。 $B6,xはそのスプライトの水平方向速度になります。
ここに値F0を代入していますので、このスプライトの水平方向速度はF0になります。
なお垂直方向速度は$AA,xです。
JSL $01802Aは、スプライトの速度に基づいて、実際にスプライトの座標を動かす関数の一つです。
この関数を実行することで、サンプルスプライトは左方向に移動することになります。
速度の値と、実際に動くスピードの関係は下の図を見てください。



水平方向速度の場合、01〜7Fでは右方向へ動き、値が大きいほど早くなります。
10で、1フレームに1ドットずつ右に動きます。
80〜FFでは左方向に動き、値が小さいほど早くなります。
F0で1フレームで1ドットずつ左に動きます。
垂直方向速度の場合、01〜7Fでは下方向へ動き、値が大きいほど早くなります。
10で、1フレームに1ドットずつ下に動きます。
80〜7Fでは上方向に動き、値が小さいほど早くなります。
F0で1フレームで1ドットずつ上に動きます。

サンプルの場合、絶えず左側に移動しています。
スプライトの速度に基づいて、実際にスプライトの座標を動かす関数にはいくつか種類が有ります。
JSL $01802A
$B6,xと$AA,xの値に基づいて、x方向とy方向にスプライトを移動します。
また、$AA,xの値を増やし、重力による加速をつけます。
JSL $018022
$B6,xの値に基づいてx方向にスプライトを移動します。
JSL $01801A
$AA,xの値に基づいてy方向にスプライトを移動します。
天井や地面も無視してそのまま進みますし、$AA,xの値も変更されません。
JSL $019138
動かずにその場に留まります。
しかしオブジェクトと反応し、$1588,xの値も更新されます。