トピック
ボタンの同時押し
2そうだね
プレイ済み
返信[1]
親投稿
ようすけ youslzh
それぞれのTHENを通りたいという事であれば、 IF BUTTON(2) AND #L THEN ~ IF BUTTON(2) AND #R THEN ~ と「==」ではなく「AND」に置き換えればOK! BUTTONの説明文のところに |b08|Lボタン(256) #L |b09|Rボタン(512) #R って書いてあるけど、Lボタンを押したときにBUTTONは256を返すけど、LとR同時押しすると256と512を足した768を返すので「==」が使えないというイメージ
1そうだね
プレイ済み
返信[2]
親投稿
シュナ S_S_Schneider
BUTTON命令は ボタンの同時押しに対応するため 上キー:1 (0001) 下キー:2 (0010) 左キー:4 (0100) 右キー:8 (1000) という値が 返るように なってます。 ()の内容は 2進数です。 つまり 上左を同時押しした場合 1(0001) + 4(0100) で 5(0101) を返します BUTTON() == 5 という条件でも動きますが ようすけさんの仰るとおりに 「上が押されたか?」かつ「左がおされたか?」という条件式のほうが すっきりするでしょう。
1そうだね
プレイ済み
返信[3]
親投稿
思うように動きました。ありがとうございまいた! 質問する前、 B=BUTTON(0) IF B&&#L THEN~ IF B&&#R THEN~ で試したら片方のボタンを押したときも両方押したときの動きをしたのですが、なぜのなのでしょう?
0そうだね
プレイ済み
返信[4]
親投稿
ようすけ youslzh
「&&」だと両者が「0じゃない時」にTHENに行くとなるので、 IF B&&#L THEN ~ だと、 #Lは256なので「0じゃない」 Bは何かのボタンが押されれば「0じゃない」 となるので、LボタンRボタンに限らずAボタンでもTHENに行ってしまうはず。
0そうだね
プレイ済み
返信[5]
親投稿
&&とANDってちがうんですね汗
2そうだね
プレイ済み
返信[6]
親投稿
論理演算子とビット演算子なんでそもそも違うんだなぁ 論理演算子→&&とゆかいな仲間たち、条件を組み合わせたりするときに便利。 ビット演算子→ANDとゆかいな仲間たち、2進数との相性がいいやつ。
1そうだね
未プレイ
返信[7]
親投稿
おちゃめ ochame_nako
IFというのはtrueかfalseだけで判断されています。 これはプチコン3号の場合は値が「0以外」か「0」となります。 あとB==16などの比較演算子(「==」や「>」など)を使った論理式というのは条件が成立した時に値が1、不成立の時は値が0となります。 つまり、IF B==#L THEN ~はBの値が#L(=256)の場合はB==#Lの値が1(true)となるためTHEN以下が実行されるわけです。 要するに「0以外」か「0」の状態にできれば良いわけです。
0そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
IF B==#L AND B==#R THEN ~ IF B==#L && B==#R THEN ~ このIF文はどちらもB==#Lという条件とB==#Rという条件の両方を満たした場合にTHEN以下を実行します。 比較演算子を使用した条件式(論理式)は上記のように1という値になりますが、「1 AND 1」も「1 && 1」も1という値になりこれは0以外の値であるためTHEN以下が実行されます。 つまり、ANDも&&も+や-のように計算をする記号に過ぎないということです。
0そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
ここまでのことが何のことかさっぱり分からないというのであれば複数の条件式を満たしているかを判断する場合にはB==#Lのよう比較演算子を必ずつけるようにすれANDと&&の違いを意識する必要はほとんど無くなります。 では、IF B AND #L THEN ~ とはどういうことなのかというとIF (B AND #L)!=0 THEN ~から!=0を省略したものと考えるとわかりやすいです。 このANDの計算の仕組みを理解するには2進数の知識が必要になりますが、2進数を知らなくても下記のトピックスで詳しく説明しているように「値を取り出すもの」と考えると分かると思います。 https://miiverse.nintendo.net/posts/AYMHAAACAAADVHjrpjduHA
0そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
リンク先の内容を理解すればLとRを同時に押しているかどうかは(B AND #L)!=0と(B AND #R)!=0という2つの条件を満たしているかどうかで判断ではなくIF (B AND 768)==768 THEN ~で判断(768という数字は#Lと#Rの合計値)で判断が可能なことをも分かると思います。
0そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
念のため書いておきますが IF B==#L AND B==#R THEN ~ IF B==#L && B==#R THEN ~ においてB==#Lという条件とB==#Rという条件の両方を満たす場合というのは存在しません。 つまり、B==#L AND B==#RもB==#L && B==#Rも値が0であるためTHEN以下を実行しないということです。
0そうだね
プレイ済み
返信[12]
親投稿
おちゃめさん長々とありがとうございます。でも分からないのそこじゃないぃ(;;)ゴメンナサイ てことで非公式マニュアルで論理演算子の解説を読んできました。 ANDは桁ごとに論理積してくれるんですね。それだけ分かればすっきりしました。めちゃ便利やん(´∀`) &&と変わらんやろとか思っててごめんよAND君。 (ついでにORちゃんも||と同じと思って今まで使わなくてすまねぇ) BUTTONの命令をあやふやな記憶でてきとーに使ってて本質を見逃してました(・・;)アチャー みなさん回答ありがとうございました。
1そうだね
プレイ済み