斜めの時はX,Y座標共に1ドットずつの移動って事でよろしい
でしょうか?
ANDで処理する場合は特定の条件の時に移動量を調整する
事で解決できるかと思います。
具体的には
BT=BUTTON()
IF BT AND 1 THEN Y=Y-2+((BT AND 8)||(BT AND 4))
(|記号はキーボードAの左の記号です)
上方向に移動するときに右か左も入力されていたら移動量を
減らす処理をそれぞれの方向に追加したら斜めの時はX,Y
1ドットずつの移動になりますが、これで目的の処理となりますか?
>スムージーさん
IF BUTTON() AND 1の条件が一致したときにY座標を操作
するところが2カ所有るため移動量が正しく処理されていません。
毎回BUTTON()と記述するのも長ったらしいのでIFで判別する
前にBTにBUTTON()の値を代入してから8行目を
IF BT AND 1 THEN Y=Y-2+((BT AND 4)||(BT AND 8)):SPCHR 0,508:CH=508
として10行目は削除して下さい。
9,11行目も同様にして下さい。
12,13行目は上か下の入力が有ったら移動量を減らして下さい。
十字キーという
趣旨からずれるのですが、
キャラを動かしたいという
事でしたら、スライドパッド
にしてしまえば斜めの移動の際に、
通常よりも早く動くという
事は無くなるのではないでしょうか?
一応サンプル書いときます。
@MLOOP
VSYNC 1
STICK OUT STX,STY
IF ABS(STX)>0 THEN X=X+STX
IF ABS(STY)>0 THEN Y=Y-STY
GOTO @MLOOP
これで試してみてください。
縦横移動時は2ドットずつ、斜め移動時は縦横1ドットずつ動かしたいならば
B=BUTTON()
IF (B AND 15)==1 THEN Y=Y-2
IF (B AND 15)==5 THEN X=X-1:Y=Y-1
(以下略)
のように基本通りにANDを使っても8方向の判定を行えば記述できます。
IF B AND 1 THEN ~のような省略形はどんな場合に省略できるのかを正しく理解していないと使うべきではなく基本に忠実にIF (B AND 1)==1 THEN ~と書くのをオススメします。
個人的にはX、Yの移動量を別の変数に入れておくのがオススメです。
これならば省略形が使える条件を満たせるので4つのIF文で簡単に記述できます。
@LOOP
B=BUTTON()
VX=0:VY=0
IF B AND 1 THEN VY=-2
IF B AND 2 THEN VY=2
IF B AND 4 THEN VX=-2
IF B AND 8 THEN VX=2
A=(ABS(VX)+ABS(VY))/2
IF A THEN X=X+VX/A:Y=Y+VY/A
SPOFS 0,X,Y
VSYNC
GOTO @LOOP