//没登陆

欢迎您来到凯恩之角,奈非天!

帖子:319

符文:70

跳转到指定楼层
1#
发表于 2020-3-21 00:39:23 |显示全部楼层 |倒序浏览 来自:江西
本帖最后由 雪落丶丿寒 于 2020-10-15 17:29 编辑

之前所发的关于我自己搭建的罗技宏多线程框架的帖子因为全篇较多原理性的叙述,使得文章并不是很易懂(原贴 致各位罗技宏作者,发一个罗技的“多线程”框架),在此做一个入门教学,手把手教你学会使用这个框架。
写在前面
1. 萌新也可以模仿写出自己的宏!
2. 框架实现了罗技宏的伪多线程运行,理论上可以解决大部分因单线程带来的问题(包括不限于:宏的随开随停,多宏并发等)
3. 基本内容已完工,有些玩家在使用过程中建议我增加的功能,几乎都写到了更新日志里,各位可自行查看
4. 不太能看得懂的朋友可以直接跳52楼去仿照楼中的例子编写
5. 有问题如果我很久没有回复,可以来这里留言找我




workspace.7z (6.31 KB, 下载次数: 563)




帖子:319

符文:70

2#
引入框架
1.下载压缩包解压到本地
1.jpg
2.打开罗技脚本编辑器,在第一行引入框架
dofile('刚刚下载的压缩包中lua文件的绝对路径')
2.png
注意此处的斜杠要使用正斜杠(/)
至此,框架已经引入完毕,接下来就可以正常使用了
发表于 2020-3-21 00:56:01 |显示全部楼层 来自:江西

帖子:319

符文:70

3#
本帖最后由 雪落丶丿寒 于 2020-3-21 01:47 编辑

开始第一个宏的编写——写一个可以单击开启再单击停止的宏
1.引入框架
2.png
2.写一个需要单击开启,再单击停止的宏(注意,宏中的Sleep函数,请务必使用小写的sleep函数代替)方法的名字尽量写成'v_某某某'格式,避免和框架里的方法重名
3.jpg
3.写一个 init函数 (init指初始化,一般在此函数中配置按键信息,名字不要写错)
4.jpg
4.创建一个控制器
queue_ctrl()函数,参数为前面写的宏的方法名,返回值为一个控制器。
此控制器专门用于控制宏的开启和停止。
5.jpg
注意,‘控制器’用于控制宏的开关,可以简单的想象成一个按钮
5.将控制器绑定到键位上
main函数,第一个参数是控制器,第二个参数是g键位,用于将控制器绑到对应的g键位上
6.jpg
如图,将控制器绑定到g4上,则可以实现单击g4执行v_run函数,再次单击则停止执行

至此,代码已经写完了。

下面再举2个小例子
7.jpg
如图,实现的功能是点击g4,控制台开始每秒输出当前运行时间。再次点击g4,停止输出。
注意,此控制器一般配合while(true)使用

8.jpg
如图,将v_run1绑定在g4上,v_run2绑定在g5上,用两个键位去控制两个宏,各自没有任何干扰,这也是多线程的优势




发表于 2020-3-21 01:29:51 |显示全部楼层 来自:江西

帖子:319

符文:70

4#
巡山小妖来了 发表于 2020-3-21 01:04
未完待续吗?

算是一个大工程,慢慢去填
发表于 2020-3-21 01:32:13 来自凯恩之角App |显示全部楼层 来自:江西

帖子:319

符文:70

5#
冥道小月 发表于 2020-3-21 00:45
framework现在无处不在啊。

真的么?我最近有段时间没关注凯恩,之前是没看到有什么框架,如果有的话欢迎给我推荐,我去学习学习
发表于 2020-3-21 02:21:44 |显示全部楼层 来自:江西

帖子:319

符文:70

6#
冥道小月 发表于 2020-3-21 05:49
也特指宏,我指的是编程世界

哦哦,哈哈哈
发表于 2020-3-21 12:32:32 来自凯恩之角App |显示全部楼层 来自:江西

帖子:319

符文:70

7#
yucen1986 发表于 2020-3-21 07:01
罗技宏和按 键 精 灵的区别有多大?实时性更好吗?

硬件宏和软件宏的区别
发表于 2020-3-21 12:32:56 来自凯恩之角App |显示全部楼层 来自:江西
头像被屏蔽

帖子:319

符文:70

8#
提示: 该帖被管理员或版主屏蔽
发表于 2020-3-21 12:33:12 |显示全部楼层 来自:江西

帖子:319

符文:70

9#
本帖最后由 雪落丶丿寒 于 2020-3-24 20:52 编辑

前面写到了,点击开始,再点击终止的宏的写法。此次则提供一个按下开始,抬起终止的宏的写法。
0.png
如图,实现了按下鼠标左键运行v_run1宏,输出系统运行时间。抬起鼠标左键停止输出。
1.EnablePrimaryMouseButtonEvents(true)函数,开启鼠标左键的编程,部分系统不能使用。
2.main函数多了两个参数
第一个参数控制抬起或按下(MOUSE_BUTTON_PRESSED/MOUSE_BUTTON_RELEASED),默认值为按下,可直接填写nil。
第二个参数控制开启或停止(start/end)默认值为start_end(若开即关,若关即开)

发表于 2020-3-21 14:05:50 |显示全部楼层 来自:江西

帖子:319

符文:70

10#
凯恩之粉 发表于 2020-3-21 13:02
大神,这是什么编程语言?

这是罗技的鼠标宏,运用的是lua的编程语言
发表于 2020-3-21 14:06:21 |显示全部楼层 来自:江西

帖子:319

符文:70

11#
本帖最后由 雪落丶丿寒 于 2020-7-7 09:54 编辑

之前的queue_ctrl控制器主要是服务于循环宏或者流程较长的宏,需要外部停止的。
本层则介绍一个简单的单次运行的宏如何加到控制列表里。
1.jpg
如图,实现了单击g4键位,循环输出1-10。
因为并非循环运行的宏,则不适用于queue_ctrl控制器,这里使用了run控制器
main函数的第一个参数直接传递run,第2、3个参数依旧是绑定键位、按下/抬起
第四个参数因为此宏不涉及停止,则直接传递需要运行函数名即可。
再举一例:
2.jpg
如图,添加了一个终止所有正在运行的宏的方法。
list:empty()清空任务队列里等待执行的所有任务。
则实现点击g5键,强制终止所有正在运行的宏。

目前list:empty方法无法弹起使用press方法按下的键位,框架中集成了all_stop方法,可以删除队列的同时弹起press方法按下的键位.
all_stop方法允许传入一个参数,为线程对象,可定向关闭对应线程的序列

另外,在宏里也可以使用run函数直接执行其他宏
3.jpg
如图,在v_run1中用run函数调用v_run2方法。
那么这样和直接调用v_run2有什么区别呢?
直接调用,宏会先去执行v_run2结束后再回来执行v_run1
而使用run函数调用,v_run1和v_run2是同步进行的(如图,同时输出1-5)
调整:更新后的框架,在main函数中集成了run函数,用户不必使用"main(run,4,'MOUSE_BUTTON_PRESSED',v_run)"这种形式,而可以直接使用main(v_run,4)

发表于 2020-3-21 15:49:12 |显示全部楼层 来自:江西

帖子:319

符文:70

12#
i秦时明月 发表于 2020-3-25 14:09
感谢作者,压缩包在哪里下载呀,太喜欢你写的了

压缩包用电脑登录可以下载
发表于 2020-3-25 14:36:36 来自凯恩之角App |显示全部楼层 来自:江西

帖子:319

符文:70

13#
听说要长 发表于 2020-3-25 15:01
通常都是直接拔鼠标

哈哈,看来你是看进去我的代码了,感谢支持
发表于 2020-3-25 15:31:57 来自凯恩之角App |显示全部楼层 来自:江西

帖子:319

符文:70

14#
i秦时明月 发表于 2020-3-25 18:53
提示有错误,抱歉,刚接触Lua

声明函数要加括号,你少了括号
发表于 2020-3-25 18:55:09 来自凯恩之角App |显示全部楼层 来自:江西

帖子:319

符文:70

15#
i秦时明月 发表于 2020-3-25 18:56
我看到了,谢谢。。。

顺便说下,你这个宏这样写一定会出问题
发表于 2020-3-25 19:19:23 来自凯恩之角App |显示全部楼层 来自:江西
您需要登录后才可以回帖 登录 | 注册网易通行证