トップページ > 記事閲覧
XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。
名前:初心者 日時: 2025/01/29 00:18

表題の通りなのですが、追加で発生条件があります。 1.SetAlwaysRunFlag(true)を指定して、 2.XBOX コントローラーを接続して、(有線の場合は未確認。今から検証したいと思います。) 3.DxLib::GetMouseInput 関数を呼び出す。 → と処理落ちする。 いずれか1つでも満たさない場合は処理落ちしません。 また、DxLib::GetMouseInput 関数の呼び出しが1回でも FPS は下がるのですが、数回呼ぶと目に見えて処理落ちします。 ▼開発環境▼ Windows 11 / Visual Studio 2022 / DxLib 3.24d XBOX MODEL NO.:1914 XBOX コントローラーは Bluetooth にて接続しています。 ▼実行時の画面録画▼ ttps://14.gigafile.nu/0203-b2527f6424cc11976baa3d9c1f09327ea ▼検証用コード▼ ```C++ #include <format> #include <DxLib.h> int WINAPI WinMain(_In_ HINSTANCE, _In_opt_ HINSTANCE, _In_ LPSTR, _In_ int) { DxLib::SetAlwaysRunFlag(true); DxLib::ChangeWindowMode(true); if (DxLib::DxLib_Init() == -1) { return 0; } for (std::uint64_t time = DxLib::GetNowHiPerformanceCount(); DxLib::ProcessMessage() == 0 && DxLib::CheckHitKey(KEY_INPUT_ESCAPE) == 0; ) { for (int i = 0; i < 100; ++i) { const std::uint32_t input = DxLib::GetMouseInput(); } const std::uint64_t delta = DxLib::GetNowHiPerformanceCount() - time; time = time + delta; DxLib::ClearDrawScreen(); DxLib::DrawString(0, 0, std::format(TEXT("FPS: {}"), 1'000'000 / delta).c_str(), 0xffffff); DxLib::ScreenFlip(); } DxLib::DxLib_End(); return 0; } ``` ▼Log(画面録画時のものです)▼ ``` 0:ChangeWindowMode実行 0:ウインドウモードフラグが立てられました 10:DXライブラリの初期化処理開始 14: システムの情報を出力します 16: DXライブラリ Ver3.24d 16: 論理プロセッサの数 : 8 18: OS Windows11 ( Build 26100 ) 121: 現時点のCPU動作速度:大体2.31GHz 122: MMX命令を使用します 123: SSE命令が使用可能です 125: SSE2命令が使用可能です 127: CPUベンダ:AuthenticAMD 136: CPU名:AMD Ryzen 7 3700U with Radeon Vega Mobile Gfx 138: COMの初期化... 成功 150: 非同期読み込み処理の初期化...成功 152: ファイルアクセス処理の初期化...成功 155: メモリ総量:14210.23MB 空きメモリ領域:2453.54MB 156: タイマーの精度を検査します 157: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 158: パフォーマンスカウンターを使用します タイマー精度 : 10000.000000 KHz 160: 163: ソフトの二重起動検査... 二重起動はされていませんでした 165: ウインドウクラスを登録します... 登録に成功しました 167: ウインドウモード起動用のウインドウを作成します 169: ディスプレイ情報のセットアップ開始 172: モニターの数:1 ディスプレイデバイスの数:6 173: No.0 モニター名:\\.\DISPLAY1 1920x1080 32bit 60Hz 96x96dpi 185: ディスプレイ情報のセットアップ完了 186: ウインドウ矩形 ( 624, 249 )-( 1280, 768 ) 197: ウインドウの作成に成功しました 198: ウインドウを表示します 258: IMEを無効にしました 261: ウインドウスタイルをウインドウモード用に変更します... 完了 298: XInput DLL の読み込み中... 成功 308: DirectInput関係初期化処理 309: DirectInput8 の取得を試みます...成功 366: 引き続き初期化処理... 初期化成功 385: ジョイパッドの初期化... 385: XInput 対応コントローラーのチェックを開始します 386: XInput 対応コントローラー No.0 をチェック 395: XInput 対応コントローラー No.0 の接続を確認しました 397: XInput 対応コントローラー No.0 を入力ナンバー 0 で登録します 397: XInput 対応コントローラー No.1 をチェック 399: XInput 対応コントローラー No.1 の接続は確認できませんでした 400: XInput 対応コントローラー No.2 をチェック 402: XInput 対応コントローラー No.2 の接続は確認できませんでした 403: XInput 対応コントローラー No.3 をチェック 404: XInput 対応コントローラー No.3 の接続は確認できませんでした 405: XInput 対応コントローラーのチェック完了 406: DirectInput 対応ジョイパッドの列挙を開始します 523: DirectInput 対応入力装置を検出しました 525: Device Product GUID : 0b13045e,0000,0000,00,00,50,49,44,56,49,44 526: Device Instance GUID : ffc90090,c900,11ee,80,02,44,45,53,54,00,00 527: DirectInputDevice8 の作成... 成功 530: DirectInputDevice の情報を取得します... 成功 532: Device Product Name : Bluetooth LE XINPUT 互換入力デバイス 533: Device Instance Name : Bluetooth LE XINPUT 互換入力デバイス 535: 検出した DirectInput 対応入力装置が Xbox360コントローラーか確認... 不一致 537: 検出した DirectInput 対応入力装置が XboxOneコントローラーか確認... 不一致 540: 検出した DirectInput 対応入力装置が XInput 対応コントローラーか確認... 一致 1591: 検出した DirectInput 対応入力装置の初期化を中断します 1604: DirectInput 対応ジョイパッドの列挙終了 1605: ジョイパッドの初期化は正常に終了しました 1606: マウスデバイスの初期化... 初期化成功 1608: キーボードデバイスの初期化... 初期化成功 1620: DirectInput 関連の初期化は正常に終了しました 1630: WASAPI の初期化を行います 1643: デバイス名 : Speaker (Realtek(R) Audio) 2014: デフォルト遅延時間 : 10.667 ms 2015: 最小遅延時間 : 3.000 ms 2016: 遅延時間 : 10.667 ms 2018: チャンネル数   : 2 ch 2019: 量子化ビット深度 : 32 bit 2020: 有効ビット深度  : 32 bit 2021: サンプリングレート : 48000 Hz 2022: データ形式 : 浮動小数点型 2353: 動作モード : 共有モード 2354: WASAPI の初期化は正常に終了しました 2366: d3d11.dll の読み込み.... 成功 2386: dxgi.dll の読み込み.... 成功 2387: API CreateDXGIFactory2 のアドレスを取得します.... 成功 2388: IDXGIFactory2 を作成します.... 成功 2399: API CreateDXGIFactory6 のアドレスを取得します.... 成功 2401: IDXGIAdapter を列挙 2402: Adapter No.0 Desc:AMD Radeon(TM) RX Vega 10 Graphics VRAM:2032MB 2403: Output Device No.0 Name:\\.\DISPLAY1 ( 0, 0 )-( 1920, 1080 ) 2405: Adapter No.1 Desc:Microsoft Basic Render Driver VRAM:0MB 2406: API D3D11CreateDevice のアドレスを取得します.... 成功 2408: IDXGIAdapter を取得します.... 成功 2410: IDXGIAdapter1 を取得します.... 成功 2412: IDXGIAdapter2 を取得します.... 成功 2414: IDXGIAdapter3 を取得します.... 成功 2416: IDXGIAdapter4 を取得します.... 成功 2417: Direct3D 11 FeatureLevel 11_0 以上を対象とします 2418: ID3D11Device オブジェクトを取得します.... 成功 2466: IDXGIDevice1 を取得します.... 成功 2469: IDXGIDevice1->SetMaximunFrameLatency( 1 ); を実行しました 2470: [ウインドウモード 640x480 ( 640, 275 )-( 1280, 755 )] 2471: IDXGISwapChain2 を作成します.... 成功 2474: IDXGIFactory2->CreateSwapChainForHwnd の戻り値:0x00000000 2475: IDXGIOutput を取得します.... 成功 2478: Graphics Device:AMD Radeon(TM) RX Vega 10 Graphics 2478: 画面のフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 2479: 16bit Zバッファフォーマットは DXGI_FORMAT_D16_UNORM です 2480: 24bit Zバッファフォーマットは DXGI_FORMAT_D24_UNORM_S8_UINT です 2481: 32bit Zバッファフォーマットは DXGI_FORMAT_D32_FLOAT です 2482: 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 2483: 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 2484: アルファ付き 16bit カラーフォーマットは DXGI_FORMAT_B4G4R4A4_UNORM です 2485: アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 2487: アルファテスト用 16bit カラーフォーマットは DXGI_FORMAT_B5G5R5A1_UNORM です 2488: アルファテスト用 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 2489: DXT1テクスチャフォーマットは DXGI_FORMAT_BC1_UNORM です 2489: DXT2テクスチャフォーマットは使えません 2490: DXT3テクスチャフォーマットは DXGI_FORMAT_BC2_UNORM です 2491: DXT4テクスチャフォーマットは使えません 2492: DXT5テクスチャフォーマットは DXGI_FORMAT_BC3_UNORM です 2493: BC7_UNORM テクスチャフォーマットは DXGI_FORMAT_BC7_UNORM です 2493: BC7_UNORM_SRGB テクスチャフォーマットは DXGI_FORMAT_BC7_UNORM_SRGB です 2495: ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 2495: ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 2497: ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 2498: 1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 2498: 1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 2499: 1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 2500: 1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 2501: 2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 2502: 2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 2503: 2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 2504: 2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 2504: 描画用 16bit カラーフォーマットは DXGI_FORMAT_B5G6R5_UNORM です 2505: 描画用 32bit カラーフォーマットは DXGI_FORMAT_B8G8R8X8_UNORM です 2506: 描画用アルファ付き 32bit カラーフォーマットは DXGI_FORMAT_R8G8B8A8_UNORM です 2507: 描画用 ABGR 整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_UNORM です 2508: 描画用 ABGR 浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16B16A16_FLOAT です 2508: 描画用 ABGR 浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32B32A32_FLOAT です 2509: 描画用1チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8_UNORM です 2509: 描画用1チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_UNORM です 2510: 描画用1チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16_FLOAT です 2511: 描画用1チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32_FLOAT です 2512: 描画用2チャンネル整数 8 ビット型カラーフォーマットは DXGI_FORMAT_R8G8_UNORM です 2513: 描画用2チャンネル整数 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_UNORM です 2513: 描画用2チャンネル浮動小数点 16 ビット型カラーフォーマットは DXGI_FORMAT_R16G16_FLOAT です 2515: 描画用2チャンネル浮動小数点 32 ビット型カラーフォーマットは DXGI_FORMAT_R32G32_FLOAT です 2516: 使用する機能レベル:D3D_FEATURE_LEVEL_11_1 2516: 同時にレンダリングできるバッファの数:8 2517: 最大テクスチャサイズ 幅:16384 高さ:16384 2519: 標準描画用の頂点バッファの作成.... 成功 2520: シェーダーコード関係の初期化.... 成功 2558: 各種シェーダー用定数バッファの作成.... 成功 2561: 各種 ID3D11InputLayout の作成.... 成功 2607: 画像の単純転送処理の初期化... 成功 2608: 深度バッファを作成します.... 成功 2616: フォントの初期化を行います 2619: フォントの初期化は正常に終了しました 2689: 文字コードバッファの初期化を行います... 完了しました 2710:DXライブラリの初期化処理終了 45788:ジョイパッドの初期化... 45789: XInput 対応コントローラーのチェックを開始します 45791: XInput 対応コントローラー No.0 をチェック 45792: XInput 対応コントローラー No.0 の接続は確認できませんでした 45794: XInput 対応コントローラー No.1 をチェック 45796: XInput 対応コントローラー No.1 の接続は確認できませんでした 45797: XInput 対応コントローラー No.2 をチェック 45799: XInput 対応コントローラー No.2 の接続は確認できませんでした 45800: XInput 対応コントローラー No.3 をチェック 45802: XInput 対応コントローラー No.3 の接続は確認できませんでした 45805: XInput 対応コントローラーのチェック完了 45807: DirectInput 対応ジョイパッドの列挙を開始します 45918: DirectInput 対応ジョイパッドの列挙終了 45918:ジョイパッドの初期化は正常に終了しました 59598:ジョイパッドの初期化... 59599: XInput 対応コントローラーのチェックを開始します 59601: XInput 対応コントローラー No.0 をチェック 59609: XInput 対応コントローラー No.0 の接続を確認しました 59612: XInput 対応コントローラー No.0 を入力ナンバー 0 で登録します 59613: XInput 対応コントローラー No.1 をチェック 59615: XInput 対応コントローラー No.1 の接続は確認できませんでした 59616: XInput 対応コントローラー No.2 をチェック 59617: XInput 対応コントローラー No.2 の接続は確認できませんでした 59620: XInput 対応コントローラー No.3 をチェック 59621: XInput 対応コントローラー No.3 の接続は確認できませんでした 59622: XInput 対応コントローラーのチェック完了 59624: DirectInput 対応ジョイパッドの列挙を開始します 59955: DirectInput 対応入力装置を検出しました 59962: Device Product GUID : 0b13045e,0000,0000,00,00,50,49,44,56,49,44 59968: Device Instance GUID : ffc90090,c900,11ee,80,02,44,45,53,54,00,00 59977: DirectInputDevice8 の作成... 成功 59992: DirectInputDevice の情報を取得します... 成功 60028: Device Product Name : Bluetooth LE XINPUT 互換入力デバイス 60119: Device Instance Name : Bluetooth LE XINPUT 互換入力デバイス 60302: 検出した DirectInput 対応入力装置が Xbox360コントローラーか確認... 不一致 60498: 検出した DirectInput 対応入力装置が XboxOneコントローラーか確認... 不一致 60638: 検出した DirectInput 対応入力装置が XInput 対応コントローラーか確認... ジョイパッドの初期化... 60698: XInput 対応コントローラーのチェックを開始します 60746: XInput 対応コントローラー No.0 をチェック 60751: XInput 対応コントローラー No.0 の接続を確認しました 60757: XInput 対応コントローラー No.0 を入力ナンバー 0 で登録します 60766: XInput 対応コントローラー No.1 をチェック 60771: XInput 対応コントローラー No.1 の接続は確認できませんでした 60775: XInput 対応コントローラー No.2 をチェック 60779: XInput 対応コントローラー No.2 の接続は確認できませんでした 60788: XInput 対応コントローラー No.3 をチェック 60832: XInput 対応コントローラー No.3 の接続は確認できませんでした 60851: XInput 対応コントローラーのチェック完了 60869: DirectInput 対応ジョイパッドの列挙を開始します 61289: DirectInput 対応入力装置を検出しました 61297: Device Product GUID : 0b13045e,0000,0000,00,00,50,49,44,56,49,44 61303: Device Instance GUID : ffc90090,c900,11ee,80,02,44,45,53,54,00,00 61315: DirectInputDevice8 の作成... 成功 61407: DirectInputDevice の情報を取得します... 成功 61471: Device Product Name : Bluetooth LE XINPUT 互換入力デバイス 61476: Device Instance Name : Bluetooth LE XINPUT 互換入力デバイス 61485: 検出した DirectInput 対応入力装置が Xbox360コントローラーか確認... 不一致 61499: 検出した DirectInput 対応入力装置が XboxOneコントローラーか確認... 不一致 61511: 検出した DirectInput 対応入力装置が XInput 対応コントローラーか確認... 一致 63379: 検出した DirectInput 対応入力装置の初期化を中断します 63406: DirectInput 対応ジョイパッドの列挙終了 63411: ジョイパッドの初期化は正常に終了しました 64805: 一致 64810: 検出した DirectInput 対応入力装置の初期化を中断します 64889: DirectInput 対応ジョイパッドの列挙終了 64897:ジョイパッドの初期化は正常に終了しました 74032:ジョイパッドの初期化... 74033: XInput 対応コントローラーのチェックを開始します 74034: XInput 対応コントローラー No.0 をチェック 74037: XInput 対応コントローラー No.0 の接続は確認できませんでした 74041: XInput 対応コントローラー No.1 をチェック 74042: XInput 対応コントローラー No.1 の接続は確認できませんでした 74044: XInput 対応コントローラー No.2 をチェック 74045: XInput 対応コントローラー No.2 の接続は確認できませんでした 74047: XInput 対応コントローラー No.3 をチェック 74049: XInput 対応コントローラー No.3 の接続は確認できませんでした 74051: XInput 対応コントローラーのチェック完了 74053: DirectInput 対応ジョイパッドの列挙を開始します 74223: DirectInput 対応ジョイパッドの列挙終了 74224:ジョイパッドの初期化は正常に終了しました 90802:ジョイパッドの初期化... 90805: XInput 対応コントローラーのチェックを開始します 90811: XInput 対応コントローラー No.0 をチェック 90828: XInput 対応コントローラー No.0 の接続を確認しました 90844: XInput 対応コントローラー No.0 を入力ナンバー 0 で登録します 90851: XInput 対応コントローラー No.1 をチェック 90857: XInput 対応コントローラー No.1 の接続は確認できませんでした 90866: XInput 対応コントローラー No.2 をチェック 90877: XInput 対応コントローラー No.2 の接続は確認できませんでした 90881: XInput 対応コントローラー No.3 をチェック 90884: XInput 対応コントローラー No.3 の接続は確認できませんでした 90888: XInput 対応コントローラーのチェック完了 90890: DirectInput 対応ジョイパッドの列挙を開始します 91220: DirectInput 対応入力装置を検出しました 91223: Device Product GUID : 0b13045e,0000,0000,00,00,50,49,44,56,49,44 91226: Device Instance GUID : ffc90090,c900,11ee,80,02,44,45,53,54,00,00 91228: DirectInputDevice8 の作成... 成功 91235: DirectInputDevice の情報を取得します... 成功 91242: Device Product Name : Bluetooth LE XINPUT 互換入力デバイス 91245: Device Instance Name : Bluetooth LE XINPUT 互換入力デバイス 91246: 検出した DirectInput 対応入力装置が Xbox360コントローラーか確認... 不一致 91252: 検出した DirectInput 対応入力装置が XboxOneコントローラーか確認... 不一致 91258: 検出した DirectInput 対応入力装置が XInput 対応コントローラーか確認... 一致 92633: 検出した DirectInput 対応入力装置の初期化を中断します 92658: DirectInput 対応ジョイパッドの列挙終了 92660:ジョイパッドの初期化は正常に終了しました ```
メンテ

Page: 1 |

Re: XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。 ( No.1 )
名前:初心者 日時:2025/01/29 00:27

有線での接続状態で検証用コードを実行したところ、FPS の低下は発生しませんでした。 問題に関係しているか分かりませんが、マウスの型番は Logicool G304 です。
メンテ
Re: XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。 ( No.2 )
名前:管理人 日時:2025/01/30 00:14

手元の環境で載せていただいたプログラムを実行して XBOXコントローラーを Bluetooth接続して 試してみたのですが、特に処理落ち現象は発生しませんでした 幾つかご質問させてください 1.動画では何回かコントローラーの接続ログが発生していますが、プログラム実行中に   コントローラーを接続したり切断したりされているのでしょうか? 2.SetAlwaysRunFlag( TRUE ); の場合のみ発生するとのことですが、アップしていただいた動画を   録画している際はプログラムのウィンドウは非アクティブな状態( SetAlwaysRunFlag( TRUE ); を   実行していなければ動作が止まる状態 )だったのでしょうか?
メンテ
Re: XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。 ( No.3 )
名前:初心者 日時:2025/01/30 01:16

管理人様、ご返信ありがとうございます。 1.に対する回答 はい。コントローラーを接続したり切断したりしています。 その際、PCのBluetooth機能を停止することによって切断しているのではなく、コントローラーの電源を切っています。 2.に対する回答 はい。録画時のウィンドウは非アクティブであると思います。 ただ、ウィンドウのアクティブ、非アクティブに関わらず、同様に処理落ちが発生します。
メンテ
Re: XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。 ( No.4 )
名前:管理人 日時:2025/01/30 23:44

ご回答ありがとうございます > はい。コントローラーを接続したり切断したりしています。 なるほど、つまりFPSが3などになっている時がコントローラーを接続している状態なのですね 確かにかなりの低下ぶりですね… > はい。録画時のウィンドウは非アクティブであると思います。 > ただ、ウィンドウのアクティブ、非アクティブに関わらず、同様に処理落ちが発生します。 非アクティブのときとアクティブのときで若干入力状態取得の処理が 変化するので、その辺りが関係しているかとも思いましたが、 アクティブのときでも非アクティブのときでもFPSが低下するとのことでしたら 関係は無さそうですね… 有線接続にするとFPSが低下しないとのことですので、Bluetooth レシーバーか お使いのコントローラーに問題がある可能性が高いような気がしますが、 SetAlwaysRunFlag( TRUE ); を実行しなければFPSが低下しないというのが謎ですね… マウスの入力状態取得には基本的に Windows の標準APIを使用しているのですが、 DxLib_Init() の呼び出し前に SetUseDirectInputFlag( TRUE ); SetDirectInputMouseMode( 1 ); の2行を追加することでマウスの入力状態取得に DirectInput を使用するように することができます DirectInput を使用することで本件の現象が発生しなくなるかもしれませんので、 よろしければ試してみてください m(_ _)m あと、もしかしたらこちらの暫定最新版では本件の現象が直っている可能性が ありますので、よろしければこちらの暫定最新版もお試しになってみてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。 ( No.5 )
名前:初心者 日時:2025/02/06 08:54

管理人様、ご返信ありがとうございます。 出先でしたので返信が遅くなってしまいました。すみません。 利用する DxLib を暫定最新版の 3.24e に変更してみましたが、同様の症状が発生しました。 しかし、お教え頂いた通り DxLib_Init 関数の呼び出し前に SetUseDirectInputFlag(TRUE) と SetDirectInputMouseMode(1) を追加した場合、バージョンに関わらず処理落ちは発生しなくなりました。 ですので、DirectInput でマウス入力を処理しようと思うのですが、WinAPI ではなく DirectInput を利用することによる相違点(特にデメリット)があれば教えて頂きたいです。
メンテ
Re: XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。 ( No.6 )
名前:管理人 日時:2025/02/07 00:34

DirectInput を使用した場合は本件の症状が出なかったとのことで何よりです (・・; > WinAPI ではなく DirectInput を利用することによる相違点(特にデメリット)があれば教えて頂きたいです。 デメリットかどうかはわかりませんが相違点としてはウィンドウが非アクティブな状態でも キー入力やマウスの入力が取得できるところです WinAPI ではDXライブラリのウィンドウが非アクティブな場合は例えキーやマウスのボタンが 押されていても GetMouseInput や CheckHitKey は 0 を返しますが、DirectInput を使用する場合は ウィンドウが非アクティブでもキーやマウスのボタンが押されていれば GetMouseInput や CheckHitKey は ウィンドウがアクティブな場合と同じように 0 以外の値を返します なので、ウィンドウが非アクティブの場合はキーやマウスの入力を無効にしたい場合は GetActiveFlag() の戻り値が FALSE の場合( ウィンドウが非アクティブの場合 )は GetMouseInput や CheckHitKey を行わないようにする必要があります
メンテ
Re: XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。 ( No.7 )
名前:初心者 日時:2025/02/07 11:37

管理人様、ご返信ありがとうございます。 WinAPI での入力取得にはいくつかの方法があるかと思いますが、DxLib ではどの方法が採用されていますか? 私が知る限りでは3パターンあるのですが、下記のいずれかでしょうか? 1.Raw Input (RegisterRawInputDevices で登録したデバイスから取得する方法) 2.WM_KEYDOWN や WM_MOUSEMOVE 等のウィンドウメッセージで取得する方法 3.GetKeyState で取得する方法
メンテ
Re: XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。 ( No.8 )
名前:管理人 日時:2025/02/08 00:01

> WinAPI での入力取得にはいくつかの方法があるかと思いますが、DxLib ではどの方法が採用されていますか? DXライブラリでは『3.GetKeyState で取得する方法』を使用しています
メンテ
Re: XBOX コントローラーを接続して GetMouseInput 関数を呼び出すと処理落ちする。 ( No.9 )
名前:初心者(解決済み) 日時:2025/02/11 15:39

管理人様、ご返信ありがとうございます。 本件は DirectInput を使用することによって解決とさせて頂きます。
メンテ

Page: 1 |

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

   クッキー保存