投稿
Smoothie ryukey-h
このプログラムは十字ボタンで動きます。これを斜めに動かすと通常2ドットずつ進むはずが4ドットで動きます。ANDを使わなければ解決しますANDを使ってでも解決できますか?あと動かしてるときに歩くアニメーションをして止まってるときは動かないようにしたいのですがどうしたらいいですか?
2そうだね
プレイ済み
返信[1]
親投稿
otta777 otta777a
動いているときに歩くアニメーションをさせて止まっているときには アニメショーンを停止する方法ですが、方向移動に有効なボタン 入力があるときは移動中、入力が無いときは停止中とします。 アニメーションの設定は停止中→移動中に変わった時に歩く アニメーションをさせ、移動中→停止中に変わった時に 歩くアニメーションを止めさせれば目的の動作が出来ると思います。
0そうだね
プレイ済み
返信[2]
親投稿
otta777 otta777a
斜めの時はX,Y座標共に1ドットずつの移動って事でよろしい でしょうか? ANDで処理する場合は特定の条件の時に移動量を調整する 事で解決できるかと思います。 具体的には BT=BUTTON() IF BT AND 1 THEN Y=Y-2+((BT AND 8)||(BT AND 4)) (|記号はキーボードAの左の記号です) 上方向に移動するときに右か左も入力されていたら移動量を 減らす処理をそれぞれの方向に追加したら斜めの時はX,Y 1ドットずつの移動になりますが、これで目的の処理となりますか?
0そうだね
プレイ済み
返信[3]
親投稿
Smoothie ryukey-h
(ToT)出来ない
0そうだね
プレイ済み
返信[4]
親投稿
otta777 otta777a
>スムージーさん 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行目は上か下の入力が有ったら移動量を減らして下さい。
0そうだね
プレイ済み
返信[5]
親投稿
otta777 otta777a
アニメの設定についてはボタン入力前のCHRの値を記憶して おいてボタン処理後にボタン入力前のCHRの値が0でボタン 入力後のCHRの値が0で無い場合に歩くアニメの設定をすれば いいかと思います。 CHRの値が0で無いときにアニメ設定をすると移動中は毎回 アニメ設定がされるため動いて見えないと思います。
0そうだね
プレイ済み
返信[6]
親投稿
いったいいったいるーとに
0そうだね
プレイ済み
返信[7]
親投稿
イーブン rein-2000
十字キーという 趣旨からずれるのですが、 キャラを動かしたいという 事でしたら、スライドパッド にしてしまえば斜めの移動の際に、 通常よりも早く動くという 事は無くなるのではないでしょうか? 一応サンプル書いときます。 @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 これで試してみてください。
0そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
縦横移動時は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 ~と書くのをオススメします。
1そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
個人的には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
1そうだね
プレイ済み
返信[10]
親投稿
Smoothie ryukey-h
おおできました!ありがとうございます。
0そうだね
プレイ済み
返信[11]
親投稿
Smoothie ryukey-h
あれ?待てよ?RPGもどきに使う用の十字移動は出来たしかしスライドパッドを使った時アニメーションはどうやるんだ?((((;゚Д゚)))))))
0そうだね
プレイ済み
返信[12]
親投稿
イーブン rein-2000
スライドパッドを使う場合の アニメ表示は簡単ですよ 動かしている間だけP=P+0.1位に して、でSPCHR 0,?+Pって しておいてPがアニメの最終地点より 大きくなったらPを0にもどす。 っていう感じです。 SPANIMの仕様が mk2の時と変わって わからなくなった時に 無理矢理思い付いた知恵です。
0そうだね
プレイ済み
返信[13]
親投稿
Smoothie ryukey-h
それを使えばアニメーションを使わなくてもいいですね。
0そうだね
プレイ済み
返信[14]
親投稿
Smoothie ryukey-h
白いところのSYとSXを入れ換えるとよく左右を向いたりよく上下を向いたりと動作が変わっちゃいますどうしたらいいですか?
0そうだね
プレイ済み
返信[15]
親投稿
Smoothie ryukey-h
すみません自己解決しました。
0そうだね
プレイ済み