问题标签 [directinput]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
directinput - DirectInput SetDataFormat 错误
我想编写一个与操纵杆交互的程序。我正在使用标准 SDK 示例和 dinput8.lib。
这是代码。GUID 取自 enumJoysticksCallback 函数。我扔掉所有东西以尽量减少出错的机会。
程序在此字符串上失败
hr 返回 0x80070216,这似乎是 ERROR_ARITHMETIC_OVERFLOW。
&c_dfDIJoystick 而不是 &c_dfDIJoystick2 也无济于事。
鼠标也是一样的...
hr 再次返回 0x80070216 示例应用程序“Joystick.exe”工作没有问题。
GetCapabilities 返回一些绝对不正确的随机内容
- Embarcadero RAD Studio XE5/Borland CPP Builder 6(两者的结果相同)
- DirectInput Saitek Rudder Pedals/Saitek X52 控制器(均为崩溃程序)
- 32位应用
- 标准 SDK 示例“操纵杆”
怎么了?错误不匹配与直接输入相关的任何内容。设备创建时没有错误,但任何使用它都会导致错误。
谢谢!
更新:SetCooperativeLevel 函数返回 0x80070006,即 ERROR_INVALID_HANDLE
c++ - Typedef 警告和语法错误 LPINPUT
我在编译一些使用 Direct Input 8 的代码时遇到问题。我的代码中的其他所有内容都可以正常工作,但是当编译输入代码时,会弹出这一系列警告和错误。
这是在 Visual Studio 2012 中。关于可能导致这种情况的任何想法?我检查了我的其余代码是否缺少分号和逗号,但我找不到任何东西。你们以前有过类似的问题吗?
这是winuser.h中的周围行
Input.H 中的电流包括
Input.cpp 只包含 Input.H
c++ - 在游戏中捕捉用户输入的最佳方式
我试图找出在 Windows 的 OpenGL 游戏中使用用户输入的最佳方法。我有四个选择:
(1)只需在主消息循环中查看游戏窗口的消息,其中还包含渲染,如下所示:
这是大多数 OpenGL 教程中使用的方法。这种方法的最大问题在于 FPS 依赖性。
(2)在带有 WH_KEYBOARD_LL / WH_MOUSE_LL 的单独线程中使用SetWindowsHookEx :
这种方法允许我每秒查看任意数量的消息,但对我来说这似乎太不自然了 + 它会钩住系统中的整个用户输入,这对我来说似乎也不合适。
(3)与 (2) 相同,但使用 WH_KEYBOARD / WH_MOUSE。需要一个单独的 .dll,这似乎是一种开销。
(4)使用DirectInput。没有尝试过,但从我在文档和教程中看到的内容来看,这可能是最好的方法 + 我们也可以轻松地从游戏手柄捕获输入。
问题是我正在尝试构建 OpenGL 游戏,而 DirectInput 是 DirectX 的一部分。
所以,我的问题是——哪种方式是处理用户输入的正确方式?或者也许我错过了一些方法?
c++ - 使用 Windows 消息和 directx 9 处理键盘输入
我到处读到使用 Windows 消息比 DirectInput 更可取。尽管如此,还是有很多 DirectInput 教程,但几乎没有任何关于在 Windows 消息传递中处理键盘的教程。在没有找到任何好的来源后,我开始自己尝试。
如果按键被按下,我制作了两个 256 成员 bool 数组来保存。我想这样做,以便我可以查看 m_bKeyDown[256] 以查看此帧是否按下了某个键,并查看 m_bKeyDown 是否已按下它,但未按下此帧。我的 MsgProc switch 语句如下:
}
我通过在按住 F1 键时让它发出声音来测试它。理想情况下,在我松开按钮并再次按下之前,声音不应重复:
不过似乎没有什么区别,当我按住按钮时声音会重复。如何修复循环或设置 Windows 消息传递来执行此操作?我是在正确的轨道上还是应该走向完全不同的方向?
编辑:我使用了 iedoc 的以下示例,现在效果更好,但是声音在停止之前仍然播放了三遍,就像由于某种原因有延迟一样。知道如何避免这种情况吗?
joystick - DirectInput、多个操纵杆、多个用户
我的情况是我有多个来自同一制造商的操纵杆输入设备。这个想法是您设置它们一次,然后任何用户都可以登录并玩,而无需再次设置它们。问题是如何唯一标识每个棒,以便在运行时将每个棒与正确保存的配置相关联。我正在使用 DirectInput,因为这些是操纵杆,而不是游戏手柄。
问题是,尽管此处以及其他 MSDN 页面声明了什么,但 InstanceGUID 仅对每个用户是唯一的,而不是每台机器!至少这是我所看到的,这似乎被这里的另一张海报所证实。理想情况下,我希望新用户能够登录并使用现有设置运行,但我看不到任何方法可以将正确的操纵杆与正确的保存按钮映射相关联,而没有可靠的不会更改的 GUID(并且这对于两个棒来说都不一样,比如产品 GUID)。
如果有帮助的话,所有这些摇杆都是 USB 游戏杆。
也许有一种方法可以可靠地枚举这些棍子?但是如果不了解如何扫描 USB 端口以查找操纵杆的底层架构,我不确定我是否总是可以假设“第一个”棒实际上是每个用户的第一个棒,或者我是否拔下棒并将其重新插入在,甚至到同一个端口。
更新: 本文包含 InstanceId 是每台计算机而不是每用户的声明。
c++ - C++ 中的游戏更新(线程或计时器)?
最近我正在尝试自己创建一个游戏,现在我遇到了一个问题......我想以每秒 60 次的速度渲染我的游戏,这很好,但是我使用 Directinput8 来获取我的键盘和鼠标设置起,我调试我的游戏...我发现我的键盘每秒也更新 60 次。例如,我按“UP”,我的菜单就疯了!我知道我可以使用一些变量来解决这个问题,但我也听说 Timer 和 Threads 很有帮助,我可以问一些曾经做过游戏的人或者知道我应该怎么做给我一些建议吗?任何事情都会有所帮助!谢谢!:) 顺便说一句,我知道有一些很酷的库(比如 Allegro?)已经完成,也许有人可以告诉我他们是如何克服这个“更新和渲染”问题的?
c++ - 在窗口模式下设置/获取我的绝对鼠标位置
我搜索了,但大多数帖子只是告诉我我已经拥有什么,所以下面基本上是我现在的代码:
任何告诉我如何获得绝对位置的帖子都只是说使用最后两行。但是我的程序是窗口化的,鼠标可以在屏幕上的任何地方启动。
即如果我的鼠标碰巧在我的屏幕中央,它就变成了位置 0,0。我基本上只是希望我的窗口(不是我的屏幕)的左上角是我的 0,0 鼠标坐标,但是我很难找到任何相关的东西。
谢谢你的帮助!:)
c# - 根据需要多次初始化直接输入
下面的代码使用 SlimDx.dll 来初始化直接输入库。我每次运行只能使用一次,例如,有一个使用此代码的按钮,我想在单击此按钮时多次初始化直接输入,但它没有发生,只有一次单击.
如何解决这个问题?
c# - 从 DirectInput (C#) 接收键盘通知
编辑:看来我自己找到了原因。我刚刚忘记在开始线程之前获取键盘设备。幸运的是,这是一个简单的问题。添加后 kbd.Acquire(); 在线程调用之前,代码开始工作。
然后当然需要相应的 kbd.Unacquire(); 在关闭按钮的处理程序中。
原始问题
我是 DirectInput 和线程的新手。有人可以指导我下面的代码有什么问题。似乎我从来没有收到任何会触发我的事件处理程序线程的通知。
[使用块省略。目前使用 SlimDX 进行 DirectInput]
主窗体类包含所需变量的定义。
怎么了?
c++ - C++ Directx 鼠标输入在失去焦点后表现怪异
您好,在失去窗口焦点(alt+tab / windows 键)后,我的鼠标输入出现了一个小问题。
焦点回到游戏窗口后,鼠标(偏航)动作缓慢且没有响应(由于某种原因,俯仰工作正常)。有时它会动,有时它根本不动。
这是一些代码:
对于那些想知道的人,我刚刚开始使用本教程学习 c++ 和 directx:http ://www.braynzarsoft.net/index.php?p=DX11Lessons (虽然我有相当多的使用 OpenGL + java 的经验。)