问题标签 [gamepad]
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.
c++ - 如何在未聚焦的窗口上接收 XInput 游戏手柄状态?
场景:我已经为我的四轴飞行器编写了一些基本的控制程序。基本上,我使用连接了游戏手柄的笔记本向我的四轴飞行器发送命令,两者都通过无线电相互连接。这个设置工作得非常好,但是:
问题:我的笔记本电脑上运行的 Win32 应用程序如何接收游戏手柄状态更改,即使窗口不在焦点上?我知道像 AutoHotKey 和 AutoIt 之类的一些程序正好提供了这一点,但是我在官方 XInput 文档和互联网上都找不到任何文档。
问题是,我有时也在同一个笔记本上同时使用 ArduPilot 的 Mission Planner 软件。所以每次我想在 Mission Planer 中查看一些遥测数据时,处理游戏手柄内容的应用程序窗口就会失去焦点,并且它停止接收游戏手柄状态变化,这很烦人,而且,老实说,也有点危险,因为我应该一直有一个工作无线电控制器。
那么,有没有办法将游戏手柄 XInput “锁定”到特定的窗口句柄?(Win32) 应用程序是用 C++ 和 Visual Studio 编写的。
编辑:我使用本机 XInput API,因此我使用 XInputGetState()。我的消息循环旨在每次没有要翻译的消息时轮询 XInputGetState()-/DispatchMessage(),并且使用非阻塞 PeekMessage() 轮询 WinMessage。
android - Android上的多个游戏控制器
根据该网站https://developer.android.com/training/game-controllers/multiple-controllers.html,Android 似乎支持多个游戏手柄。实际上,当多个输入设备事件同时发生时它不起作用。例如,当 player1 和 player2 同时按下向上按钮时,dipathKeyEvents 会发生如下所示。
D/dispatchKeyEvent(12736): device:6,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:6,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:6,action:ACTION_DOWN ,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:6,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:1,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:1 ,action: ACTION_UP ,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:1,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:1,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP
并且 device:6 的 ACTION_UP 从未发生过。
他们应该是这样的
D/dispatchKeyEvent(12736): device:6,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:1,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:6,action:ACTION_DOWN ,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:1,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:6,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP D/dispatchKeyEvent(12736): device:1 ,action:ACTION_DOWN,keyCoe:KEYCODE_DPAD_UP
有没有人可以管理多个控制器?NativeActivity 是否解决了这个问题?
我的环境是
- 设备:NVIDIA Shield TV
- controller1:屏蔽控制器
- controller2:Playstation 3 控制器通过 USB 连接
- 操作系统:安卓电视
android - 需要游戏手柄 - android 电视 - 发布应用
我已经在支持游戏手柄的安卓电视上上传了应用程序,但这不是必需的。不幸的是,谷歌游戏商店显示需要垫。我知道这是带有清单的东西,但对我来说看起来不错。
我想这是重要的部分
使用功能 android:name="android.hardware.gamepad" android:required="false"
javascript - Moga Power Pro,HID 模式,Chrome 46 for Android
我在这里编写了一个绑定到游戏手柄状态的小型 Aurelia 应用程序:
http://davisj.github.io/challenge/
我在连接到 Windows 7 计算机的 HID 模式下使用 Moga Power Pro 开发了它。但是,当我在 Nexus 5 (Marshmallow) 上的 Chrome 46 中打开它时,它未能检测到相同的游戏手柄。我可以确认游戏手柄测试器应用程序也无法检测到游戏手柄。
这是一个已知的问题?有解决方法吗?我可以在某处报告和跟踪问题吗?
我特别惊讶,因为游戏手柄在 Windows 上不受支持,但在 iOS 上的 Android 上得到很好的支持。
python-3.4 - RPi 中的 Python 3 出错
首先,对不起,如果我的英语不好或有任何问题,这是我的第一个“帖子”。
我正在尝试使用 USB 游戏手柄打开和关闭 LED gpiozero
。
尝试执行程序时出现错误:
错误:文件“script.py”,第 13 行,在 <module> msg += [ord(char)] 类型错误:ord() 预期的字符串长度为 1,但找到了 int
我能做些什么来解决这个问题?
谢谢。
c++ - 如何将控制器模拟摇杆映射到鼠标
好的,所以我正在尝试使用游戏板上的模拟摇杆来移动桌面鼠标光标。问题是我需要能够获得与尝试 2 相同的平滑度,但不使用绝对鼠标位置。光标需要相对于其当前位置移动。这样做的原因是许多应用程序(主要是视频游戏)也将鼠标设置为绝对位置。这会导致应用程序和尝试 2 相互争夺鼠标的控制权。
尝试 1(相对)
此解决方案有效,但存在舍入问题,因为 GetCursorPosition 和 SetCursorPosition 基于整数。因此,不会记录小的运动,因为较小的模拟运动总是会被截断。从视觉上看,即使您尝试进行对角线移动,模拟摇杆上的小动作也只会沿 X 或 Y 轴移动鼠标。
尝试 2(绝对)
该解决方案效果很好,鼠标对最小的运动做出反应,并且由于对累积的模拟运动进行插值而非常自然地移动。但是,它将鼠标设置到一个绝对位置 (mouseTargetPosition),使这个解决方案成为一个交易破坏者。
android - 如何区分方向键运动和操纵杆运动?
我需要有两种不同的行为,一种用于 D-pad,另一种用于模拟操纵杆(在同一个游戏手柄上)。
问题是在onGenericMotionEvent
回调中,两者都有相同的信息,MotionEvent
我无法区分它们。
是否可以识别正在使用哪种输入?如何?
tvos - 检测 Siri Remote 上的音量和 Home 键按下情况
检测 tvOS Siri Remote 上的一些按钮按下相对简单:暂停/播放按钮、触摸板区域以及稍微费力的MENU
按钮。但似乎无法检测或覆盖+
和-
按钮、Siri 或主页按钮的功能。
或者有吗?
usb - 如何检测使用 USB HID API 推送的游戏手柄触发器?
当按下游戏手柄按钮并检索游戏手柄状态时,我使用 RawInput + Windows USB HID API 接收 WM_INPUT 消息。
有一个问题:两个触发器在同一轴上工作,这意味着您无法确定是否同时按下了两个触发器。启动 OS Windows 游戏手柄测试应用程序时,我观察到相同的行为。但我需要区分这两个按下的按钮。
请注意,XInput 可以按需要工作,它为两个触发器提供了两个轴,但我不想使用 XInput,因为它仅适用于 XBox 控制器,而且世界上有许多非 Xbox 控制器。
我想一定有一种方法可以通过 USB HID API 读取两个轴,但直到现在我都找不到它。你解决了这个问题吗?
游戏手柄:使用 Xbox 360(但应支持任何其他)。
操作系统:Windows 7。
IDE:Visual Studio 2010。
语言:C++
c - 如何在 Linux 系统中直接处理来自字符设备/游戏手柄的输入?
我正在用 C 语言开发一个程序,它使用USB SNES 控制器在基于 RPM 的发行版上进行输入。是否有任何人都知道的库可以使交互更容易,或者是否有一些工具(joydev?)可以正确读取设备的输入?我不需要整个游戏引擎;它仅用于字符设备的输入。
如果有一个图书馆已经为我做了这件事,那就太好了(我可以自己看看图书馆做了什么),这可以通过一个链接关闭;否则,如果我必须自己这样做,我有几个具体问题:
问题:
- 是否有现有的 C 库可以为我处理我的所有 USB 设备与游戏手柄的交互?我很乐意学习一个新的图书馆。(我的 google-fu 在这里让我失望了,如果这过于明显,我深表歉意)
- 当事件*名称在会话/初始化之间发生变化时,确保您每次都打开正确的字符设备的适当方法是什么?
- 从我的应用程序处理来自这些设备的输入的适当方法是什么?当我们轮询字符设备时,只需确定每个按钮按下的价值并根据该输入执行操作吗?
简而言之,pseduo-C,是这样的吗?
设备如何呈现自身:
据我所知,我可以清楚地看到设备注册正确:
如果我从设备读取,我可以看到它接收到来自设备的中断和输入,只是使用 hexdump:
当我按下一个键(不释放)时,它似乎按预期工作,尽管我无法在没有上下文的情况下破译从缓冲区返回的内容:
释放按钮时,您会收到类似的输出:
那就是上面按下并释放的“向上”按钮。
这项研究:
为了确定其他库是如何做到这一点的,我考虑过pygame
在 python 中做一个 strace 并查看它打开了哪些设备以及它如何读取输入,但我仍在学习如何使用它。我还看到一些关于joydev 的模糊提及,但是,同样,还没有学会如何使用它们。我目前正在这样做,如果我学到任何有价值的东西,我会发布结果。
除此之外,通过 ASCII 和 hexdump 观看按钮按下,我注意到它们具有基于按钮的类似输入,但似乎我认为是上面输出结束时 USB 总线的中断计数(0xf53a 到0xf53c)。这似乎总是在增加,并且,出于我的目的,可能会被丢弃。
还有一种可能是我没有正确安装设备,因为我缺少一些模块或包(再次思考joydev及其应该做什么)。我根本不经常使用 USB,所以这种类型的设备处理对我来说是新的。
搜索了一段时间,我没有看到任何能准确显示我正在寻找的东西,但我很乐意接受重定向到其他问题/主题以供阅读。
先感谢您!