トップページ > 過去ログ > 記事閲覧
GetJoypadDirectInputStateのバグ?
名前:ひる 日時: 2013/01/14 08:51

DXライブラリを使用してゲームを製作しているのですが、 GetJoypadDirectInputStateを使用してスティックタイプの方向キーに対応しました。 その後、ジョイパッド等を一切PCに接続せずに(キーボード操作のみ)で実行しプレイしようとした所、 ゲーム起動後に表示されるタイトルメニュー画面にて、頻繁に「勝手に上キーが押された」様な動作をしました。 タイトルメニューまではキーボードからも操作しておりません。 そこで、デバッグ機能を使って調査したところ、 GetJoypadDirectInputStateで取得した「POV[0]」に「0」が入っていました。 それ以降もGetJoypadDirectInputState関数に入る度に「0」、そして他に「30」や「4579532」等、 まるで乱数のような値が入ってきていました。 (この間、入力装置による入力はしていません) 上記の現象が起こる条件は以下の通りです。 ・「Release」でビルドした実行ファイル。「Debug」では起こらず。 ・ジョイパッド等をPCに接続していない時のみ。 尚、その時のログを貼っておきます。 0:システムの情報を出力します 2: DXライブラリ Ver3.07a 3: 論理プロセッサの数 : 2 5: OS Windows7 ( Build 7601 Service Pack 1 ) 108: CPU動作速度:大体2.88GHz 110: MMX命令を使用します 112: SSE命令が使用可能です 134: SSE2命令が使用可能です 134: CPUベンダ:AuthenticAMD 138: CPU名:AMD Athlon(tm) II X2 245 Processor 139:COMの初期化... 成功しました 140:メモリ総量:3838.98MB 空きメモリ領域:974.82MB 145:タイマーの精度を検査します 146:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 149: パフォーマンスカウンターを使用します タイマー精度 : 2832.070000 KHz 150: ソフトの二重起動検査... 二重起動はされていませんでした 151:ウインドウクラスを登録します... 登録に成功しました 152:ウインドウモード起動用のウインドウを作成します 153:ウインドウの作成に成功しました 239:IMEを無効にしました 240:ウインドウスタイルをウインドウモード用に変更します... 完了 245:DirectInput関係初期化処理 245: DirectInput7 の取得中... 成功 256: 引き続き初期化処理... 初期化成功 258: ジョイパッドの初期化... 262: ジョイパッドの初期化は正常に終了しました 263: マウスデバイスの初期化... 初期化成功 263: キーボードデバイスの初期化... 初期化成功 265:DirectInput 関連の初期化は正常に終了しました 266:DirectSound の初期化を行います 266:DirectSound インターフェースの取得を行います.... 成功 269:引き続きインターフェースの初期化処理... 成功 360: DirectSound デバイスを列挙します 361: モジュール名: ドライバ記述:プライマリ サウンド ドライバー 361: モジュール名:{0.0.0.00000000}.{315c3820-dc39-4a47-8cd4-3af79636d5d0} ドライバ記述:スピーカー (Realtek High Definition Audio) 361: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 361: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 362: 利用可能サンプリング精度 362: プライマリ 16bit = OK 8bit = OK 362: セカンダリ 16bit = OK 8bit = OK 362: 利用可能チャンネル 362: プライマリ MONO = OK STEREO = OK 363: セカンダリ MONO = OK STEREO = OK 363:DirectSound の初期化は正常に終了しました 365:DirectDraw オブジェクトの取得を行います.... 成功 369:引き続き初期化処理... 初期化に成功しました 387:IDirect3D9Ex オブジェクトを取得します.... 成功 394:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 691:成功 692:Driver:atiumdag.dll Description:ATI Radeon HD 4200 692:画面のフォーマットは D3DFMT_X8R8G8B8 です 692:Zバッファのフォーマットは D3DFMT_D16 です 692:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です 693:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 693:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です 693:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 693:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です 693:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 694:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です 694:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です 694:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です 694:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です 694:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です 695:描画用 16bit カラーフォーマットは D_D3DFMT_R5G5B5 です 695:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です 695:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です 695:描画用ABGR浮動小数点16ビット型カラーフォーマットは D_D3DFMT_A16B16G16R16F です 695:描画用ABGR浮動小数点32ビット型カラーフォーマットは D_D3DFMT_A32B32G32R32F です 696:最大テクスチャサイズ 幅:8192 高さ:8192 696:テクスチャステージテンポラリレジスタ:使用可 696:減算合成のハードウェア対応:ネイティブ 696:頂点シェーダーバージョンコード:300 696:ピクセルシェーダーバージョンコード:300 1018:バックバッファロック転送の時間:109020nsec 一時的な描画可能バッファを使用した転送の時間:1071nsec 1019:バックバッファロックを使用しません 1019:Zバッファを作成します.... 成功 1031:プログラマブルシェーダーを使用します 1171:フォントの初期化を行います 1172:フォントの初期化は正常に終了しました 1177:文字コードバッファの初期化を行います... 完了しました 1185:フォントの初期化を行います 1185:フォントの初期化は正常に終了しました 1186:Direct3DDevice9 の解放 3 1194:Direct3D9 DLL の解放 4 1196:DirectInput 関連の終了処理... 完了 1214:DirectSound の終了処理は正常に終了しました 1220:ウインドウを閉じようとしています 1227:ウインドウが破棄されようとしています 1228:ソフトを終了する準備が整いました 1267: 1267:Alloc memory dump 1267: Total size:0(0.000kb) Alloc num:0 1267: 開発・実行環境はWindows7、VisualC++ 2010 Expressです。 以上、こちらからはバグなのかどうかは判断できませんので、報告させて頂きました。

Page: 1 |

Re: GetJoypadDirectInputStateのバグ? ( No.1 )
名前:管理人 日時:2013/01/14 17:09

接続されていないパッドに対して GetJoypadDirectInputState を使用した場合は 戻り値が -1 になりますので、-1 が返ってきた場合は入力情報は得られなかった として処理してください と、書きながら「戻り値チェックするの面倒だな」と思いましたので 接続されていないパッドが指定された場合も引数 DInputState の内容は初期化 するように処理を変更しました よろしければお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
Re: GetJoypadDirectInputStateのバグ? ( No.2 )
名前:ひる(解決) 日時:2013/01/14 21:35

戻り値で対応することを思いつきませんでした。 お手数かけまして申し訳ございませんでした。 また、初期化の対応ありがとうございました。 初期化を確認しました。 利便性が上がりまして本当に助かります。

Page: 1 |