Windows 8 で デスクトップアプリケーションを作成中において、、、
Windows 8 になって革新的で分かりやすい技術といえば・・・・
タイル状のUI
タ ッ チ パ ネ ル。
コレですね。
Windows 7 が出た時と違い、スマートフォンやタブレットが復旧しまくったおかげで
ユーザーのタッチパネルへの抵抗が減り、
メーカーもタッチパネル対応のディスプレイをどっきゅんどっきゅん出してます。
何時かは
”タッチパネルで女の子にお触り!
イチャイチャんふんふ しようっ!☆☆( R18 )☆☆”
というゲームが出てくるのではないかと今からワクワクと鼻血が止まらなくなっております。
やっぱり今の時代、
デスクトップでもタッチでゲームを作成したい所です。
マウスと違い、
・マルチポインタ
・直感的な操作
が可能!!
そして、スマートフォンと違い
ハイスペック、大画面でゲームや操作ができます。
そしてキーボードも同時に操作が可能。
夢が広がりますな!!
未来のエロゲーは安泰じゃ!!!( `ハ´)
で、
開発中にタッチイベントの取得に関して迷いに迷って爆発して
(^ω^)ペロペロ したので、書き留めたいと思います。
*************************************
*************************************
【タッチイベント】
まず、Windows 8 だと、、、
取り敢えず
ドライバインストールや特別なことをしなくても従来のアプリをタッチで操作出来ます。
ちょっと驚きました。
画面をタッチして離したら
マウスのイベントである
WM_LBUTTONDOWN と
WM_LBUTTONUP が呼び出されてやがります。
『へー! タッチがマウスの代わりになるのか!
じゃあ従来の方法のままでいけんじゃーーん!!』
ウルセー!!(((((;`Д´)≡⊃)`Д)、;'.・
まぁ、そうもうまくいくはずがなかろうみとこうもんですね。
まず、↑で
『 画面をタッチして離したら
WM_LBUTTONDOWN と WM_LBUTTONUP のマウスイベントが呼び出される』
と書いてますが、
この通りで、
画面をタッチした時に WM_LBUTTONDOWN イベントは呼び出されない。
画面を話した時、またはタッチした指を動かした時に
WM_LBUTTONDOWN → WM_LBUTTONUP
や
WM_LBUTTONDOWN → WM_MOUSEMOVE
が順に呼び出されます。
つまり、画面にタッチして、動かさず、離さずの場合、
なーんにもイベントがプロシージャに来ません。
これ・・・
超悩みました・・・・
タッチした時に何も起きないので
!?!?!?!?!?(゚д゚)?!???!!??
となり、
ユーザーの中にはもちろんそれに対して疑問を持つ人がいるので
どうにかしなければならないと躍起になりました。
残念なことに、まだ Windows 8 の情報が少ないのか
ネットに中々情報がない(´;ω;`)
で、半ば諦めかけた所、 MSDN に情報がありました!!
【 (URL) Message 】
英語だわ- 超英語だわ-
でも、なんとなく分かりますしコチラにはグーグル先生が付いているので大体解決しました!
まず、タッチされた時には
WM_POINTERDOWN メッセージが、
タッチアップの時は
WM_POINTERUP メッセージ、
タッチして動かしたときは
WM_POINTERUPDATE メッセージがプロシージャに来るそうです。
後のメッセージは使いたい人が使う感じ。 基本はコレ。
あと、嬉しいか嬉しくないかはわかりませんが、
デフォルトでマルチタッチ対応らしく
同時に ぶわっっと画面にタッチした場合、
タッチした指の本数分 WM_POINTERDOWN メッセージが来ました。
しかし!!
今回作ってるのはマルチタッチ非対応・・・(´;ω;`)
マルチタッチ対応させるとイベントが複数呼び出されて表示がおかしくなる・・・
普通はマルチタッチを考慮した上で開発すべきでしょうなぁ。。
で、
どうにかマルチタッチを非対応にしたいと思い色々と検索。。。。
なんかポイントした情報を取得できるやり方が↓のサイト様に載ってた
【 (URL ) HEY! English!!! 】
【 (URL) GetPointerInfo 】
【 (URL) PointerInfo 構造体 】
これがですねー 64bit アプリケーションだと動かなかったんですわ-
よくある
未解決のシンボル うんたらなんたら
おそらくは ライブラリが足りないのだろうと思いますが、よくわからんー
これで色々とポイントした情報が取得できそうなんですが・・・・
こちら、
まだ32bitでは試してないので、32bitで色々とやった結果を後日また書こうと思います。
なので今回は他のやり方を探してみました。
あ っ た ( ゚д゚ )
【 (URL) WM_POINTERDOWN 】の下の方に怪しい記述を発見!
↓ これ
IS_POINTER_PRIMARYBUTTON_WPARAM
PRIMARY・・・ 最初!( ゚д゚)ハッ!
これや!! ワイみつけたったで!!
と、半信半疑で実行してみたら・・・
できた。
つまり、こいつに
wParam を入れたら 最初のタッチイベント情報のみ true を返すっぽい
しかも嬉しいことに、
後から指をタッチして動かしたり離したりしても
最初の指が画面にタッチされてる限り false を返す。
true を返すのは常に最初にタッチした指に対してのみ。
便利すぐる・・・////
いやはや、なんとかこれでシングルタッチ対応が出来ました。
後は、
Windows 7 からあった、 ”ジェスチャーの対応” とかもあるみたい。
ピンチアウト、インとかの指の動きを一々自分で解析しなくても
ある関数に通すだけで、 マイクロソフト が決めている動きならば、『~のジェスチャーですよ-』と返してくれるらしい。
これを組み込んだら簡単に楽しいゲームが作れそう。
今回はたまたまシングルタッチ対応だったので、マルチタッチでゲーム作りたい!!
作りたいよ!!!
現在、仕事の関係で23インチのDELL製タッチパネルを使わせてもらってます。
正直とても良い・・・(u_u*)
すんげー綺麗だしタッチ反応も良い。
マルチタッチは10本まで対応とスマホの比じゃない。
そして画面がでかいことによる迫力がパない。
『windows 8 でタッチ?www にわかかよwww』 と思ってるみなさん。
これ、デスクトップでもタッチの未来が来ますよ。
タッチパネル対応のアプリケーションが充実してきたら明らかにマウスより使い勝手良くなる。
まずタッチパネルだったらペンタブ要らないし。
オススメしますよタッチ可能ディスプレイ!!!
という、宣伝です。 はい。
【結論】
お触りゲーはよ!!!