投稿
bigslope bigslope
BUTTON関数は、ビット演算を使って判定を行う方がスマートだけど、ビットとかの意味がよく分からないという人もいると思うので、自分なりに噛み砕いて説明してみる。と言うか、すでにそういう説明がいくつかあるようなので、『BUTTON関数が分からない人向け説明選手権』状態。
4そうだね
プレイ済み
返信[1]
親投稿
bigslope bigslope
とりあえず、ヘルプのbit云々の説明はすっ飛ばして、その下の方の、『各ボタンが単独で押された場合の10進数戻り値』という所を見てみよう。 1:十字ボタン上 2:十字ボタン下 4:十字ボタン左 8:十字ボタン右 ・ ・ ・ となっている。 単純に押されたボタンが1つだけなら、この数字かどうかだけを判断すれば良いが、これらのボタンは、複数同時に押される事もある。 その場合、+1、+2、+4…のように、これらの数字をどんどん足していった結果が、戻り値として返ってくる。 上と左ならば、1+4=5、更にAボタンも押されたならば、1+4+16=21、という具合。
0そうだね
プレイ済み
返信[2]
親投稿
bigslope bigslope
逆に、この戻り値から、どのボタンが押されているかを判別する為には、この足された数字を分解していけば良いという事になる。 ボタンの中で一番大きい数は、ZLボタンの4096なので、まず4096以上かどうか判定する。 (4096以上だった場合) ・ZLボタンが押されている ・戻り値から4096を引く (そうでなかった場合) ・ZLボタンは押されていない ・戻り値はそのまま 次は、判定する数を4096から半分の2048にして、同じように判定する。2048以上ならばZRボタンが押されており、その場合は2048を引く。 そして、その半分の1024、512、256…と判定を繰り返しながら引いていき、戻り値が0になったら終了。
0そうだね
プレイ済み
返信[3]
親投稿
bigslope bigslope
例として、↑、→、A、B、Rのボタンが同時に押された場合。 BUTTON関数の戻り値…569 ZL(4096)…無し。残り569 ZR(2048)…無し。残り569 未使用(1024)…無し。残り569 R(512)…有りなので512を引く。残り57 L(256)…無し。残り57 Y(128)…無し。残り57 X(64)…無し。残り57 B(32)…有りなので32を引く。残り25 A(16)…有りなので16を引く。残り9 →(8)…有りなので8を引く。残り1 ←(4)…無し。残り1 ↓(2)…無し。残り1 ↑(1)…有りなので1を引く。残り0(終了)
0そうだね
プレイ済み
返信[4]
親投稿
bigslope bigslope
サンプルプログラム。 ZLから↑まで全12ボタン、未使用(1024)1つを含めて13ボタン分判定処理を繰り返し、13個分ある配列変数に、ボタンが押されている場合は1、押されていない場合は0を入れている。 ちなみに、仮に全てのボタンが押されたとすると、1+2+…+512+2048+4096=7167になる。 ↑+↓みたいに同時に押せない組み合わせも存在するので、実際にはこの通りにはならないが、8行目の'B=7167のコメントを外すと、全部のボタンが押された状態を再現出来る。
0そうだね
プレイ済み