トップページ > 過去ログ > 記事閲覧
GetMouseInput()をnamespaceで使うと
名前:n−k 日時: 2010/02/06 21:17

いつもお世話になっています。 GetMouseInput()をnamespaceで使うに当たっての質問です。 visual C++ 2008 Express Edition を使用して Dxライブラリを使用させていただいているのですが、デバックモードで起動後は正常に判定してくれるのですが ブレークポイントでいったん止めた後、 再度プログラムを流すと判定が変更しなくなってしまいます。 --------------------------------------------------- namespace Input{ int NLibGetMouseInput( int *p_input , int inputPattern ) { if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 ){ Input = 1; } 〜〜〜〜略〜〜〜〜 namespaseを使用せずに使用した場合はブレークポイント後も正常に判定してくれました。 拙い説明で申し訳ありません。 どうぞよろしくお願いします

Page: 1 |

Re: GetMouseInput()をnamespaceで使うと ( No.1 )
名前:いっち 日時:2010/02/06 22:02

質問が書いて無いですよね。 「デバッグ中にブレークポイントで一度止めるとnamespaceの中の"GetMouseInput"関数が正常に動作しない」 と言うことでしょうか?それとも「変数"Input"に値が入らない」と言うことでしょうか?
Re: GetMouseInput()をnamespaceで使うと ( No.2 )
名前:いっち 日時:2010/02/06 22:24

下記のソースでも事象を再現できますでしょうか? できるとしたら、どの当たりにブレークポイントを設定して、どの様な操作を行ったのか教えてください。 #include "DxLib.h" namespace MOUSE_INPUT { bool LeftMouseCheck( void ) { if ( (GetMouseInput( ) & MOUSE_INPUT_LEFT) ) { return true; } return false; } } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetMouseDispFlag( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); if ( MOUSE_INPUT::LeftMouseCheck( ) ) { DrawString( 0, 0, "Left Mouse Button On", GetColor( 255, 255, 255 ) ); } else { DrawString( 0, 0, "Left Mouse Button Off ", GetColor( 255, 255, 255 ) ); } ScreenFlip( ); } DxLib_End( ); return 0; }
Re: GetMouseInput()をnamespaceで使うと ( No.3 )
名前:Masao 日時:2010/02/07 03:40

あー、私も同じ現象になりますね。 もう一度デバッグ開始すればいいので放置していましたがw 一度ブレイクポイントにあたって、処理を継続するとGetMouseInput()が正常に動かなくなるみたいです。 ライブラリは ver 3.01
Re: GetMouseInput()をnamespaceで使うと ( No.4 )
名前:n−k 日時:2010/02/07 19:23

>> いっち さん 質問はおっしゃる通り 「デバッグ中にブレークポイントで一度止めるとnamespaceの中の"GetMouseInput"関数が正常に動作しない」です。言葉足らずで申し訳ありません。 記載のプログラムを試してみましたが、やはりブレークポイントをいれると変わらなくなってしまいます。 どのあたりにブレークポントを入れるというより、 どこでも良いのでブレークポイントで処理をいったん止めると 正常な判定ができず、その判定の結果がずっと帰ってくるような形です。 たとえばLeftMouseCheckがtrue状態でブレークポイントで停止させると 以後は常にtrue状態で処理が流れ続けます。
Re: GetMouseInput()をnamespaceで使うと ( No.5 )
名前:いっち 日時:2010/02/07 21:20

うーん、私の環境では発生しないみたいです。 ブレークポイントで止めた後も左クリックのOn/Offを取得できます。 環境は XP SP3+VS2008EE+DxLib3.01 です。 再現方法にコツがいるのかと思いましたが、どうやら違うようですし・・・。 ( No.2 )のソースからnamespaceをはずすとやはり発生しなくなるのでしょうか?
Re: GetMouseInput()をnamespaceで使うと ( No.6 )
名前:管理人 日時:2010/02/07 23:59

同じく発生しませんでした 私は WindowsXP SP3 + VC2008 です もしかしたら最新版では直っていたりするかもしれませんので、 よろしければこちらのバージョンに更新してみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: GetMouseInput()をnamespaceで使うと ( No.7 )
名前:Masao 日時:2010/02/08 14:22

再現するので、私の環境かいときます。 (ちなみに↑のコードから、namespace を使わなくても、同じ現象になります。) Windows 7 (64bit) VC++ 2008 Express Edition 3.01 3.01a ↑両方でテスト済み です。 (あとブレイクポイントは、最初っから追加しておいたものをビルドしてから起動し、1回目のブレイクポイントでブレイクポイントを消すと、現象は再現しませんでした。) (それに対して、起動してから追加し、プログラムにもどった直後にブレイクポイントにあたるようなことをすると再現できました。)
Re: GetMouseInput()をnamespaceで使うと ( No.8 )
名前:n−k 日時:2010/02/08 20:27

お世話になっています。 Dxライブラリのバージョンを3.01に変更しましたがやはり変わりません。 OSとVCは Windows 7 (64bit) VC++ 2008 Express Edition とMasaoさんと同じですので OSが悪さをしているのでしょうか……。
Re: GetMouseInput()をnamespaceで使うと ( No.9 )
名前:管理人 日時:2010/02/15 00:10

ご情報ありがとうございます 私も Windows7(64bit) + VC++ 2008 の環境で同様の操作をすることで現象が再現しました どうやら DirectInput を使用してマウスの入力を取ろうとすると発生する現象の様ですので、 とりあえず WindowsVista 以降ではマウスの入力に DirectInput を使用しないようにしました その変更を加えたバージョンをアップしましたので、よろしければお使い下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: GetMouseInput()をnamespaceで使うと ( No.10 )
名前:n−k 日時:2010/02/16 18:51

お世話になっています。 確認をしたところ問題なくデバッグが行えました。 修正版を作成していただいた管理人様、 ならびにMasaoさん、いっちさん お時間をとってまでの検証有難うございます。

Page: 1 |