トップページ > 記事閲覧
ゲームパッドが特定の条件で反応しなくなる
名前:たろう 日時: 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.18 )
名前:たろう 日時:2018/10/04 23:35

「この状態のまま」というのは「反応しなくなった状態のまま」という意味でした。 Xinputに切り替えたあとテストプログラムを一旦じないと反応しないので その場合チェックになりませんから、切り替え後に一旦閉じています。 誤解のある表現になりましたm(_ _)m また、ゲームパッドが反応しなくなっている状態で SetUseXInputFlag( FALSE );を入れてテストプログラムを実行しても 反応は戻らないままでした 当初と違い異常が起こりにくくなっていますし (※いつ再現出来るかわからない鉄拳閉じるを繰り返すのは苦行です^^;) 他の方が同じ症状を訴えておらず たぶんまた、私の使用環境に原因がある可能性が高いです あまりこの件にお手間をおかけしては申し訳ありませんので、 何か偶然わかるような機会があるまで保留していただければ幸いです よろしくお願いいたします
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.19 )
名前:管理人 日時:2018/10/05 01:05

> たろうさん > DxLibVCTest.zipを適用後 > 早速試してみようと思ったのですが > ビルドできないようです。 すみません、誤って正常にビルドができないファイルをアップしてしまっていました 正常にビルドできるように修正したものをアップしましたので 大変申し訳ありませんがもう一度ダウンロードしてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 > またDXライブラリを使用していない他のソフトでの確認につきましては > ゲームパッドが反応しなくなった状態で > ttp://www.dlsite.com/home/work/=/product_id/RJ221919.html > を試した所、反応しました。 こちらのソフトも『マルチメディアAPI』を使用している可能性があるので、 こちらのソフトで件の状態でゲームパッドが反応するかどうかは判断材料にはできません… > あまりこの件にお手間をおかけしては申し訳ありませんので、 > 何か偶然わかるような機会があるまで保留していただければ幸いです > よろしくお願いいたします あれ? すみません、私としては 『SetUseXInputFlag( FALSE ) ; と SetUseDirectInputFlag( FALSE ) を実行して「マルチメディアAPI」を使用するようにする』 で本件はひとまず解決と考えているのですが、それでは問題がありますでしょうか? > 通貨さん > たろうさんが色々試してくださった結果を元に立てた仮説なのですが、 > DxLibアプリが『DirectInputを認識しない』のではなく『XInputを誤検知している』のではないでしょうか? JC-U4013S は物理スイッチによって明確に XInputモードと DirectInputモードに切り替えられるようなので、 DirectInputモードにしているにも関わらず XInput対応のゲームパッドとして検出される可能性は低いと思います
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.20 )
名前:たろう 日時:2018/10/05 01:59

すみません『マルチメディアAPI』というものを知らなかったので これを受け取れるかどうかから判断して、何かを修正するような話だと勘違いしていました。 たとえばXinput専用のコントローラーからの入力を受ける場合などに SetUseXInputFlag( FALSE ) ;SetUseDirectInputFlag( FALSE ) ;とする場合と しない場合とで、例えば受け取る数値が変わったり、何か副作用が出る可能性などが心配なのですが そういう問題はございませんでしょうか? 知識が足りず、教えていただけると助かりますm(_ _)m また、 頂いたバージョンのDXライブラリを上のテストプログラムでビルドすると問題ないのですが ほかで作っている自前のゲームのプログラムでビルドすると以下のエラーが出るようです。 エラー LNK2001 外部シンボル ""public: __thiscall D_CTransInPlaceFilter::D_CTransInPlaceFilter(wchar_t *,class D_IUnknown *,struct _GUID const &,long *,bool)" (??0D_CTransInPlaceFilter@@QAE@PA_WPAVD_IUnknown@@ABU_GUID@@PAJ_N@Z)" は未解決です。 Test C:\all in one\vcproject\template_20180804\DxUseCLibW_vs2015_x86_MT.lib(DxUseCStrmBaseFilter.obj) 1 Ver 3.19dまでは問題ありませんでした。 ご確認いただけますでしょうか? よろしくお願いいたしますm(_ _)m
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.21 )
名前:管理人 日時:2018/10/07 02:00

> たとえばXinput専用のコントローラーからの入力を受ける場合などに > SetUseXInputFlag( FALSE ) ;SetUseDirectInputFlag( FALSE ) ;とする場合と > しない場合とで、例えば受け取る数値が変わったり、何か副作用が出る可能性などが心配なのですが > そういう問題はございませんでしょうか? 知識が足りず、教えていただけると助かりますm(_ _)m 受け取る数値には変化があるかもしれません( 例えば Ry に代入されていたものが Rz になる等 ) あと振動機能が使えません > また、 > 頂いたバージョンのDXライブラリを上のテストプログラムでビルドすると問題ないのですが > ほかで作っている自前のゲームのプログラムでビルドすると以下のエラーが出るようです。 うーん、駄目でしたか… 手元の環境ではエラーは確認できなかったのですが、フルコンパイルすると1時間以上掛かるので変更点に 関係のない libファイルはコンパイルしなかったのが原因かもしれません… 外部ライブラリ( zlib や libjpeg など )以外を全部コンパイルし直したものをこちらにアップしましたので、 何度もお手数で申し訳ありませんが、よろしければ再度ダウンロードしてください m(_ _;m ( こちらを試す際は『リビルド』でコンパイルしてください ) https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 こちらで駄目でしたら… zlib や libjpeg など外部ライブラリも含めて全部再コンパイルしてみます (_ _;
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.22 )
名前:通貨 日時:2018/10/07 12:59

再現して確認した結果、DxInputWin.cppのEnumJoypadProcとRefreshInputDeviceAcquireStateにある  SetCooperativeLevel(NS_GetMainWindowHandle(), D_DISCL_FOREGROUND | D_DISCL_EXCLUSIVE); の部分を  SetCooperativeLevel(NS_GetMainWindowHandle(), D_DISCL_FOREGROUND | D_DISCL_NONEXCLUSIVE); にしてライブラリごとビルドし直せば、Activeの時も取得できるようになる。 面倒なので管理人さんがコメントされたようにWINMM APIを使うのが良いと思われる。(FFBは使えなくなる)
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.23 )
名前:たろう 日時:2018/10/07 23:29

もしかすると自分が何かミスをして起こっている現象なんじゃないかという疑いもあったので 通貨さんも、再現できたようでよかった(?)です。 頂いたバージョンのDXライブラリを「ほかで作っている自前のゲームのプログラム」 で試した所、上と全く同じ文言のエラーがまた出ました。 すみません、またお手数をおかけいたします。よろしくお願いいたしますm(_ _)m
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.24 )
名前:管理人 日時:2018/10/09 02:57

> 通貨さん ご情報ありがとうございます > 再現して確認した結果、DxInputWin.cppのEnumJoypadProcとRefreshInputDeviceAcquireStateにある >  SetCooperativeLevel(NS_GetMainWindowHandle(), D_DISCL_FOREGROUND | D_DISCL_EXCLUSIVE); > の部分を >  SetCooperativeLevel(NS_GetMainWindowHandle(), D_DISCL_FOREGROUND | D_DISCL_NONEXCLUSIVE); > にしてライブラリごとビルドし直せば、Activeの時も取得できるようになる。 ライブラリのソースを確認した限りでは、かなり昔のことで自分もよく覚えていないのですが DISCL_NONEXCLUSIVE を使用していた形跡( DISCL_NONEXCLUSIVE を使うコードがコメントアウトされている )があるので DISCL_NONEXCLUSIVE を使用すると何か不都合があった可能性もあるのですが、少なくとも今回少し調べてみた限りでは その理由が見つからなかったのでとりあえず DISCL_NONEXCLUSIVE を使用するようにしようと思います > たろうさん > 頂いたバージョンのDXライブラリを「ほかで作っている自前のゲームのプログラム」 > で試した所、上と全く同じ文言のエラーがまた出ました。 お試しいただきありがとうございます、そしてすみません m(_ _;m 手元でも文字セットを Unicode にしてコンパイルしたところ No.20 に載せていただいたエラーが発生しました いつからこのようなエラーが発生する状態になっていたのかまでは確認できていませんが、おそらく修正できたと 思いますので、何度も本当に申し訳ありませんが、よろしければこちらをお試しください 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.25 )
名前:通貨 日時:2018/10/09 22:02

すみません、うっかりしていましたが、NONEXCLUSIVEにすると↓にあるようにFFBが使えなくなるのでした。   msdn.microsoft.com/ja-jp/library/cc351774.aspx   「いずれのフォース フィードバック デバイスにも、排他協調レベルが必要である。」 実際、パッドJC-U4013SをDInputモードにした場合、 ・PC起動 ・旧DxLibでビルドしたアプリでは、パッドは振動する ・Steam版TEKKEN7を起動してタイトルメニューからQUITで終了 ・旧DxLibでビルドしたアプリでは、アクティブ時は一切反応なし ・新DxLibでビルドしたアプリでは、キー入力反応はあるが振動無し となりました。(XInputモードはもちろんOK) 以下、補足です。 ・TEKKEN7自体はXInput/DInput両対応です。 ・Steamアプリ自体を終了したら正常状態に戻ります。やはりSteamアプリが常になにかしているのでしょう。 ・DirectX8 (DirectInput8) で昔作ったアプリでも同じようにTEKKEN7の後はEXCLUSIVEでは動きませんが  NONEXCLUSIVEにすると動くという同じ症状です。 ・DxInputWin.cppのRefreshInputDeviceAcquireState関数ですが、アプリ終了時にも飛んできて初期化判定を  通過してそのまま関数を実行します。終了時は特に何もしなくてもよいかなと思います。
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.26 )
名前:たろう 日時:2018/10/09 23:39

ありがとうございます、たろうです。 知識が足りず話についていけていないのですが、とりあえず 新しく頂いたバージョンは、問題なくビルドできましたので報告させていただきます。 よろしくお願いたしますm(_ _)m
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.27 )
名前:管理人 日時:2018/10/11 03:00

> 通貨さん > すみません、うっかりしていましたが、NONEXCLUSIVEにすると↓にあるようにFFBが使えなくなるのでした。 ご情報ありがとうございます そういえばそうでした、失念していました > ・Steamアプリ自体を終了したら正常状態に戻ります。やはりSteamアプリが常になにかしているのでしょう。 > ・DirectX8 (DirectInput8) で昔作ったアプリでも同じようにTEKKEN7の後はEXCLUSIVEでは動きませんが >  NONEXCLUSIVEにすると動くという同じ症状です。 Steamアプリが何かしているのが原因となりますと、やはりSteamアプリ側が改善してくれないと どうしようもなさそうです、恐らく Steamアプリ側が EXCLUSIVE( 排他モード )で DirectInput の ゲームパッドの権限を掴んでしまっているのだと思います ( DXライブラリはウィンドウが非アクティブ時には NONEXCLUSIVE モードに変更するので、それで  非アクティブ時にのみ入力が受け取れるようになるのだと思います ) 対策として EXCLUSIVE での設定に失敗したら NONEXCLUSIVE を試す、というコードを追加してみました 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)」をして下さい) 仮にこれで件の状態でも入力が受け付けるようになったとしても NONEXCLUSIVE では FFBは使えないので やはり完全な解決とはなりませんが… > ・DxInputWin.cppのRefreshInputDeviceAcquireState関数ですが、アプリ終了時にも飛んできて初期化判定を >  通過してそのまま関数を実行します。終了時は特に何もしなくてもよいかなと思います。 確認してみましたが、ご指摘の段階ではまだ DirectInput の終了処理は行われていないので RefreshInputDeviceAcquireState関数 が実行されることについては特に問題はなく、 且つあの段階で終了途中であると判定するには何箇所もプログラムを変更しなければならないので とりあえず今のままにしておこうと思います m(_ _)m > たろうさん お試しいただきありがとうございます 無事ビルドが成功したようで何よりです
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.28 )
名前:通貨 日時:2018/10/11 22:24

確認したところ、なんと問題が発生しなくなったようです!しかも  TEKKEN7  ↓  自作DirectX8 (EXCLUSIVE) ---> 反応せず  ↓  最新DxLib ---> 反応する+振動もOK (DInput)  ↓  自作DirectX8 (EXCLUSIVE) ---> 反応する! というように、たろうさんが書かれていた「joy.cplを起動したら他のアプリも復活する」と同じ状態に なりました。何度か試してみましたが、おそらく大丈夫なのではと思われます。ありがとうございます。 トレースして確認した結果を書いておきます。 @協調レベル分岐は特に効果なし  これはコメントNo.25の時点で気付いていたので、先に書いておくべきでした…  SetCooperativeLevel で D_DISCL_FOREGROUND | D_DISCL_EXCLUSIVE を指定しても、S_OKが返ってくるので  D_DISCL_BACKGROUND | D_DISCL_NONEXCLUSIVE のルートは通りませんでした。 AJoystick->Acquire() を実行すると復活する  EnumJoypadProc()内のどこまで実行すれば 自作DirectX8アプリ が復活するかを確認しながら試しました。  結局、関数最後の Joystick->Acquire を実行したら復活するようです。  しかし、ここの関数は結局、「D_DISCL_FOREGROUND | D_DISCL_EXCLUSIVE を指定してAcquire」という  流れで今までと何も変わらないような… 他に何か変更されたところがあるということでしょうか? とはいえ、少なくとも私の環境では(現時点では)解消されたのではと思われます。ありがとうございます。
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.29 )
名前:たろう 日時:2018/10/13 23:21

NO.27のバージョンでSetUseXInputFlag( FALSE ) ;もSetUseDirectInputFlag( FALSE ) ;も使わず 通常通りのDinput入力で、問題なく使っていたのですがやはりまだ 非アクティブ時にのみ入力出来るという同じ現象が起こるようです。 今回は安心しきっていたので、鉄拳前にゲームパッドの入力を正常に受け取っていたかは確認していなかったのですが 念のため終わった後頂いた確認プログラムの上記2つをコメントアウトしたものをためしたところ 入力を受け付けていませんでした。 しばらく問題なかったので、頻度は減っているのかもしれません とはいえマルチメディアAPIにすればやはり受け付けますし、振動も不要なので とりあえずそれを使おうと思いますm(_ _)m ※すみません、通貨さんと管理人さんのお話が理解できていないため 間違ったことを言っているかもしれません
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.30 )
名前:通貨 日時:2018/10/14 13:16

今やってみましたが、やはりこちらではうまくいきます (TEKKEN7の後に効かなくなる⇒最新DxLib版でビルドしたアプリでは正常に戻る) 違いを確認してみました。DxLibを普通に使う方法、つまり「ライブラリとしてリンクする方法」では たろうさんが言われたように、アクティブ時にパッドが効かないままでした。(最新Temp版) 私は最近、検証のためにライブラリのソースごとフルビルドして挙動を調べることが多いのですが、 そうすると最新Temp版ではアクティブ時に正常に戻ります。(他のDirectX8アプリもOKになる) ■補足 「ライブラリとしてリンクする方法」でも、x64+UnicodeならOKのようです。 (ダメだったのは x86+Unicode)
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.31 )
名前:管理人 日時:2018/10/14 23:05

> 通貨さん ご返信が遅くなり申し訳ありません 調べていただきありがとうございます > EnumJoypadProc()内のどこまで実行すれば 自作DirectX8アプリ が復活するかを確認しながら試しました。 > 結局、関数最後の Joystick->Acquire を実行したら復活するようです。 > しかし、ここの関数は結局、「D_DISCL_FOREGROUND | D_DISCL_EXCLUSIVE を指定してAcquire」という > 流れで今までと何も変わらないような… 他に何か変更されたところがあるということでしょうか? こちらでご報告していない変更点と言うと、DxLib_Init の前で SetUseJoypadVibrationFlag( FALSE ); が 実行されていたら NONEXCLUSIVE を指定するようにする、という変更を最近加えました > 違いを確認してみました。DxLibを普通に使う方法、つまり「ライブラリとしてリンクする方法」では > たろうさんが言われたように、アクティブ時にパッドが効かないままでした。(最新Temp版) >  > 私は最近、検証のためにライブラリのソースごとフルビルドして挙動を調べることが多いのですが、 > そうすると最新Temp版ではアクティブ時に正常に戻ります。(他のDirectX8アプリもOKになる) すみません、こちらのご発言はどのように解釈すれば良いのでしょうか ライブラリのソースをフルビルドした場合は最新Temp版のlibファイルかどうかは関係ないと思うのですが… > 「ライブラリとしてリンクする方法」でも、x64+UnicodeならOKのようです。 > (ダメだったのは x86+Unicode) 謎ですね… 現状では「ライブラリとしてリンクする方法」では x64+Unicode のみ OKということでしょうか? ( x86,x64+マルチバイト、 x86+Unicode は NG? ) あと、すみませんお使いの VisualSutdio のバージョンを教えていただけないでしょうか? m(_ _;m > たろうさん > とはいえマルチメディアAPIにすればやはり受け付けますし、振動も不要なので > とりあえずそれを使おうと思いますm(_ _)m すみません!最後にもうひとつだけ、No.27 のバージョンで、DxLib_Init の前に SetUseJoypadVibrationFlag( FALSE ); を記述して実行してみていただけないでしょうか? こちらを記述することで『振動機能は使えないものの DirectInput で正常に入力を取得できるようになる』かもしれませんので… m(_ _;m
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.32 )
名前:たろう 日時:2018/10/15 04:33

通貨さん、 私の場合異常が出たのはライブラリとしてリンク + x86 + マルチバイトでした 管理人さん、 DxLib_Init の前にSetUseJoypadVibrationFlag( FALSE ); をいれて、とりあえず5、6回試しましたが 問題は起きませんでした。 異常が起こる頻度がそもそも低くなってしまっていて、 また、日によって頻度が変わるような気もしますので、もうしばらく何度か試して また報告させていただきますm(_ _)m
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.33 )
名前:たろう 日時:2018/10/16 19:59

先程、NO.27のバージョンでSetUseXInputFlag( FALSE ) ;もSetUseDirectInputFlag( FALSE ) ;も使わず 通常通りのDinput入力で、さらにSetUseJoypadVibrationFlag( FALSE );も入れない状態で 試しました所、いつもの異常が発生しました。 この状態でDxLib_Init の前にSetUseJoypadVibrationFlag( FALSE ); を記述して実行し直すと 入力を問題なく受け付けました。この状態でまたSetUseJoypadVibr〜を外して実行し直すと、 入力を受け付けなくなるので、SetUseJoypadVibrationFlag( FALSE ); を入れることで 異常が発生した後もウィンドウアクティブ時に入力を受けとる事ができているようです。 これで安心して使用できますので、大変満足しています。ありがとうございましたm(_ _)m 通貨さんには、同じ現象を再現していただいたうえ、アドバイスを頂き大変勉強になりました ありがとうございましたm(_ _)m (※すみません、振動につきましては私は必要ないので「解決」なのですが 後半、お話の内容を理解できていなかったことも有って「解決」を付けていいものかどうか よくわからず・・・)
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.34 )
名前:管理人 日時:2018/10/17 02:20

お試しいただきありがとうございます たろうさんのご希望の状態は実現したようで何よりです (^ ^ > (※すみません、振動につきましては私は必要ないので「解決」なのですが > 後半、お話の内容を理解できていなかったことも有って「解決」を付けていいものかどうか > よくわからず・・・) 通貨さんの環境では件の状態でも正常に動作したとの事ですので、まだ 『Steam 起動中は DirectInput による入力状態取得が正常に行えなくても仕方がない』という結論を 出すのは早いようです…
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.35 )
名前:通貨 日時:2018/10/17 23:11

Visual Studio 2017, Windows10 x64 Proです。 通常の使用方法(ライブラリとして使用)で検証しました。(2018/10/11 Temp版) TEKKEN7を起動したあと、DiretX8で作ったアプリ (Exclusive設定) で例の挙動になったのを確認して 各ビルドの組み合わせで試してみました。アクティブ時に入力を検知するか・振動するか、で判定。 各プログラムは事前にビルドしておいたものです。実施順に記載しています。  x86 + UNICODE  NG  x86 + MBCS    NG  x64 + MBCS    OK  x64 + UNICODE  OK ※上でOKになったのでTEKKEN7を起動して再度反応しない状況にしてから実行 つまり「x86ではNG、x64ではOK」という結果になりました。 ・パッドを抜き差ししても変化なし ・Steamアプリを終了すれば元に戻る 念のためフルビルドして確認しましたが、DxInputWin.cppのEnumJoypadProc()の最後付近にある Joystick->Acquire()で  x64なら DI_OK  x86なら DIERR_OTHERAPPHASPRIO になります。 とは言え、実際、SetUseJoypadVibrationFlagによってNonexclusive処理を行うようにすれば 振動が使えないくらいで他に問題はないでしょうから、特にこれ以上の検証も不要かなとは 思います。(というのは建前で、さすがに面倒になってきたというのが正直なところです)
メンテ
Re: ゲームパッドが特定の条件で反応しなくなる ( No.36 )
名前:管理人 日時:2018/10/18 02:05

ご返答ありがとうございます そして更なるご情報ありがとうございます > つまり「x86ではNG、x64ではOK」という結果になりました。 そうだったのですね、思えば x86 アプリでの DirectInput の挙動と x64 アプリでの DirectInput の挙動が異なる というのは以前他の件でもあったような気がします… > Joystick->Acquire()で >  x64なら DI_OK >  x86なら DIERR_OTHERAPPHASPRIO > になります。 >  > とは言え、実際、SetUseJoypadVibrationFlagによってNonexclusive処理を行うようにすれば > 振動が使えないくらいで他に問題はないでしょうから、特にこれ以上の検証も不要かなとは > 思います。(というのは建前で、さすがに面倒になってきたというのが正直なところです) 通貨さんにお調べいただいた情報を元に Acquire が失敗したら自動的に Nonexclusiveを試すように 処理を変更してみました これがうまく動作すれば SetUseJoypadVibrationFlag や SetUseDirectInputFlag などを使用せず、 仮に本件の現象に遭遇しても振動機能が動作しないだけで入力状態の取得は正常に行える、というところまで 状況を改善できると思います 何度も申し訳ありませんが、よろしければこちらのバージョンで件の状況になっても SetUseJoypadVibrationFlag や SetUseDirectInputFlag を使用せずとも正常に入力状態が取得できるか お試しいただけないでしょうか? m(_ _;m ( とりあえずこれで正常に動作したら、本件の対応はそこまでとしたいと考えています( 振動機能まで 使えるようにするにはやはり Steam 側の処理を変更して貰わなければ駄目だと思いますし… ) ) 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.37 )
名前:たろう(解決) 日時:2018/10/18 19:44

先程旧バージョンのDXライブラリで SetUseJoypadVibrationFlag( FALSE );などを使わずに問題を発生させて その異常をキープした状態で、No.36で頂いたバージョンに変更して リビルド後試した所、ゲームパッドの入力を問題なく受け付けました。 もし必要でしたら、蒸し返して頂くとして 解決を付けさせていただきます。 後半ほぼお二人におまかせするような状態で、管理人さんはさることながら 通貨さんには恐らくかなりご負担をおかけしてしまったかと思います 重ね重ねありがとうございましたm(_ _)m
メンテ

Page: 1 | 2 |

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

   クッキー保存