トップページ > 記事閲覧
ゲームパッドが特定の条件で反応しなくなる
名前:たろう 日時: 2018/09/30 23:04

いつもお世話になっております、たろうです。 以下のプログラムでゲームパッドを何かしら操作すると 左上に灰色の四角が表示されるのですが、 Steam経由で鉄拳7をプレイした後、同じプログラムを起動すると ゲームパッドが反応しなくなり、四角が表示されなくなります。 その後ずっと反応しないままですが、コントロールパネル→ハードウェアとサウンド→デバイスとプリンター →デバイスの欄からそのコントローラーの「ゲームコントローラーの設定」を開くと反応するようになり 四角がまた表示されるようになります。 以前からコントローラーが急に効かなくなる事があって原因がわからず、デバイス側の問題かとも思ったのですが 実は以前Steamでゲームを発表した際に、間に入っていただいた方からもコントローラーが反応しない とのお話があり、その後大した改善はしなかったものの、大丈夫になったようで そのままリリースしたという経験があり、steamのゲームコントローラー関連の機能(結構特殊なようです)と なにか相性が悪いのかなと疑ってはいたのですが 今回下のコードで、上記ゲームをプレイした後は確実に四角が表示しなくなる事が分かりましたので 連絡させていただいた次第です (鉄拳自体は何度起動しなおしても同じゲームパッドで普通に遊べます) お手数ですがご確認いただけますでしょうか? よろしくお願いいたしますm(_ _)m #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char Key[256]; SetGraphMode(700,700,16); ChangeWindowMode(TRUE); if(DxLib_Init()==-1){return -1;} while( ProcessMessage() == 0 ) { if(GetHitKeyStateAll( Key )==-1 || (Key[KEY_INPUT_ESCAPE])){return 0;} ClearDrawScreen() ; int Pad = GetJoypadInputState( DX_INPUT_PAD1 ); if(Pad>0){DrawBox(10,10,100,100,GetColor( 130 , 130 , 130 ),TRUE);} ScreenFlip() ; } WaitKey();DxLib_End();return 0; }
メンテ

Page: 1 | 2 |

Re: ゲームパッドが特定の条件で反応しなくなる ( No.1 )
名前:通貨 日時:2018/10/01 01:12

鉄拳7を持っていないのでわかりませんが、環境を書いた方がよいのではと思います。 例えば ・OSは? 32/64bit版? ・開発環境は? ・ビルドしているのは x86/x64? ・MBCS/Unicode? ・Debug/Releaseビルド? ・ゲームパッドは何? 何個? など。 あと気になったのは ・SetGraph()の第三引数は16でOK? ・DxLib_End()の前のWaitKey()を抜いても同じ結果?
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.2 )
名前:たろう 日時:2018/10/01 01:57

たろうです。ご指摘いただきありがとうございます 以下、コントローラーが効かない状態の時に排出されたログを貼ります 0:ChangeWindowMode実行 1:ウインドウモードフラグが立てられました 5:DXライブラリの初期化処理開始 9: システムの情報を出力します 10: DXライブラリ Ver3.19d 11: 論理プロセッサの数 : 8 11: OS Windows10 ( Build 17134 ) 113: 現時点のCPU動作速度:大体3.56GHz 114: MMX命令を使用します 114: SSE命令が使用可能です 115: SSE2命令が使用可能です 116: CPUベンダ:GenuineIntel 120: CPU名:Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz 121: COMの初期化... 成功 126: 非同期読み込み処理の初期化...成功 128: ファイルアクセス処理の初期化...成功 129: メモリ総量:8129.71MB 空きメモリ領域:4004.30MB 130: タイマーの精度を検査します 131: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 132: パフォーマンスカウンターを使用します タイマー精度 : 3507.510000 KHz 133: ソフトの二重起動検査... 二重起動はされていませんでした 136: ウインドウクラスを登録します... 登録に成功しました 138: ウインドウモード起動用のウインドウを作成します 138: ディスプレイ情報のセットアップ開始 140: モニターの数:2 ディスプレイデバイスの数:3 141: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 142: No.1 モニター名:\\.\DISPLAY2 1920x1080 32bit 60Hz 160: ディスプレイ情報のセットアップ完了 162: ウインドウの作成に成功しました 164: ウインドウを表示します 181: IMEを無効にしました 183: ウインドウスタイルをウインドウモード用に変更します... 完了 204: DirectInput関係初期化処理 205: XInput DLL の読み込み中... 成功 208: DirectInput7 の取得中... DirectInput8 の取得を試みます...成功 242: 引き続き初期化処理... 初期化成功 244: ジョイパッドの初期化... 262: 入力装置を見つけました 263: Device Instance Name : JC-U4013S DirectInput Mode 264: Device Product Name : JC-U4013S DirectInput Mode 265: 周期的エフェクトの作成に失敗しました。 266: ジョイパッドの追加は正常に終了しました 280: ジョイパッドの初期化は正常に終了しました 281: マウスデバイスの初期化... 初期化成功 283: キーボードデバイスの初期化... 初期化成功 287: DirectInput 関連の初期化は正常に終了しました 291: DirectSound の初期化を行います 292: DirectSound インターフェースの取得を行います.... 成功 312: 引き続きインターフェースの初期化処理... 成功 594: DirectSound デバイスを列挙します 596: Module Name : Description : プライマリ サウンド ドライバー 598: Module Name : {0.0.0.00000000}.{d7d108f5-cc11-4b13-a449-0c832ef40e3c} Description : スピーカー (Realtek High Definition Audio) 599: Module Name : {0.0.0.00000000}.{16934db7-f71a-428f-8b5a-3ea83662645b} Description : Realtek Digital Output (Realtek High Definition Audio) 600: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 601: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 602: 利用可能サンプリング精度 603: Primary 16bit = OK 8bit = OK 604: Secondary 16bit = OK 8bit = OK 605: 利用可能チャンネル 607: Primary MONO = OK STEREO = OK 608: Secondary MONO = OK STEREO = OK 609: DirectSound の初期化は正常に終了しました 611: d3d11.dll の読み込み.... 成功 615: dxgi.dll の読み込み.... 成功 617: API CreateDXGIFactory1 のアドレスを取得します.... 成功 619: IDXGIFactory1 を作成します.... 成功 624: API D3D11CreateDevice のアドレスを取得します.... 成功 627: IDXGIAdapter を取得します.... 成功 629: Direct3D 11 FeatureLevel 11_0 以上を対象とします 630: ID3D11Device オブジェクトを取得します.... 成功 677: IDXGIDevice1 を取得します.... 成功 679: IDXGIDevice1->SetMaximunFrameLatency( 1 ); を実行しました 680: [ウインドウモード 700x700] 680: IDXGISwapChain を作成します.... 成功 683: IDXGIFactory->CreateSwapChain の戻り値:0x00000000 684: IDXGIOutput を取得します.... 成功 686: Graphics Device:NVIDIA GeForce GTX 750 687: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 688: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 689: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 690: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 691: カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 692: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 693: DXT2テクスチャフォーマットは使えません 694: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 695: DXT4テクスチャフォーマットは使えません 696: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 696: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 697: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 698: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 700: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 701: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 702: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 703: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 704: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 705: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 706: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 707: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 708: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 709: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 710: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 711: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 712: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 713: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 714: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 715: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 716: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 717: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 718: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 719: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 720: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 721: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 722: 使用する機能レベル:D3D_FEATURE_LEVEL_11_0 723: 同時にレンダリングできるバッファの数:8 724: 最大テクスチャサイズ 幅:16384 高さ:16384 726: 標準描画用の頂点バッファの作成.... 成功 728: 深度バッファを作成します.... 成功 730: シェーダーコード関係の初期化.... 成功 743: 各種シェーダー用定数バッファの作成.... 成功 746: 各種 ID3D11InputLayout の作成.... 成功 779: 画像の単純転送処理の初期化... 成功 784: フォントの初期化を行います 786: フォントの初期化は正常に終了しました 787: 文字コードバッファの初期化を行います... 完了しました 791:DXライブラリの初期化処理終了 ---------------------------------------------------- 以下は「ゲームコントローラーの設定」を開いて コントローラーが効くようになった時のログです。 0:ChangeWindowMode実行 0:ウインドウモードフラグが立てられました 4:DXライブラリの初期化処理開始 8: システムの情報を出力します 9: DXライブラリ Ver3.19d 10: 論理プロセッサの数 : 8 11: OS Windows10 ( Build 17134 ) 112: 現時点のCPU動作速度:大体3.56GHz 113: MMX命令を使用します 113: SSE命令が使用可能です 114: SSE2命令が使用可能です 115: CPUベンダ:GenuineIntel 119: CPU名:Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz 120: COMの初期化... 成功 125: 非同期読み込み処理の初期化...成功 127: ファイルアクセス処理の初期化...成功 129: メモリ総量:8129.71MB 空きメモリ領域:3943.80MB 130: タイマーの精度を検査します 131: 精度結果 更新回数 マルチメディアタイマー:1 パフォーマンスカウンター:60 132: パフォーマンスカウンターを使用します タイマー精度 : 3507.510000 KHz 133: ソフトの二重起動検査... 二重起動はされていませんでした 136: ウインドウクラスを登録します... 登録に成功しました 137: ウインドウモード起動用のウインドウを作成します 138: ディスプレイ情報のセットアップ開始 139: モニターの数:2 ディスプレイデバイスの数:3 140: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 141: No.1 モニター名:\\.\DISPLAY2 1920x1080 32bit 60Hz 160: ディスプレイ情報のセットアップ完了 163: ウインドウの作成に成功しました 164: ウインドウを表示します 182: IMEを無効にしました 184: ウインドウスタイルをウインドウモード用に変更します... 完了 204: DirectInput関係初期化処理 205: XInput DLL の読み込み中... 成功 209: DirectInput7 の取得中... DirectInput8 の取得を試みます...成功 230: 引き続き初期化処理... 初期化成功 234: ジョイパッドの初期化... 251: 入力装置を見つけました 252: Device Instance Name : JC-U4013S DirectInput Mode 253: Device Product Name : JC-U4013S DirectInput Mode 255: 周期的エフェクトの作成に失敗しました。 258: ジョイパッドの追加は正常に終了しました 272: ジョイパッドの初期化は正常に終了しました 274: マウスデバイスの初期化... 初期化成功 275: キーボードデバイスの初期化... 初期化成功 278: DirectInput 関連の初期化は正常に終了しました 282: DirectSound の初期化を行います 283: DirectSound インターフェースの取得を行います.... 成功 286: 引き続きインターフェースの初期化処理... 成功 326: DirectSound デバイスを列挙します 328: Module Name : Description : プライマリ サウンド ドライバー 329: Module Name : {0.0.0.00000000}.{d7d108f5-cc11-4b13-a449-0c832ef40e3c} Description : スピーカー (Realtek High Definition Audio) 331: Module Name : {0.0.0.00000000}.{16934db7-f71a-428f-8b5a-3ea83662645b} Description : Realtek Digital Output (Realtek High Definition Audio) 332: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 333: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 334: 利用可能サンプリング精度 335: Primary 16bit = OK 8bit = OK 336: Secondary 16bit = OK 8bit = OK 337: 利用可能チャンネル 337: Primary MONO = OK STEREO = OK 338: Secondary MONO = OK STEREO = OK 339: DirectSound の初期化は正常に終了しました 341: d3d11.dll の読み込み.... 成功 344: dxgi.dll の読み込み.... 成功 346: API CreateDXGIFactory1 のアドレスを取得します.... 成功 348: IDXGIFactory1 を作成します.... 成功 353: API D3D11CreateDevice のアドレスを取得します.... 成功 355: IDXGIAdapter を取得します.... 成功 357: Direct3D 11 FeatureLevel 11_0 以上を対象とします 358: ID3D11Device オブジェクトを取得します.... 成功 405: IDXGIDevice1 を取得します.... 成功 408: IDXGIDevice1->SetMaximunFrameLatency( 1 ); を実行しました 409: [ウインドウモード 700x700] 410: IDXGISwapChain を作成します.... 成功 412: IDXGIFactory->CreateSwapChain の戻り値:0x00000000 413: IDXGIOutput を取得します.... 成功 416: Graphics Device:NVIDIA GeForce GTX 750 417: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 418: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 418: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 419: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 420: カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 421: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 422: DXT2テクスチャフォーマットは使えません 424: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 425: DXT4テクスチャフォーマットは使えません 425: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 426: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 427: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 428: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 429: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 430: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 431: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 432: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 433: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 434: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 435: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 436: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 437: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 439: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 440: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 441: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 442: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 443: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 444: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 445: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 446: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 447: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 448: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 449: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 450: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 451: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 452: 使用する機能レベル:D3D_FEATURE_LEVEL_11_0 453: 同時にレンダリングできるバッファの数:8 454: 最大テクスチャサイズ 幅:16384 高さ:16384 455: 標準描画用の頂点バッファの作成.... 成功 457: 深度バッファを作成します.... 成功 460: シェーダーコード関係の初期化.... 成功 472: 各種シェーダー用定数バッファの作成.... 成功 475: 各種 ID3D11InputLayout の作成.... 成功 504: 画像の単純転送処理の初期化... 成功 508: フォントの初期化を行います 510: フォントの初期化は正常に終了しました 511: 文字コードバッファの初期化を行います... 完了しました 516:DXライブラリの初期化処理終了 ---------------------------------------------------- 第三引数の件と、あとWaitKey()は余分でした。すみません ただ、それらがあった場合にコントローラーが効かなくなるということが仮にあったとして それはそれでバグだと思いますので、そのままにさせていただきます。 よろしくお願いいたします
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.3 )
名前:通過 日時:2018/10/01 12:25

もう一つ気になるのはDxLib_Endを呼ばずに終了するルートがあるところですが、 鉄拳7をプレイする前にこのプログラムを実行したとき、Escを押して終了していませんか?
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.4 )
名前:たろう 日時:2018/10/01 19:58

念のため余分な部分を削ったりパッドの番号がずれるのかも?などと色々試していた所、 以下2つのプログラムで違いが出ることが分かりましたので貼らせていただきます 上の場合だと今まで同様100%コントローラーが効かなくなるのですが(10回ほど試しました) 下の場合だと鉄拳起動後もコントローラーが使えました(10回ほど試しました) char Key[256];が入っているかどうか以外違いはないので メモリ関連の何か?ではないかという気もします。 コントローラーが効かなくなる ---------------------------------------------------------------- #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char Key[256]; SetGraphMode(700,700,16); ChangeWindowMode(TRUE); if(DxLib_Init()==-1){return -1;} while( ProcessMessage() == 0 ) { ClearDrawScreen() ; int Pad = GetJoypadInputState( DX_INPUT_PAD1 ); if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD2 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD3 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD4 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD5 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD6 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD7 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD8 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD9 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD10);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD11);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD12);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD13);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD14);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD15);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD16);} if(Pad>0){DrawBox(10,10,100,100,GetColor( 130 , 130 , 130 ),TRUE);} ScreenFlip() ; } DxLib_End();return 0; } コントローラーが効かなくならない ---------------------------------------------------------------- #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { SetGraphMode(700,700,16); ChangeWindowMode(TRUE); if(DxLib_Init()==-1){return -1;} while( ProcessMessage() == 0 ) { ClearDrawScreen() ; int Pad = GetJoypadInputState( DX_INPUT_PAD1 ); if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD2 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD3 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD4 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD5 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD6 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD7 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD8 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD9 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD10);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD11);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD12);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD13);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD14);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD15);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD16);} if(Pad>0){DrawBox(10,10,100,100,GetColor( 130 , 130 , 130 ),TRUE);} ScreenFlip() ; } DxLib_End();return 0; } ---------------------------------------------------------------- その後、通過さんにご指摘いただき、エスケープは使っていなかったのですが ウィンドウのXボタンで終了していたので 念のためマウスで終了する形に変更しましたが 同じようにゲームパッドが効かなくなる状態になりました。 PC再起動後に試しても同じ状態でした。 下がそのプログラムです #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char Key[256]; SetGraphMode(700,700,16); ChangeWindowMode(TRUE); if(DxLib_Init()==-1){return -1;} SetWindowStyleMode(4); while( ProcessMessage() == 0 ) { if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 ){break;} ClearDrawScreen() ; int Pad = GetJoypadInputState( DX_INPUT_PAD1 ); if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD2 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD3 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD4 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD5 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD6 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD7 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD8 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD9 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD10);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD11);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD12);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD13);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD14);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD15);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD16);} if(Pad>0){DrawBox(10,10,100,100,GetColor( 130 , 130 , 130 ),TRUE);} ScreenFlip() ; } DxLib_End();return 0; } ---------------------------------------------------------------- そして何度も繰り返したのち、だんだん問題が発生する頻度が 下がってしまい、昨日のように必ず発生するという状態ではなく 10回に1回発生する感じになりました。 以上です。すみません、 ヒントになるかどうかはわかりませんが よろしくお願いいたします
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.5 )
名前:通貨 日時:2018/10/01 21:11

※昼はスマホから入力したので名前が間違って通過になっていました(笑) 『試してください』しか言えないので心苦しい(しかも状況は難しくなっている)のですが さらに書きます。(なお、私はこれらから何がわかるわけでもなく、管理人さんが知りたい情報が 少しでも入っていれば解決が早くなるかなという意図ですので、ご了承ください) ・char Key[256]; を WinMain()の外に移動(グローバル変数化)したらどうなりますか? ・パッドJC-U4013SはXInputとDirectInputをボタンで切り替えられるようですね。ログを見ると  DirectInputモードでご使用のようですが、XInputモードにしても同じ結果ですか? ・ログのラスト部分が書かれていませんが、「DirectInput 関連の終了処理... 完了」はありますか?
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.6 )
名前:たろう 日時:2018/10/01 23:28

いろいろすみません、ログにつきましてはどうやらエスケープを使っていたみたいです。 自分でも驚きですが、多分手癖で・・・ その上で( No.4 )の3つ目のプログラム以降は、それが不可能な状態になっていて またPCも再起動してからテストしていますので それによるゴミが発生して異常が起きている可能性は排除できていると思います。 ( No.4 )の3つ目のプログラムのchar Key[256];を #include "DxLib.h" char Key[256]; int WINAPI WinMain・・・ としてグローバル化した所、「鉄拳起動&閉じたあとに起動(visualstudio2015のデバッグ無しで起動)」 を3回繰り返したあと何も起こらず、 char Key[256];を元の位置に戻して、また鉄拳起動後に起動すると 直後コントローラが効かない状態になりました。 また、XInputモードで上記プロセスで起動を何度か繰り返しました(こちらも3回ほど)が コントローラーが効かなくなる事はありませんでした。そしてDirectInputに戻してまた試すと コントローラーが効かない状態になりました。 以下念のためログを張り直します。異常が発生したときのものです。 よろしくお願いいたしますm(_ _)m (※別のログと張り間違えましたのでまた異常を発生させて張り直しました) (※なんどもすみません、それも別のログと張り間違えていました似たようなフォルダが多く・・・今度こそ確かです) ----------------------------------------------- 0:ChangeWindowMode実行 1:ウインドウモードフラグが立てられました 4:DXライブラリの初期化処理開始 8: システムの情報を出力します 9: DXライブラリ Ver3.19d 10: 論理プロセッサの数 : 8 11: OS Windows10 ( Build 17134 ) 112: 現時点のCPU動作速度:大体3.56GHz 113: MMX命令を使用します 113: SSE命令が使用可能です 115: SSE2命令が使用可能です 115: CPUベンダ:GenuineIntel 120: CPU名:Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz 121: COMの初期化... 成功 145: 非同期読み込み処理の初期化...成功 147: ファイルアクセス処理の初期化...成功 149: メモリ総量:8129.71MB 空きメモリ領域:4267.02MB 150: タイマーの精度を検査します 151: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 151: パフォーマンスカウンターを使用します タイマー精度 : 3507.506000 KHz 153: ソフトの二重起動検査... 二重起動はされていませんでした 156: ウインドウクラスを登録します... 登録に成功しました 157: ウインドウモード起動用のウインドウを作成します 158: ディスプレイ情報のセットアップ開始 159: モニターの数:2 ディスプレイデバイスの数:3 162: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 164: No.1 モニター名:\\.\DISPLAY2 1920x1080 32bit 60Hz 201: ディスプレイ情報のセットアップ完了 204: ウインドウの作成に成功しました 205: ウインドウを表示します 233: IMEを無効にしました 236: ウインドウスタイルをウインドウモード用に変更します... 完了 258: DirectInput関係初期化処理 259: XInput DLL の読み込み中... 成功 263: DirectInput7 の取得中... DirectInput8 の取得を試みます...成功 289: 引き続き初期化処理... 初期化成功 291: ジョイパッドの初期化... 310: 入力装置を見つけました 311: Device Instance Name : JC-U4013S DirectInput Mode 312: Device Product Name : JC-U4013S DirectInput Mode 313: 周期的エフェクトの作成に失敗しました。 314: ジョイパッドの追加は正常に終了しました 329: ジョイパッドの初期化は正常に終了しました 330: マウスデバイスの初期化... 初期化成功 332: キーボードデバイスの初期化... 初期化成功 336: DirectInput 関連の初期化は正常に終了しました 340: DirectSound の初期化を行います 341: DirectSound インターフェースの取得を行います.... 成功 344: 引き続きインターフェースの初期化処理... 成功 385: DirectSound デバイスを列挙します 387: Module Name : Description : プライマリ サウンド ドライバー 388: Module Name : {0.0.0.00000000}.{d7d108f5-cc11-4b13-a449-0c832ef40e3c} Description : スピーカー (Realtek High Definition Audio) 389: Module Name : {0.0.0.00000000}.{16934db7-f71a-428f-8b5a-3ea83662645b} Description : Realtek Digital Output (Realtek High Definition Audio) 390: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 391: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 392: 利用可能サンプリング精度 393: Primary 16bit = OK 8bit = OK 394: Secondary 16bit = OK 8bit = OK 395: 利用可能チャンネル 396: Primary MONO = OK STEREO = OK 397: Secondary MONO = OK STEREO = OK 398: DirectSound の初期化は正常に終了しました 399: d3d11.dll の読み込み.... 成功 403: dxgi.dll の読み込み.... 成功 405: API CreateDXGIFactory1 のアドレスを取得します.... 成功 407: IDXGIFactory1 を作成します.... 成功 412: API D3D11CreateDevice のアドレスを取得します.... 成功 414: IDXGIAdapter を取得します.... 成功 416: Direct3D 11 FeatureLevel 11_0 以上を対象とします 417: ID3D11Device オブジェクトを取得します.... 成功 457: IDXGIDevice1 を取得します.... 成功 460: IDXGIDevice1->SetMaximunFrameLatency( 1 ); を実行しました 460: [ウインドウモード 700x700] 461: IDXGISwapChain を作成します.... 成功 464: IDXGIFactory->CreateSwapChain の戻り値:0x00000000 465: IDXGIOutput を取得します.... 成功 467: Graphics Device:NVIDIA GeForce GTX 750 468: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 469: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 470: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 471: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 472: カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 473: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 474: DXT2テクスチャフォーマットは使えません 475: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 476: DXT4テクスチャフォーマットは使えません 477: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 478: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 479: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 480: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 481: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 482: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 482: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 483: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 484: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 485: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 486: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 488: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 489: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 490: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 491: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 492: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 493: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 494: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 495: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 496: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 498: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 498: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 499: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 500: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 501: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 502: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 503: 使用する機能レベル:D3D_FEATURE_LEVEL_11_0 505: 同時にレンダリングできるバッファの数:8 506: 最大テクスチャサイズ 幅:16384 高さ:16384 507: 標準描画用の頂点バッファの作成.... 成功 510: 深度バッファを作成します.... 成功 512: シェーダーコード関係の初期化.... 成功 524: 各種シェーダー用定数バッファの作成.... 成功 527: 各種 ID3D11InputLayout の作成.... 成功 555: 画像の単純転送処理の初期化... 成功 560: フォントの初期化を行います 561: フォントの初期化は正常に終了しました 563: 文字コードバッファの初期化を行います... 完了しました 567:DXライブラリの初期化処理終了 568:ウインドウスタイルをウインドウモード用に変更します... 完了 2690:フォントの初期化を行います 2695:フォントの初期化は正常に終了しました 2737:d3d11.dll の解放 1 2743:dxgi.dll の解放 1 2748:Direct3D11 のオブジェクト数を出力 2753:Direct3D11 のオブジェクト合計数 : 0 2758:DirectInput 関連の終了処理... 完了 2778:DirectSound の終了処理は正常に終了しました 2780:ウインドウを閉じようとしています 2783:ウインドウが破棄されようとしています 2785:ソフトを終了する準備が整いました 2851:COMを終了... 完了 2852: 2853:Alloc memory dump 2855: Total size:0(0.000kb) Alloc num:0 2856:
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.7 )
名前:管理人 日時:2018/10/02 00:49

> たろうさん、通貨さん 色々お試しいただきありがとうございます ログを拝見する限り正常に動作しているようなので原因は分かりませんが、 たろうさんの再現用のプログラムで一点気になるところがありました SetDrawScreen( DX_SCREEN_BACK ); を実行されていないので、常に表画面に描画されていることです 恐らく本件の現象とは関係が無いと思いますが、よろしければ以下のように SetDrawScreen( DX_SCREEN_BACK ); を DxLib_Init の呼出し後に実行するようにしてみてください m(_ _)m #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char Key[256]; SetGraphMode(700,700,16); ChangeWindowMode(TRUE); if(DxLib_Init()==-1){return -1;} SetDrawScreen( DX_SCREEN_BACK ); // ←追加した行 while( ProcessMessage() == 0 ) { ClearDrawScreen() ; int Pad = GetJoypadInputState( DX_INPUT_PAD1 ); if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD2 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD3 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD4 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD5 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD6 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD7 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD8 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD9 );} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD10);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD11);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD12);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD13);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD14);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD15);} if(Pad<=0){Pad = GetJoypadInputState( DX_INPUT_PAD16);} if(Pad>0){DrawBox(10,10,100,100,GetColor( 130 , 130 , 130 ),TRUE);} ScreenFlip() ; } DxLib_End();return 0; }
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.8 )
名前:たろう 日時:2018/10/02 01:23

管理人さん、いつもありがとうございます。 頂いた物で確認しました所、二度までは手順を繰り返して問題なかったのですが 3度目にまたコントローラーが利かない状態になりました。 そもそもまた私の環境の問題かもしれませんし、 再現性も当初100%から、イマイチな感じになってしまいましたので もし何か分かりましたらで結構です よろしくお願いいたします
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.9 )
名前:通貨 日時:2018/10/05 05:34

1ビットでも可能性があるかも、的な内容です。 XInputモードなら(今のところ)大丈夫っぽい  DxLib_Initの前にSetUseDirectInputFlagやSetUseXInputFlagを組み合わせてみる  XInput専用にするのも手かもしれません ローカルに変数を置くと不具合が出る  さすがに「変数を全部グローバル化しましょう」とは言えませんね... Debugビルドである  Releaseビルドではどうなるでしょうか(といっても、Steamで公開ということはReleae  ビルドでしょうから、これは意味がなさそうですね) 文字セットを変える  ちょっと前にも(入力関係ではありませんが)、マルチバイト文字セットではバグるがUnicodeではOKという  DxLibのバグがありました。今の文字セットを切り替えてみてはどうでしょうか。 1種類しかコントローラーは試していない  ゲーム機のコントローラーとかありませんか? Xbox360コントローラーとかNintendo Switch用パッドとか VS2015である  VS2017をインストールして試してみる。コンパイラの不具合という仮説です。  (さすがにこれは気軽にためしてみてとは言えませんが)
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.10 )
名前:たろう 日時:2018/10/02 23:43

同じ症状になった他の方についてですが 今回の問題と同じかどうかは微妙で、私の環境でのみ発生する 可能性も捨てきれない感じです。 連絡をいただき無駄と思いつつもCheckJoypadXInputでどちら入力かを確認して xinputならGetJoypadXInputStateを使うようにゲームを改造した所 問題なくなったと連絡をいただきリリースした感じです。 ただ、メールでしかやり取りしていないので詳細はわかりません。 またsteamはゲームパッドが使えないゲームも、 間に割り込んでゲームパッドを使えるようにする機能がついているのですが その機能はデベロッパー側でオフに出来る仕様のようで、 私が行った変更のほか、その機能をオフにした旨の 連絡も受けましたので、それで直った可能性もあります releaseビルドでも問題が発生するのは確認済みなのですが、その他につきましては steam→ゲーム起動に時間がかかる上にたまにしか問題が発生しない状態に なってしまいましたので、確認も苦行になっています(100%発生していたらやりやすいのですが・・・) すみません、お許しください。 私も通貨さんのおっしゃる通り、XInput専用(というか推奨)でもいいかな、、、と思いますので 他にお困りの方がいないのであればなにか分かるまで放置でも結構です。 よろしくお願いいたします
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.11 )
名前:管理人 日時:2018/10/03 01:15

お試しいただきありがとうございます ローカル配列の位置を変更すると発生しなくなることや、徐々に問題が発生する頻度が下がる ということから、たろうさんが最初に考えられていたように相性の問題や 環境に依存した問題である可能性がそれなりに高いかもしれません また、Steam の特殊な処理によるものだとしますと、仮に現象が発生することが確認できても DXライブラリ側では対処のしようが無い可能性が高いです なので、本件は一旦保留とさせていただければと思います m(_ _;m ただ、コントローラが利かない状態では本当に何の情報も取得できないのかが若干気になりますので、 もしよろしければ『コントローラが利かない状態』になった状態で以下の 『GetJoypadDirectInputState で取得できる情報を全部画面に表示する』プログラムを実行して、 コントローラをどのように入力しても何も表示される数値に変化が無いかお試し頂けないでしょうか? m(_ _;m #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { DINPUT_JOYSTATE input ; int i ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); SetAlwaysRunFlag( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 画面にパッド1の入力状態の情報を描画 GetJoypadDirectInputState( DX_INPUT_PAD1, &input ) ; DrawString( 0, 0, "PAD1", GetColor( 255,255,255 ) ) ; DrawFormatString( 0, 16, GetColor( 255,255,255 ), "X:%d Y:%d Z:%d", input.X, input.Y, input.Z ) ; DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Rx:%d Ry:%d Rz:%d", input.Rx, input.Ry, input.Rz ) ; DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Slider 0:%d 1:%d", input.Slider[ 0 ], input.Slider[ 1 ] ) ; DrawFormatString( 0, 64, GetColor( 255,255,255 ), "POV 0:%d 1:%d 2:%d 3:%d", input.POV[ 0 ], input.POV[ 1 ], input.POV[ 2 ], input.POV[ 3 ] ) ; DrawString( 0, 80, "Button", GetColor( 255,255,255 ) ) ; for( i = 0 ; i < 32 ; i ++ ) { DrawFormatString( 64 + i % 8 * 64, 80 + i / 8 * 16, GetColor( 255,255,255 ), "%2d:%d", i, input.Buttons[ i ] ) ; } // 画面にパッド2の入力状態の情報を描画 GetJoypadDirectInputState( DX_INPUT_PAD2, &input ) ; DrawString( 0, 168, "PAD2", GetColor( 255,255,255 ) ) ; DrawFormatString( 0, 168 + 16, GetColor( 255,255,255 ), "X:%d Y:%d Z:%d", input.X, input.Y, input.Z ) ; DrawFormatString( 0, 168 + 32, GetColor( 255,255,255 ), "Rx:%d Ry:%d Rz:%d", input.Rx, input.Ry, input.Rz ) ; DrawFormatString( 0, 168 + 48, GetColor( 255,255,255 ), "Slider 0:%d 1:%d", input.Slider[ 0 ], input.Slider[ 1 ] ) ; DrawFormatString( 0, 168 + 64, GetColor( 255,255,255 ), "POV 0:%d 1:%d 2:%d 3:%d", input.POV[ 0 ], input.POV[ 1 ], input.POV[ 2 ], input.POV[ 3 ] ) ; DrawString( 0, 168 + 80, "Button", GetColor( 255,255,255 ) ) ; for( i = 0 ; i < 32 ; i ++ ) { DrawFormatString( 64 + i % 8 * 64, 168 + 80 + i / 8 * 16, GetColor( 255,255,255 ), "%2d:%d", i, input.Buttons[ i ] ) ; } // 裏画面の内容を表画面に反映 ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.12 )
名前:たろう 日時:2018/10/03 03:37

早速試してみました。 まず頂いたプログラムで問題なくゲームパッドの情報が 表示される(このときPAD1だけが反応)ことを確認し 鉄拳起動後にまた試すと一回目で何も反応しなくなりました。 (※全てのボタンが一切反応しません) この状態のまま同じゲームパッドをXinputモードにすると、反応が戻ったのですが PAD1とPAD2に同じ数値が表示されるようになりました。 (※これは元々そういうものなのでしょうか?) そしてそのまま、またDinputにモードに戻すと何も反応しなくなりましたが その状態でタスクマネージャーを開いたところ Dinputの反応が戻りPAD1だけ表示される状態に戻りました。 そしてタスクマネージャーを開いたまま、 頂いたプログラムのウィンドウを掴むとまた反応しなくなります。 その後別のウィンドウがアクティブになっていれば何であれ ゲームパッドの反応が戻ることが分かりました つまり頂いたプログラムのウィンドウが非アクティブになっているときだけ ゲームパッドの反応が復活する状態です。 ウィンドウを掴むと反応しなくなり、別のウィンドウを掴むと反応が戻るという あべこべの状態です そして上で書いたゲームコントローラーの設定を開く方法を行うと アクティブ状態でも非アクティブ状態でもゲームパッドが反応する状態に戻りました 以上です、お手数をおかけいたします もしもなにか分かったときで結構ですので、保留で大丈夫です よろしくお願いいたします。
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.13 )
名前:管理人 日時:2018/10/04 01:43

お試しいただきありがとうございます > この状態のまま同じゲームパッドをXinputモードにすると、反応が戻ったのですが > PAD1とPAD2に同じ数値が表示されるようになりました。 > (※これは元々そういうものなのでしょうか?) はい、恐らく XInput モードの場合は XInput と DirectInput のどちらの API にも対応したモードなのだと思います DXライブラリは XInput と DirectInput どちらの API にも対応しているので、どちらの API でも検出される ゲームパッドの場合はゲームパッドが2個接続されている扱いになってしまいます( XInput のゲームパッドが1つと、 DirectInput のゲームパッドが1つ ) この場合 PAD1 と PAD2 は同じゲームパッドの入力が表示されてしまいます ( これを避ける方法としては DxLib_Init の前に SetUseXInputFlag( FALSE ) ; を実行して XInput を無効にするか、 SetDirectInputFlag( FALSE ) ; を実行して DirectInput を無効にする、というものがあります( 片方の API のみ 使用するようにする ) ) > そしてそのまま、またDinputにモードに戻すと何も反応しなくなりましたが > その状態でタスクマネージャーを開いたところ > Dinputの反応が戻りPAD1だけ表示される状態に戻りました。 > そしてタスクマネージャーを開いたまま、 > 頂いたプログラムのウィンドウを掴むとまた反応しなくなります。 >  > その後別のウィンドウがアクティブになっていれば何であれ > ゲームパッドの反応が戻ることが分かりました > つまり頂いたプログラムのウィンドウが非アクティブになっているときだけ > ゲームパッドの反応が復活する状態です。 > ウィンドウを掴むと反応しなくなり、別のウィンドウを掴むと反応が戻るという > あべこべの状態です 本当に全く情報を取得できなくなるのですね… こちらが本件の問題となっている現象なのだと思います なぜ取得できなくなるのかは不明です DirectInput の処理として誤った処理はしていない筈なので、鉄拳、又は Steam の処理に原因があるのだと思います > そして上で書いたゲームコントローラーの設定を開く方法を行うと > アクティブ状態でも非アクティブ状態でもゲームパッドが反応する状態に戻りました こちらの『ゲームコントローラーの設定を開く』ことと同じ効果がある処理がプログラムで書ければ良いのですが… > 以上です、お手数をおかけいたします > もしもなにか分かったときで結構ですので、保留で大丈夫です すみません、何度もお引止めしてしまって申し訳ないのですが、思えばもうひとつだけ試してみる価値のある処理がありました 本件の現象はどうやら DirectInput によるゲームパッドの情報取得が正常ではなくなるというものらしい( XInput の入力は 鉄拳起動後も正常に取得できているようなので )ので、XInput 対応ゲームパッド専用にするのがひとつの選択肢ですが、 もうひとつ DirectInput や XInput ではない第三の APIである『マルチメディアAPI』を使用したゲームパッドの入力情報の取得という 方法がありました( API の登場順番は マルチメディアAPI → DirectInput → XInput なので、最も古いAPIです ) もしかしたら DirectInput 同様に鉄拳起動後は正常に情報を取得できなくなってしまうかもしれませんが、試す価値はあると思いますので よろしければ DxLib_Init の前に SetUseXInputFlag( FALSE ) ; と SetUseDirectInputFlag( FALSE ) ; を追加して XInput と DirectInput を使用しないようにした状態の No.11 のプログラムを実行してみてください m(_ _;m #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { DINPUT_JOYSTATE input ; int i ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // XInput を使用しないように設定する SetUseXInputFlag( FALSE ) ; // DirectInput を使用しないように設定する SetUseDirectInputFlag( FALSE ) ; SetAlwaysRunFlag( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 画面にパッド1の入力状態の情報を描画 GetJoypadDirectInputState( DX_INPUT_PAD1, &input ) ; DrawString( 0, 0, "PAD1", GetColor( 255,255,255 ) ) ; DrawFormatString( 0, 16, GetColor( 255,255,255 ), "X:%d Y:%d Z:%d", input.X, input.Y, input.Z ) ; DrawFormatString( 0, 32, GetColor( 255,255,255 ), "Rx:%d Ry:%d Rz:%d", input.Rx, input.Ry, input.Rz ) ; DrawFormatString( 0, 48, GetColor( 255,255,255 ), "Slider 0:%d 1:%d", input.Slider[ 0 ], input.Slider[ 1 ] ) ; DrawFormatString( 0, 64, GetColor( 255,255,255 ), "POV 0:%d 1:%d 2:%d 3:%d", input.POV[ 0 ], input.POV[ 1 ], input.POV[ 2 ], input.POV[ 3 ] ) ; DrawString( 0, 80, "Button", GetColor( 255,255,255 ) ) ; for( i = 0 ; i < 32 ; i ++ ) { DrawFormatString( 64 + i % 8 * 64, 80 + i / 8 * 16, GetColor( 255,255,255 ), "%2d:%d", i, input.Buttons[ i ] ) ; } // 画面にパッド2の入力状態の情報を描画 GetJoypadDirectInputState( DX_INPUT_PAD2, &input ) ; DrawString( 0, 168, "PAD2", GetColor( 255,255,255 ) ) ; DrawFormatString( 0, 168 + 16, GetColor( 255,255,255 ), "X:%d Y:%d Z:%d", input.X, input.Y, input.Z ) ; DrawFormatString( 0, 168 + 32, GetColor( 255,255,255 ), "Rx:%d Ry:%d Rz:%d", input.Rx, input.Ry, input.Rz ) ; DrawFormatString( 0, 168 + 48, GetColor( 255,255,255 ), "Slider 0:%d 1:%d", input.Slider[ 0 ], input.Slider[ 1 ] ) ; DrawFormatString( 0, 168 + 64, GetColor( 255,255,255 ), "POV 0:%d 1:%d 2:%d 3:%d", input.POV[ 0 ], input.POV[ 1 ], input.POV[ 2 ], input.POV[ 3 ] ) ; DrawString( 0, 168 + 80, "Button", GetColor( 255,255,255 ) ) ; for( i = 0 ; i < 32 ; i ++ ) { DrawFormatString( 64 + i % 8 * 64, 168 + 80 + i / 8 * 16, GetColor( 255,255,255 ), "%2d:%d", i, input.Buttons[ i ] ) ; } // 裏画面の内容を表画面に反映 ScreenFlip(); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } あと、現在のDXライブラリでは『マルチメディアAPI』を使用したゲームパッド情報取得ではPOVの情報が正常に 取得できないようになっていましたので、取得できるように修正したバージョンをこちらにアップしました 大変お手数で申し訳ありませんが、よろしければダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.14 )
名前:たろう 日時:2018/10/04 02:15

すみません DxLibVCTest.zipを適用後 早速試してみようと思ったのですが ビルドできないようです。 エラー LNK2019 未解決の外部シンボル "void __cdecl DxLib::Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid(struct DxLib::SETUP_GRAPHHANDLE_GPARAM *,int,int,int)" (?Graphics_Image_InitSetupGraphHandleGParam_Normal_NonDrawValid@DxLib@@YAXPAUSETUP_GRAPHHANDLE_GPARAM@1@HHH@Z) が関数 "int __cdecl TheoraDecode_SetupImage(unsigned long,int,int,int,int)" (?TheoraDecode_SetupImage@@YAHKHHHH@Z) で参照されました。 new C:\vcproject\new\DxUseCLib_vs2015_x86_MTd.lib(DxUseCLibOgg.obj) 1 エラー LNK2019 未解決の外部シンボル "void __cdecl DxLib::Graphics_Image_InitSetupGraphHandleGParam(struct DxLib::SETUP_GRAPHHANDLE_GPARAM *)" (?Graphics_Image_InitSetupGraphHandleGParam@DxLib@@YAXPAUSETUP_GRAPHHANDLE_GPARAM@1@@Z) が関数 "int __cdecl TheoraDecode_SetupImage(unsigned long,int,int,int,int)" (?TheoraDecode_SetupImage@@YAHKHHHH@Z) で参照されました。 new C:\vcproject\new\DxUseCLib_vs2015_x86_MTd.lib(DxUseCLibOgg.obj) 1 エラー LNK2019 未解決の外部シンボル "int __cdecl DxLib::Graphics_Image_MakeGraph_UseGParam(struct DxLib::SETUP_GRAPHHANDLE_GPARAM *,int,int,int,int,int,int,int)" (?Graphics_Image_MakeGraph_UseGParam@DxLib@@YAHPAUSETUP_GRAPHHANDLE_GPARAM@1@HHHHHHH@Z) が関数 "int __cdecl TheoraDecode_SetupImage(unsigned long,int,int,int,int)" (?TheoraDecode_SetupImage@@YAHKHHHH@Z) で参照されました。 new C:\vcproject\new\DxUseCLib_vs2015_x86_MTd.lib(DxUseCLibOgg.obj) 1 エラー LNK1120 3 件の未解決の外部参照 new C:\vcproject\new\Debug\new.exe 1 知識が足りず・・・ アドバイスを頂けますでしょうか? よろしくお願いいたします
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.15 )
名前:通貨 日時:2018/10/04 07:42

確かにビルドできませんが今回の目的はマルチメディアAPIの基本挙動を見られればよいので 旧バージョンでビルドして確認するとよいかと思います。 恐縮ですが、この症状が発生したとき、DxLibを使っていない他のDirectInput専用 ソフトではどうなのかを確認するのも重要ではと思います。DxLib以外でもなるのなら 対応困難と思われるからです。 DirectX SDKのサンプルや解説サイトのサンプルが確実でしょう。
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.16 )
名前:たろう 日時:2018/10/04 16:54

DXライブラリ Ver3.19dのままで確認しました SetUseXInputFlag( FALSE ) ; と SetUseDirectInputFlag( FALSE ) ; が追加されたテストプログラムの場合 ゲームパッドが反応しなくなることはありませんでした。 SetUseXInputFlag( FALSE ) ; と SetUseDirectInputFlag( FALSE ) ; を削除して ゲームパッドが反応しなくなるまで繰り返し、反応しなくなった上で再びそれらを戻すと ゲームパッドの反応も戻るので間違いないようです。 もちろんその状態で再び2つを削除すると反応しなくなります。 またDXライブラリを使用していない他のソフトでの確認につきましては ゲームパッドが反応しなくなった状態で ttp://www.dlsite.com/home/work/=/product_id/RJ221919.html を試した所、反応しました。 そしてそのままテストプログラムを起動すると反応は戻っていません。 以上です。m(_ _)m
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.17 )
名前:通貨 日時:2018/10/05 05:38

たろうさんが色々試してくださった結果を元に立てた仮説なのですが、 DxLibアプリが『DirectInputを認識しない』のではなく『XInputを誤検知している』のではないでしょうか?
メンテ

Page: 1 | 2 |

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

   クッキー保存