batocera吧 关注:17,910贴子:36,407
  • 6回复贴,共1

手柄震动分析。

只看楼主收藏回复

普通震动,不考虑 HD ,也不考虑 什么扳机震动,也不考虑 肩键震动。
左是 轻震,右是 重震。
以下是假设。
震动数值从 0 到 255 。
左边 15以下 震动不起来,没动静。 25 以下,震动有动静,半圈不到,就没动力,返回了。惯性导致 左右摇摆。 25 到 255 才能正常的转,速度越来越快。
右边 20以下 无动静,30 以下,左右要不,30 到 255,速度越来越快。
硬件假设完毕。
游戏开发者,可以 分别控制左右两个震动器的 数值和时长。
比如 突然命令 左边 30 到 40 ,时长 0.5 秒。 右边没命令,就是不震动。
突然 命令 右边 30 到 35,时长 N 秒。
后来 又命令 左边 A 到 B,时长C,右边 X到Y,时长Z。
然后正在震动的过程中,
又 发了 新的指令。
震动还没完。又发新的,甚至 突然 要求 停止。
然后 又发新的指令。
正常手柄。
收到 左边 25 到 35,时长 0.5 。
其实他收到的 可能是 具体一个值。没有时长。
但是 主机给手柄高频率发这个数值。
微软官方 API 是 同时给 左右发,0-65535 。

微软自己也没有这么精确。所以还是用 0 到 255 代替。
那么 就有一个 程序。负责 把
25到 35 ,时长 0.5 解析一下。
变成 每隔 0.1 秒 发送 一个 值。
或者 每隔 0.05秒 发送一个值。
这个 间隔,基本上就是 游戏系统 负责控制的。
但是 有人问过 游戏开发,人家说 直接录制 震动数据。
录制的是 希望 发给手柄的数据。
录制的来源是特殊的工具。
录制的 频率 越高 越好。
然后 用 API 按频率 发送 数据 就可以了。
手柄 收到 震动数据。
就执行吧。
比如 频率是 一秒 10 次。可能 高级的手柄,可以 一秒 1千次?
这可不是 回报率。
这是 电脑给 手柄发信号。
可能 速度 和 USB 有关。
但是 1秒 10次,也许就够用了。
手柄 收到 一个 命令。
左边 25。右边 0 。
那么 大部分 手柄 会 对 25 进行翻译。
比如 有的手柄,和 微软的一样。还是 25 的效果。
那就是 转不起来。
下一个 0.1 秒。
发来的是 26 了。
那就能转起来了。
但是 下一个 0.1 发来 27 了。
直到 35 。
手柄 就试图转 ,结果你 最后发了个 35 ,就不继续发了。
35 的效果是 转个不到半圈。
结果 就 只能 自由落体 加 惯性了。
这可是 和微软手柄 一样的情况。
假如 游戏希望的是 150 到 200 转 3 秒。
最终是每 0.1秒 发一个新的值。
比如 第一个 0.1秒 收到了 150 。
正常来说 手柄 就应该 动力够了。
可是有的手柄,他居然 提供了 最小和最大的调整。
有的厂家。默认是 30 到 220 。
那么 就需要 对 发来的值反应。
发来 0 ,不转。
发来 1 就是 30 。
发来 255,就是 220 。
你发来 150,可能就是 120 了吧。具体不知道。
假如 游戏作者 希望 来个很轻的 震动。
就给发了一个 40 给 左右。
但是 手柄 他自己 翻译之后,变成了 20 。
就变成了你说的 不震动了。因为 不够震动的力度。
有的手柄,40 翻译成了 30 ,那就是 动了一下,然后不动了。 就是 不明显。以上 还都是 正常震动。不傻震呢。
假如 是 傻震的手柄。
人家 游戏 发来了 各种数值。
他都是 翻译为了 固定的值。
比如 他有 4 个档次 无,轻 中,重。
比如 0 ,50 127 200。
或者 0,100, 180,255 。
你游戏发啥数值,都给你翻译成一个。
这震动效果,傻不傻?
这种震动效果的,手柄设计者。傻不傻?


IP属地:北京1楼2024-05-23 23:45回复


    IP属地:北京2楼2024-05-23 23:45
    收起回复
      你还是先把手柄的通讯协议搞明白再来发帖吧。i2c spi hid(xinput),你连基本的工作原理都不明白。


      IP属地:上海来自Android客户端3楼2024-05-26 11:29
      收起回复