-
SetMKeyState这个函数我看文档说是用来激活M key的状态,但是这个M key是什么概念呢,鼠标上面应该没有对应的M系列按键吧。我看大佬代码里的使用方式,当G1按下的时候,M1会被激活,这个时候M_PRESSED这个事件是会被触发吗?但是这个M_PRESSED的触发在后面的逻辑判断中貌似没有更多的意义呀。 希望大佬指点一下使用SetMKeyState这个函数的意义,因为感觉这个函数跟MoveMouseRelative这个函数,是整个宏的核心。 function pubg.OnEvent_NoRecoil (event, arg, family)
end |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
说具体的我也不知道m键被设计出来是干嘛用的,因为我没买过带m键的键盘,没玩过。但是他有一个很好的机制,而且没有键盘也可以使用,这点很好,他解决了按住左键触发左键连点,松开左键结束左键连点的功能。 按住左键时,如果通过 而且用 这时候 以上就是 如果 76 非要兼容 ghub 不可的话,只要放弃连点功能就行了。 |
Beta Was this translation helpful? Give feedback.
说具体的我也不知道m键被设计出来是干嘛用的,因为我没买过带m键的键盘,没玩过。但是他有一个很好的机制,而且没有键盘也可以使用,这点很好,他解决了按住左键触发左键连点,松开左键结束左键连点的功能。
按住左键时,如果通过
for
循环PressAndReleaseMouseButton(1)
,会导致左键被松开(并不是你真实鼠标松开了左键,而是驱动认为你松开了),于是直接终止循环。(没法实现通过左键控制左键连点,这会自相矛盾。)而且用
for
循环还会有一个弊端,那就是在循环中,其他 G 键会无法及时响应,其他 G 键的事件响应会延后至 for 循环结束。这时候
SetMKeyState
有一个优秀的特性就可以完美解决这个问题。当调用SetMKeyState
时,onEvent
就会被触发,利用这个特性可以实现 “事件循环”,简单理解就是“套娃”。然后onEvent
事件本身成为了循环体,所有的循环判断和逻辑都可以写在这个里面 。然后把其他G键判断写在他上面,可以实现“截胡”。然后写一个变量,用变量代替记录左键按住状态,通过这个变量来判断左键是否连点。以上就是
SetMKeyState
的优势,76的早期版本也是没有SetMKeyState
直接用for
的,所以早期的 76 要么不支持连点,要么开火键要改成键盘按键。如果 76 非要兼容 ghub 不可的话,只要放弃连点功能就行了。