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を誤検知している』のではないでしょうか?
|
|