実際にSPANIMを使って移動するキャラに対するアニメーション処理をしたことがある人ならば分かると思いますが、「SPANIMの書式が難しい」というのとは別の問題も少なくないです。
例えば下記のように記述しても最初の1コマ目だけ表示されてアニメーション表示は行ってくれません。
SPSET 0,516
X=200:Y=120
WHILE 1
B=BUTTON()
IF B AND #RIGHT THEN X=X+1:ばSPANIM 0,"I",10,516,10,517,10,518,10,519,0
SPOFS 0,X,Y
VSYNC
WEND
これは、SPANIMは実行するたびに最初の1コマ目から順番にアニメーションするためです。
したがって、SPANIMを繰り返し実行していると1コマ目だけ表示するため結果として静止状態になるわけです。
では、どうするかというと1つの解決方法としてはボタンを押した瞬間だけアニメーションさせるというものがあります。
SPSET 0,516
X=200:Y=120
WHILE 1
B=BUTTON():B2=BUTTON(2)
IF B AND #RIGHT THEN X=X+1
IF B2 AND #RIGHT THEN SPANIM 0,"I",10,516,10,517,10,518,10,519,0
VSYNC
WEND
これは知っているとそれほど難しいことではないですが、初心者が自力でこれを見つけ出すのはかなり難しいかもしれません。
それに見るからに面倒くさいですね。
しかし、今回のSPANIM2ならばこんなに簡単に書けます。
SPSET 0,516
X=200:Y=120
WHILE 1
B=BUTTON()
IF B AND #RIGHT THEN X=X+1:SPANIM2 0,4,10,0
VSYNC
WEND
両者を比較してみると「SPANIM2」ならば初心者でも簡単にアニメーション処理を使ったプログラムが書けそうな気がしませんか?
(1)の方法だとこのようになります。
SPSET 0,516
X=200:Y=120
WHILE 1
B=BUTTON()
IF B AND #RIGHT THEN X=X+1:SPANIM2 0,4,10,1
VSYNC
WEND
アニメ回数を1回というのは簡単で分かりやすいし最小移動単位がマス目単位と決まっているようなRPGのフィールド画面等では有用ですが、離した瞬間にすぐには停止ができないためアクションゲームでは向いているかは微妙だし、デフォルトのアニメパターンだと停止した時(4コマ中の4コマ目)のパターンは足が開いた状態となっているため「静止した状態(足を閉じた状態)」で停止はできません。
(2)の方法だとこのようになります。
SPSET 0,516
X=200:Y=120
WHILE 1
B=BUTTON()
IF B AND #RIGHT THEN X=X+1:SPSTRT:SPANIM2 0,4,10,0
IF (B AND #RIGHT)==0 THEN SPSTOP
VSYNC
WEND
SPSTOPを使うとSPSTARTで再開できますが、こちらはすぐに停止ができる反面でどんなポーズで止まるかはボタンを離すタイミング次第です。(あとSPSTOPは"I"以外のSPANIMの効果もすべて停止するので注意)
というわけで、「ボタンを離したらすぐに止めたい」とか「止まっている時のポーズはこれがいい」というのがあれば(3)のSPCHRを使うのがオススメです。
SPSET 0,516
X=200:Y=120
WHILE 1
B=BUTTON()
IF B AND #RIGHT THEN X=X+1:SPANIM2 0,4,10,0
IF (B AND #RIGHT)==0 THEN SPCHR 0,516
VSYNC
WEND
これは、SPCHRを使うとSPANIMの"I"の効果が自動的に終了するためです。
もちろん、(3)の方法が正しいというのではなく自分が作りたいものに適合していれば(1)や(2)の方法で何ら問題はありません。
SPSET 0,516
X=200:Y=120
WHILE 1
PB=B:B=BUTTON()AND 15
IF B AND #LEFT THEN X=X-1:C=2
IF B AND #RIGHT THEN X=X+1:C=0
IF B AND #UP THEN Y=Y-1:C=3
IF B AND #RIGHT THEN Y=Y+1:C=1
IF B!=PB THEN SPCHR 0,516+C*4:SPANIM2 0,4,10,0
IF !B THEN SPCHR 0,516+C*4
VSYNC
WEND
たったこれだけで8方向移動しながらアニメーション表示ができます。
このリストはSPANIM2の動作用サンプルとして上記の公開キーでダウンロードしたプログラムに入っているため実行して確かめてみてください。
一見これはBUTTON(2)で代用ができそうですが、BUTTON(2)AND 15の値が0以外の時にパターン切り替えを行うようにすると斜め移動中に十字ボタンを離さずに左(もしくは右)を押した場合には向きと方向が一致しないという不具合が発生してしまいます。
これを解消するには離した瞬間を取得するBUTTON(3)も必要になります。そんなことをしなくても、前回と異なる十字ボタンを押しているかどうかだけで判定が可能になるため上記のプログラムの方が初心者には分かりやすいと思います。
あと!Bの「!」は論理反転(論理否定)を示していて「Bの値が0の時は1」「Bの値が0以外の時は0」になります。
IF B THEN ~ならばBの値が0以外の時にTHEN以下を実行しますが、IF !B THEN ~ならばBの値が0の時にTHEN以下を実行するということです。
8方向移動サンプルプログラムの一部にミスがありました。
4つ目のIF文となる
IF B AND #RIGHT THEN Y=Y+1:C=1
において#RIGHTではなく#DOWNです。
ただのタイプミスなので公開キーによってダウンロードしたリストは全く問題ないので安心してください。
それ以外にも何か問題があれば言ってください。
SPANIM2命令は十分なテストを行っており普通に使う限り不具合は見られませんが、それでも何らかの不具合がもしも見つかれば報告お願いします。