如何让游戏手柄joystick的按键映射键盘keyboard按键,方便不支持手柄的pygame游戏可以通过简单设置后用手柄进行操控

本文介绍了如何将游戏手柄的按键映射到键盘按键,以便在不支持手柄的pygame游戏中使用手柄进行操作。通过修改源代码,结合pygame和keyboard模块,实现了手柄事件到键盘事件的映射,简化了对原游戏代码的改动。
摘要由CSDN通过智能技术生成

如何让游戏手柄joystick的按键映射键盘keyboard按键,方便不支持手柄的pygame游戏可以通过简单设置后用手柄进行操控

近日下载了一款Justin Armstrong在github中的马里奥第一关的python游戏,点击作者名字,可以到作者的Github中下载源码。虽然Justin只开发了第一关,但是通过简易的调整,也可以玩出新花样,比如可以设置漫天的加命蘑菇,把每个砖块都设为无敌星,或者变更游戏背景画面,把魂斗罗的地面移到马里奥中,当然还可以增加一些隐形的问号罐,调整地面水沟的距离等,总之和小朋友玩的很愉快,惊喜连连。
在这里插入图片描述

但是也有一个比较麻烦的问题,就是这款游戏的代码中不支持游戏手柄,通过键盘来玩,还是不太适应,怎么办呢? 当然是改代码,把游戏手柄连接进来喽。

于是我查了很多的资料,可惜就是没有找到如何能方便的映射游戏手柄的事件,一般都是讲游戏手柄的初始化,按钮的代号,定义,如何调用等内容,比如:小黑LLB 的译文 Pygame 官方文档 - pygame.joystick,写得非常详细,虽然没能解决最终的问题,也给了我很多启发,非常感谢。

另一方面,由于原作者Justin Armstrong的代码已经很完善,各种逻辑关系,也非常合理,对马里奥的操作,都是通过对Keys的状态进行获取并处理的,所以,如果要加入手柄的参数传递,一定会较大幅度的变更原游戏中的代码,为了不要太麻烦,有没有什么好的办法呢?我想到应该可以通过映射键盘事件,来完成这个功能的传递。可是找了好多资料,却没有找到合适的内容,有一篇文章也讲了对pygame.key.get_pressed() 函数的疑惑,Confused by pygame key.get_pressed() method 里面对于这个函数的功能讲得很清楚,就是会返回一系列的布什尔值,我试着打印了一下,可以看一下:

import pygame as pg
print(pg.key.get_pressed())
# 打印这个函数,会输出以下内容,共计512个布尔值,其中为True的表示该键被按下
# 比如说回车键,是第41个的值为True
"""
pygame.key.ScancodeWrapper(False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False,
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 如果您的ESP32HID已经成功识别为游戏控制器,但无法操控支持手柄操作的游戏,您可以尝试以下几个解决方案: 1. 确保您的ESP32HID已经正确地实现了游戏控制器的所有必要功能,例如按键、摇杆、轮盘等。您可以使用其他支持手柄操作的游戏来测试您的ESP32HID是否正常工作。 2. 检查您要玩的游戏是否支持手柄操作,并且是否已经将手柄设置为默认输入设备。有些游戏可能需要手动调整输入设备设置才能使用手柄操作。 3. 如果您的ESP32HID与PC连接,请尝试使用JoyToKey等工具来映射手柄输入到键盘或鼠标输入。这样,您就可以使用ESP32HID来模拟键盘或鼠标输入,从而操纵游戏。 4. 如果以上解决方案都无法解决问题,您可以尝试编写一个模拟手柄的程序,将ESP32HID的输入转换为手柄输入,并将其发送到游戏。但是,这需要对手柄协议和游戏输入进行深入研究,并且可能需要更高级的编程技能。 希望这些解决方案能够帮助您实现可操作支持手柄操作的游戏。 ### 回答2: 如果使用ESP-IDF制作的ESP32HID被识别为游戏控制器,但无法操控具有手柄操作支持游戏,可能是因为游戏无法识别ESP32HID发送的输入信号。 要解决此问题,可以尝试以下方法: 1. 更新游戏:检查游戏是否有更新补丁或官方更新,以确保游戏支持使用ESP32HID作为游戏控制器。有些游戏可能需要更新才能识别和接受非标准游戏控制器。 2. 使用映射工具:尝试使用映射工具,例如JoyToKey、XPadder、Steam等,将ESP32HID的输入信号映射为模拟手柄输入。这样,游戏会将ESP32HID的输入信号视为手柄输入,从而实现可操作。 3. 修改ESP-IDF代码:如果有足够的编程经验,可以尝试修改ESP-IDF代码以使其发送与手柄输入兼容的信号。这可能涉及不同的通信协议或更改发送的输入信号格式,以使游戏能够正确识别ESP32HID。 4. 使用第三方库:使用第三方库或开源项目,例如Arduino Joystick Library,以便更容易地将ESP32HID识别为游戏手柄,并与支持手柄操作的游戏进行交互。 需要注意的是,实现可操作需要一定的编程和技术知识。如果没有必要的技能和经验,可能需要寻求更专业的技术支持或咨询。 ### 回答3: 要使使用ESP-IDF制作的ESP32HID可以操控支持手柄操作的游戏,可以考虑以下几个方面的解决方案。 首先,确保ESP32HID与游戏设备之间的连接正常。可以通过检查设备的连接状态、查看日志输出等方式来确定连接是否成功。如果连接存在问题,可以尝试重新配对设备或者检查设备的驱动程序是否正确安装。 其次,检查ESP32HID与游戏设备之间的通信协议是否一致。不同的游戏设备可能采用不同的通信协议,例如HID或者XInput等。如果协议不一致,需要对ESP32HID的代码进行相应的修改,使其与游戏设备之间能够正常通信。 另外,确保ESP32HID发送的控制信号与游戏设备所需的信号格式和编码一致。游戏设备通常会有一套固定的信号格式和编码规则,如果ESP32HID发送的信号与设备要求的信号格式不匹配,游戏设备将无法正确解析ESP32HID发送的指令。这时需要对ESP32HID的代码进行修改,使其能够按照游戏设备的信号格式和编码要求发送控制信号。 最后,确保ESP32HID发送的控制信号能够被游戏软件正确识别。游戏软件通常会根据特定的手柄ID或者信号标识来判断控制信号的来源,并作出相应的反应。因此,需要在ESP32HID的代码中添加对应的手柄ID或信号标识,以确保游戏软件能够正确识别ESP32HID发送的信号,并做出相应的操作。 综上所述,要实现使用ESP-IDF制作的ESP32HID可以操控支持手柄操作的游戏,需要检查连接状态、确认通信协议一致、保证信号格式和编码正确,以及确保控制信号能够被游戏软件正确识别。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值