投稿
Kirin Kirin-3DS.WiiU
BUTTON命令がよく分かりません。 もし A ボタンが 押されたら これを 表示する と入力しようとして BA=BUTTON(2,16) IF BA THEN PRINT という形の文を書いたのですが、上手くいきません。どこに間違いがあるのでしょうか?
2そうだね
プレイ済み
返信[1]
親投稿
ねこはち neko80001
BA=BUTTON(2) IF BA AND 16 THEN PRINT "これでいいとおもいます"
0そうだね
プレイ済み
返信[2]
親投稿
ゆうたん yu-tan-sama
BUTTON(2,16)これが間違い 括弧の中は判別したいボタンではなく、取得の仕方です 細かいところは公式の命令表を参照してもらうとして とりあえずBUTTON(0)としてみましょう そうすれば今押されてるボタンが取得でき、下+Aが押されてる場合、2+16の数字が返ってきます
1そうだね
プレイ済み
返信[3]
親投稿
Kirin Kirin-3DS.WiiU
なるほど。ありがとうございます!
0そうだね
プレイ済み
返信[4]
親投稿
おかっぺ Japanese_WASABI
@LOOP PRINT BUTTON(2) GOTO @LOOP
0そうだね
プレイ済み
返信[5]
親投稿
らいち zero120802
BUTTON命令はその瞬間に押されてる(押した)ボタンに対応する数値を返します。 なので1回BUTTON命令を書いても何も起きません B=BUTTON(2) これでBの変数に押されたボタンの数値を代入しますかっこの中の数値はオプションで命令表見ればわかります IF B==16 THEN 処理 これでボタンの数値が16だったら(16はAボタンなのでAボタンが押されたら)その後の処理を実行させます あとはこれを無限ループさせるだけです。なお複数のボタンを押した場合は押されたボタンの数値の足した合計が返ります
0そうだね
プレイ済み
返信[6]
親投稿
基本的な考え方は合っていると思います。 BUTTON関数の2つ目の引数は、ほかの3DSのボタン状態を調べるものなので、この場合は、指定する必要はありません。 BUTTON関数はユーザがボタンを押すまで待つ機能はありません。そのため、プログラムで待ち合わせをする必要があります。たとえば、以下のようにします。 REPEAT ' 無限ループの最初 WAIT '1フレーム待つ(VSYNCでも可) BA=BUTTON(2) ' ボタン情報読み取り IF BA AND 16 THEN BREAK ' Aボタンが押されたらループを抜ける UNTIL FALSE ' 無限ループの最後(TRUEにならないので抜けられず無限ループになる) PRINT "Aボタンが押されました"
0そうだね
プレイ済み
返信[7]
親投稿
Kirin Kirin-3DS.WiiU
ということは @LOOP B=BUTTON(2) IF B==16 THEN PRINT "EXAMPLE" ENDIF IF B==16 THEN GOTO @NEXT ELSE GOTO @LOOP と書けば良いのでしょうか?
1そうだね
プレイ済み
返信[8]
親投稿
こうやま kouyama1967
@LOOP B=BUTTON() IF B!=16 THEN GOTO @LOOP PRINT "EXAMPLE" と書いてもいいですね。もっと短く出来るんですが、これ以上短くすると、かえってややこしくなるので、簡単になる所で止めておきました。
0そうだね
プレイ済み
返信[9]
親投稿
3行目のENDIFは、不要です。ENDIFは、IFの条件が真のときに実行する処理が複数行のとき、THENのすぐ後で改行して、処理を書き、IF文の終わりをプチコンに指示するためのものです。
0そうだね
プレイ済み
返信[10]
親投稿
おかっぺ Japanese_WASABI
折角なので、別の観点のアドバイス。 BA=BUTTON(2,16) を実行すると、Out of range in SLOT:LINE(BUTTON) と表示されるはず(SLOTとLINEは、それぞれプログラムスロット、プログラム中の行をあらわす数値) Out of range(範囲外)と言うことから、引数(命令に渡す数値や文字など)が、指定できる範囲を越えている、と理解して、キーボード右上の?ボタンから、BUTTON命令の説明(特に引数の説明)をよく確認する。 と言うアプローチで僕は問題解決を考えています。
1そうだね
プレイ済み
返信[11]
親投稿
Kirin Kirin-3DS.WiiU
?の説明では理解できなかったのでこちらに質問させて頂きました。みなさんご回答ありがとうございます!
1そうだね
プレイ済み