ページ 11

マウスの移動認識

Posted: 2012年5月23日(水) 19:28
by syorokuirai
はじめまして
初心者質問ですがよろしければ回答いただきたいです

いきなり本題に入り、申し訳ないです
DXライブラリでマウスポインタの座標を取得し、ゲームに利用することは出来ますが
プレイヤーがマウスをどう動かしたのかという情報を得ることは出来ないでしょうか
つまり、マウスポインタではなく、マウスがどういう命令を出したのかということが知りたいのです

DXライブラリのサイトに載っているマウスポインタの座標を得る関数を使用しようかと思うと
マウスポインタが画面最上部まで移動してしまった場合、ポインタはもう上方向に移動することが
できませんから、ユーザーがマウスをどう動かしたのかという情報は得られません

DXライブラリが使えないのであれば小6以来にjavaの勉強でもしてみようかとも思っています
(javaにもそんな関数なかったら駄目なんですが)


よろしければ、ご回答よろしくお願いします

Re: マウスの移動認識

Posted: 2012年5月23日(水) 19:32
by syorokuirai
今、思ったんですが
マウスポインタの座標がちょっとでも動いたら、画面の中央にポインタを移動させる
プログラムにしてみたら、できないでしょうか?
あ、でもマウスポインタの座標を指定させて移動させる方法を知りませんでした


もう一つ質問したいのですが、java、C言語それぞれに
ポインタの座標を操作する関数はありますか?

Re: マウスの移動認識

Posted: 2012年5月23日(水) 19:59
by h2so5
syorokuirai さんが書きました: DXライブラリでマウスポインタの座標を取得し、ゲームに利用することは出来ますが
プレイヤーがマウスをどう動かしたのかという情報を得ることは出来ないでしょうか
つまり、マウスポインタではなく、マウスがどういう命令を出したのかということが知りたいのです
一定時間ごとにマウス座標を記録していけば、どのように動かしたのか知ることができます。
syorokuirai さんが書きました: もう一つ質問したいのですが、java、C言語それぞれに
ポインタの座標を操作する関数はありますか?
ありません。
マウスポインタを操作する関数はDXライブラリの機能(Win32APIの機能)であり、
C言語の機能ではありません。Javaについても同じことが言えます。

Re: マウスの移動認識

Posted: 2012年5月23日(水) 20:02
by nullptr
補足的になりますがDXライブラリを使う場合はウィンドウプロージャを操作できませんのでオンクリックやアウトクリックを使う場合はDXライブラリの関数を利用して自身で実装するしか無いと思います。

Re: マウスの移動認識

Posted: 2012年5月23日(水) 20:24
by syorokuirai
>>新月さん
すいません まだまだ初心者なので外来語がよめませんでした
h2so5 さんが書きました:一定時間ごとにマウス座標を記録していけば、どのように動かしたのか知ることができます。
それだと、マウスポインタが画面の最上部まで言ってしまった場合、
ポインタがそれ以上、上にいくことが出来なくなってしまいます
そうなると、プレイヤーが上方向に命令を出したか否かが分からなくなってしまいます
と思うのですが  どうでしょうか
h2so5 さんが書きました: ありません。
マウスポインタを操作する関数はDXライブラリの機能(Win32APIの機能)であり、
C言語の機能ではありません。Javaについても同じことが言えます。
javaを使うにしてもwinAPIのおぞましいプログラムを覚えなくてはいけないのですか・・・
今は触らないでおくことにしました

Re: マウスの移動認識

Posted: 2012年5月23日(水) 21:02
by h2so5
画面の中央にポインタを戻しながら移動量を計測するのが簡単だと思います。
マウスポインタの座標を移動させる関数はDXライブラリのリファレンスに載っていますので、そちらを参照してください。

Re: マウスの移動認識

Posted: 2012年5月23日(水) 21:18
by softya(ソフト屋)
DXにおいてはマウスは、SetMousePoint()で常に中央にすることは出来ますが、かなり不便になるのでやらないほうが良いのではないでしょうか?

SetHookWinProcとかウィンドウメッセージを監視するほうが良いと思います。つまりwin32APIです。
下記のような方法でもメッセージは監視できるようです。
「DXライブラリのウィンドウ関係で • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?t=10206&p=82281

あと、Javaで直にWin32APIを扱うことはありません。マウス用のライブラリがあります。
「とほほのJava入門 マウスモーションリスナー(MouseMotionListener)」
http://www.tohoho-web.com/java/listener ... onListener

Re: マウスの移動認識

Posted: 2012年5月23日(水) 21:40
by h2so5
Win32APIはあまり詳しくないですが、OSレベルのAPIではマウスの現在位置しか提供されていないようなので、
マウスポインタが画面の最上部まで行ってしまった場合でもマウスの物理的な移動量を求めるには
マウスのドライバに直接アクセスでもしないと無理じゃないでしょうか。

Re: マウスの移動認識

Posted: 2012年5月23日(水) 21:49
by softya(ソフト屋)
h2so5 さんが書きました:Win32APIはあまり詳しくないですが、OSレベルのAPIではマウスの現在位置しか提供されていないようなので、
マウスポインタが画面の最上部まで行ってしまった場合でもマウスの物理的な移動量を求めるには
マウスのドライバに直接アクセスでもしないと無理じゃないでしょうか。
失礼、画面上部とはデスクトップ画面上部の事ですね。
ウィンドウ上部だと思ってました。
だとすると画面中の中央に戻すぐらいしか無いですね。調べてみます。

[補足]
これはJavaでも同じですね。

Re: マウスの移動認識

Posted: 2012年5月23日(水) 23:43
by softya(ソフト屋)
DOS時代と違い方法が無いみたいなので常に中央に戻すしかなさそうです。
ただ、何かのボタンで解除できるようにしておかないと不便でしょうね。

Re: マウスの移動認識

Posted: 2012年5月24日(木) 00:18
by syourokuirai
ありがとうございました
とりあえず簡単そうなのでDXライブラリの標準関数を使い
ループごとにマウスカーソルを中心に強制移動させることにします