いちばんやさしいゲームの作り方

文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ

メルマガ読者の方より「キーが押されていることを判定するのに 0×8000 と論理積を取るのはなぜか?」と質問がありまして、何かの助けになればと関連情報を載せておこうと思ったところ、訳のわからんことになっております。

MSDN によると、「最上位ビットがセットされたときは現在そのキーが押されていることを示す」とありますので、 GetAsyncKeyState() の戻り値を 32bit Windows 環境における SHORT 型である2バイトと想定し、 0×8000 で論理積を取った次第です。

ビットとか論理積に関しての解説が追いついておりませんので、理解が怪しい方は申し訳ありませんが、次のようなサイトを参照ください。

整数型とビット操作

問題は、ここを 0×80 で比較してる情報が多いことで、「あれ、勘違いしたかな?」と思って実際の戻り値を調べてみました。すると、 0xFF80 となりました。これだと 0×8000 との論理積を if 文で判定しても真になりますし、 0×80 との論理積を if 文で判定しても真になります。

あれ、何だろう、どこで勘違いしてるのかわかりません。戻り値を作るときに負数にしているのでしょうか。

Comments

たまたま見かけた
2009/07/13 19:54:17

MSDNによるとGetAsyncKeyStateの戻り値はSHORT。つまり16bitです。
そのため比較すべき値は0×8000でなく、0×0080です。

後はわかると思いますが、実際の戻り値が0×0080でなく0xFF80なのは、
GetAsyncKeyStateの戻り値を32bitの変数に代入したためかと思われます。
最上位bitがセット==負の値ですからね

たまたま見かけた
2009/07/13 20:07:35

すみません。よく考えたら0×8000で2バイトでした。アホか俺は
上のコメントは無視してください。申し訳ありませんでした。

Byerkut
2009/07/13 20:14:01

いえ、とんでもありません。
コメントいただいてありがとうございます。

私も同じように考えてしまいまして、
「あ!間違ってる!」と「あれ?間違ってるん?」を行き来している次第です。
自分は、この関数をまだ誤解している部分がありそうです。

Contributions




Trackback URL

メルマガ登録・解除
 
挫折不可能!初級ゲームプログラミング完全マニュアル
RSS track feedいちばんやさしいゲームの作り方 カウンター
ブログSEO対策:track word あわせて読みたい SEO STATUS