トップページ > 記事閲覧
DXライブラリのDirectInputを更新して欲しいです
名前:kiai 日時: 2014/11/08 18:16

DXライブラリにはいつもお世話になっております。 現在DXライブラリではDirectInput7を使っていると思うのですが、これをDirectInput8に更新して欲しいです。 理由は、DirectInput7ではスティックの入力の精度が何故か低いからです。 下記リンクにどれくらい精度の差があるか動画ファイルを上げておきました。(赤色がDXライブラリで青色がWinAPIです) ttp://ll.la/iOAwmU (キーワード:dxkey) 私はWinAPIのjoyGetPosEx(中身はDirectInput8らしいです)で代用していますが、 環境によってDXライブラリとゲームパッドのIDが異なることがあり、なかなか面倒です。 ゲームにとって操作性はとても重要な要素だと思います。検討をよろしくお願いいたします。 あとこれは仕様かどうか分からないのですが、DXライブラリのProcessMessageが他のDirectXを使用したソフトに反応してソフトを終了させてしまう事があります。 SetWindowUserCloseEnableFlag(FALSE);でこれを回避出来るので特に問題とは思っていなかったのですが、もし仕様でなかったら修正したほうが良いと思います。
メンテ

Page: 1 |

Re: DXライブラリのDirectInputを更新して欲しいです ( No.1 )
名前:管理人 日時:2014/11/08 23:48

精度の違いは DirectInput7 と DirectInput8 の違いではなく、方向入力の無効範囲の違いからくるものだと思います 恐らく DxLib_Init の実行後の箇所に以下の記述を追加すれば joyGetPosEx と同じ挙動になると思います SetJoypadDeadZone( DX_INPUT_PAD1, 0.0 ) ; DirectInput には入力の無効範囲を設定することができ、DXライブラリでは初期状態で無効範囲を 35% としています つまり方向入力用のスティックを 35% 以上傾けないと傾きが 0% として判定されるようになっています ( 2Dのゲームでは無効範囲が無いとスティックを少し傾けただけで入力されたことになってしまい  逆に操作感が悪くなってしまうので、初期状態で無効範囲を 35% に設定しています ) この無効範囲を 0% にすることでkiaiさんのテストで発生していた joyGetPosEx との差異が無くなると思いますので、 よろしければお試しください m(_ _)m あと、関数リファレンスに SetJoypadDeadZone が無かったので追加しました、関数の宣言などはこちらをご参照ください http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_input.html#R5N37 > DXライブラリのProcessMessageが他のDirectXを使用したソフトに反応してソフトを終了させてしまう事があります。 こちらの現象は確認したことがありません、よろしければその現象が発生する DirectX のソフトを教えて頂けないでしょうか?
メンテ
Re: DXライブラリのDirectInputを更新して欲しいです ( No.2 )
名前:kiai 日時:2014/11/09 00:58

返答ありがとうございます。無効範囲の設定があったんですね。無事に動作しました!重ねてありがとうございます。 AnotherBoundNeoというFPSゲームがフリーソフトであるのですが、こちらでソフトが終了してしまうことを今確認しました。 DXライブラリで作ったソフトを起動しておいて、さらにゲームを起動させるとソフトが終了してしまいます。 以下がそのコードです。書いていて気がついたのですが、SetGraphModeをコメントアウトすると問題なく動いたので、SetGraphModeが原因かと思います。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { SetGraphMode(500, 500, 32); ChangeWindowMode(TRUE); if (DxLib_Init() == -1) { return -1; } SetDrawScreen(DX_SCREEN_BACK); while (!ProcessMessage()){ DrawString(0,0,"test comment",GetColor(255,255,255)); ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: DXライブラリのDirectInputを更新して欲しいです ( No.3 )
名前:管理人 日時:2014/11/09 10:36

現象が発生するソフトのご紹介ありがとうございます ただ、手元の環境でこちらのソフトを起動しようとしたところ 「このパソコンにはMS ゴシックがインストールされていません。 ゲームを起動することができません。」 と表示され起動することができませんでした。 少し調べてみてもこのエラーの対処法は見つからず・・・ すみません、こちらのソフト以外で同様の現象が発生するソフトを教えて頂けないでしょうか? m(_ _;m
メンテ
Re: DXライブラリのDirectInputを更新して欲しいです ( No.4 )
名前:kiai 日時:2014/11/09 13:11

DXライブラリ同士でも発生するみたいです。 >>2のコードの後に以下コードを実行すると再現出来ました。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { SetMainWindowText("test"); if (DxLib_Init() == -1) { return -1; } WaitKey(); DxLib_End(); return 0; }
メンテ
Re: DXライブラリのDirectInputを更新して欲しいです ( No.5 )
名前:管理人 日時:2014/11/10 03:02

再現コードを作成して頂きありがとうございます こちらのプログラムを起動すると No.2 のプログラムが終了する現象ですが、仕様となります DXライブラリではソフトの起動中に他のソフトによって画面モードが変更されると 自動的にプログラムが終了するようになっています
メンテ
Re: DXライブラリのDirectInputを更新して欲しいです ( No.6 )
名前:kiai(解決) 日時:2014/11/10 08:17

仕様でしたか。今まで通りSetWindowUserCloseEnableFlagで回避することにします。 丁寧な対応をありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存