SPCLRされてる可能性もありますが、仮にそうだとしても
CALL SPRITE
の時点で呼び出されないと思うので、それ以外の場所で呼び出されてる可能性もあると思います。
エラーが出ないようにしたいだけならSPOFSの直前に
IF SPUSED(N)==0 THEN RETURN
で直るとおもいます。
とりあえず自力で作ってみる。
var _cnt,_stick ’前フレームの情報
def stick1 time out x,y
var sx,sy:x=0:y=0
stick out x,y
if x||y then
if _stick==0 then ’倒された瞬間
x=sx:y=sy
_cnt=time
else ’倒され続けたとき
_cnt=_cnt-1
if cnt==0 then x=sx:y=sy
endif
_stick=1
endif
end(未検証)
なので、「スティックが触られたなら、スティックの値を返す」という処理にしたいです。
その「スティックが触られた」ことを判定するのがABS()です。
ABS()を使うとさっきのDEFは、
def bstick out x,y
var sx,sy
if button() and 1 then y=-1
(省略)
stick out sx,sy
if abs(sx)>=0.5||abs(sy)>=0.5 then
x=sx
y=sy
endif
end
になります。(多分夢の中のやり方とは違います。)
えーっと。
十字ボタンとスティック両方が操作されたときのことを考えると、後に処理された方が優先されます。
ただ、スティックの方を優先させたいとき、
DEF BSTICK out x,y
if button() and 1 then y=-1
(省略)
stick out x,y
end
とすると、ボタンに反応しなくなります。
(続く)