トップページ > 記事閲覧
GetJoypadPOVStateについて
名前:たろう 日時: 2016/06/27 20:56

いつもお世話になっております。 作ったゲームをウィンドウモード&最大化状態で実行して、起動前(※ゲームのウィンドウが表示される前)の待機中に 別のウィンドウをクリックしてアクティブ化したあとに、ゲームのウィンドウが表示された場合、 GetJoypadPOVStateで0が返り続けてしまうため、ゲームパッドの上を押し続けたような状態になってしまいます。 ゲーム画面上をクリックすると止まりますが、これはエラーの場合0が返ってくる仕様などがあるからでしょうか? よろしければアドバイスをお願い致します。よろしくお願いいたします。
メンテ

Page: 1 |

Re: GetJoypadPOVStateについて ( No.1 )
名前:管理人 日時:2016/06/29 01:10

以下のようなプログラムを組んで > 起動前(※ゲームのウィンドウが表示される前)の待機中に > 別のウィンドウをクリックしてアクティブ化したあとに、ゲームのウィンドウが表示された場合 こちらの操作をしてみたのですが、GetJoypadPOVState は 0 を返しませんでした #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Counter = 0 ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // GetJoypadPOVState の戻り値が 0 だったらカウントをひとつ増やす if( GetJoypadPOVState( DX_INPUT_PAD1, 0 ) == 0 ) { Counter ++ ; } // GetJoypadPOVState の戻り値が 0 だった回数を描画する DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Count:%d", Counter ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } たろうさんの環境では上記のプログラムでも件の現象が発生してしまいますでしょうか? あと、最新のバージョンでは直っているかもしれませんので、もし最新のバージョンをお使いでは ありませんでしたら、こちらの暫定の最新バージョンを使ってみてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: GetJoypadPOVStateについて ( No.2 )
名前:たろう 日時:2016/06/29 12:42

お忙しいところすみません。 貼っていただいたプログラムでテストすると問題は発生しませんでしたが、 SetAlwaysRunFlag(TRUE);を加えたもので以下のようにすると同じ問題が発生するようです。 ゲームが表示される前に別のウィンドウの枠をホールドして移動させます(※結構難しいです)。 その移動の最中にゲームのウィンドウが表示されると、一瞬ゲーム画面が上に来ますが ホールドしているウィンドウの下にゲームウィンドウが強制的に移動されます。 すると、掴んでいるウィンドウの下に、非アクティブ状態で動き続けるゲーム画面の Counter が上昇し続けるので、GetJoypadPOVStateが0を返し続けている状態になっていると思われます。 もしかするとOSとの相性かも知れません。使用しているのはwindows10です。 また、ゲームパッド(DirectInput)を繋いでいないと発生しないようです。 最新バージョンのDXLIBに取り替えても改善しませんでした。 よろしくお願いいたします。
メンテ
Re: GetJoypadPOVStateについて ( No.3 )
名前:管理人 日時:2016/07/03 13:29

お試しいただきありがとうございます、最新バージョンでもだめでしたか… お書き込みいただいた現象の再現方法を試してみたのですが、手元の環境では再現しませんでした ( ホールドしている別のウインドウの下にゲームウインドウが強制的に移動されるというのも謎です… ) 現象は再現しませんでしたが、「GetJoypadPOVState 内でエラーが発生した際に -1 ではなく 0 が返ることがある」 という状態になっていたので、正常にゲームパッドの情報が取得できなかった場合は -1 が返るようにしてみました その変更を加えたバージョンをアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) あと、こちらのバージョンでも同様の現象が発生してしまった場合は、お手数で申し訳ありませんが 実行時に作成される Log.txt の内容を掲示板に貼り付けていただけないでしょうか?
メンテ
Re: GetJoypadPOVStateについて ( No.4 )
名前:たろう(解決) 日時:2016/07/03 21:22

アップしていただいた修正版で問題が発生しなくなりました。 お忙しいところお手数をおかけいたしました。ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存