■ 新・ゲーム開発講座 |
■ へっぽこプログラミング入門♪ |
■第31夜:マウス入力を拾う 今回はマウス入力を拾うための仕組みを作ります。ここで目指すのはゲーム中で「選択肢」を選ぶ処理なのですが、ちょっとボリュームがありそうなので前哨戦としてマウス入力を拾う部分だけ作ろう、という次第です。今回はスクリプトコマンドの作成ではないのでちょっとだけいつものパターンから離れてみましょう。 マウスが動いた、左ボタンが押された・・・などの情報は、イベントメッセージとしてWindowsのシステムから常に降ってきています。このメッセージはイベントハンドラ (今回作っているシステムでは Win_Proc() がそれに相当します) 内で捉えることが出来ます。主なメッセージは以下のようなものです。 |
WM_MOUSEMOVE :マウスが移動した WM_MOUSEWHEEL :マウスホイールが回った WM_RBUTTONDOWN :右ボタンが押された WM_RBUTTONDOWN :右ボタンが離された WM_RBUTTONDBLCLK:右ボタンがダブルクリックされた WM_LBUTTONDOWN :左ボタンが押された WM_LBUTTONDOWN :左ボタンが離された WM_LBUTTONDBLCLK:左ボタンがダブルクリックされた |
・・・しかしまあ、これを全部モニタしていたら面倒ですから(笑)、ここではホイール機能とダブルクリックは除いて、単純な左右ボタンのON/OFFとマウス座標のみ追いかけることとしましょう。ノベルやADVではそれで充分、と割り切ります(竹を割ったような性格 ^0^)。 ■マウス情報構造体 |
typedef struct _Mouse_stat {
|
↑ここで、メンバ変数の中にタイマーみたいな time_ofなんとか という変数がありますが、これは時刻をメモしておくものです。いまは必然性がないので放っておきます(笑) ■初期化 |
_Mouse_stat Mouse_stat; //グローバル変数として記述 void init_Mouse_stat()
void init_game()
|
■イベントハンドラ内部 イベントハンドラ内の記述はとりあえず以下のようにします。 |
LRESULT WndProc(HWND hwnd,UINT msg,WPARAM
wprm,LPARAM lprm) {
} |
以前から WM_LBUTTONDOWN メッセージはさばいて来ましたが、今回はボタンのON/OFF、マウスの移動まで入っているので少々賑やかです(笑)WM_LBUTTONDOWN:
の古い記述の後に、システム時間の取得を行ってメモしていますがこれはまだ気にしなくて結構です(右クリックメニューのあたりで初めて使う予定
^^)。今は、マウス関連のどのメッセージの部分からも goto 文で飛んできている SET_MOUSE_STAT:
以下の3行が重要ですので覚えておいてください。
ここではシステムから降ってくる汎用パラメータ wprm、lprm の内容をマウス構造体 Mouse_stat に代入しています。マウスイベントが発生したとき、wprm にはボタンの押下げ状態が、また lprm には座標が入っているのです。ただし、汎用パラメータは2つしかないので、座標はXとYが合体した形で格納されてきます。それを分離しているのが LOWORD()、HIWORD() で、32bitの lprm から下位16bit、上位16bitをそれぞれ Mouse_stat.xpos , Mouse_stat.ypos に代入しています。 さあ、これだけできちんとマウスのステータスが認識できるでしょうか。ためしに↓こんな表示関数を作って Mainloop 内で回してみましょう。ソースはこちらです。 |
void Disp_Mouse_info() {
|
さあ、これでマウスを使った処理もそれなりに記述できる下地が出来ましたね♪ 次回はいよいよ選択処理です。 |