发布于2023-11-01 04:47 阅读(1155) 评论(0) 点赞(14) 收藏(0)
我已经成功地将所有按钮和触发器从使用 Joycon-python 的 Joycons 映射到使用 vgamepad 的模拟 Xbox 360 控制器。但是,我不知道如何映射操纵杆。我尝试了很多不同的方法。在最坏的情况下,我根本没有任何输出,而在最好的情况下,模拟输出严格而强烈地进入一个方向,我无法通过移动操纵杆来明显影响这一方向。
import vgamepad as vg
import time
from pyjoycon import JoyCon, get_R_id, get_L_id
right_joycon_id = get_R_id()
left_joycon_id = get_L_id()
right_joycon = JoyCon(*right_joycon_id)
left_joycon = JoyCon(*left_joycon_id)
gamepad = vg.VX360Gamepad()
while True:
right_report = right_joycon.get_status()
left_report = left_joycon.get_status()
right_stick_x = right_report['analog-sticks']['right']['horizontal']
right_stick_y = right_report['analog-sticks']['right']['vertical']
left_stick_x = left_report['analog-sticks']['left']['horizontal']
left_stick_y = left_report['analog-sticks']['left']['vertical']
mapped_right_stick_x = int((right_stick_x - 32768) * 32767 / 32768)
mapped_right_stick_y = int((right_stick_y - 32768) * 32767 / 32768)
mapped_left_stick_x = int((left_stick_x - 32768) * 32767 / 32768)
mapped_left_stick_y = int((left_stick_y - 32768) * 32767 / 32768)
gamepad.right_joystick(x_value=mapped_right_stick_x, y_value=mapped_right_stick_y)
gamepad.left_joystick(x_value=mapped_left_stick_x, y_value=mapped_left_stick_y)
gamepad.update()
time.sleep(0.005)
使用此代码,输出会连续将模拟操纵杆急剧指向左下角,而不管操纵杆的物理状态如何。
事实上,我几乎不知道我在做什么,并且可能忽略了一些明显的东西,但我已经很远地映射了所有其他功能(除了隆隆声),所以我希望有人能解释我错过了什么
Joycon-python 将摇杆轴输出为 12 位无符号整数值(0 到 4096),而 vgamepad 需要 16 位有符号整数值(-32768 到 32767)。
天真地:
x360_axis = int((joycon_axis - 2048) * (65536 / 4096))
请注意,您从中获得的值并未经过校准。开关控制器具有需要从设备读取并应用于原始摇杆轴值的校准数据。
工厂校准数据存储在0x603d
(左摇杆)和0x6046
(右摇杆):
操纵杆校准数据包含每个轴的最小值、最大值和中心值:
还有死区信息0x6086
:
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/2038868/50004527605bbca661ba/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!