一、需求描述
- 在游戏,我们总有遇到一些按键需要咱定时去按的,比如说喝药,比如说技能等等。
- 我们需要程序能够定期的去执行一个功能,达到一个定时器的效果
二、可行性分析
这是第一期,所以该讲的基础我必须要啰嗦,所以会有点长。
不过我尽我所能,讲的通俗易懂些。
1. 变量
点击链接 变量 即可查看官方API,要是看不懂,请往下看:
赋值
API上有两种变量的赋值方式,但我只推荐第二种——表达式。
咱就是说,初期学习,别把自己绕晕了。
PS:这是我踩过的坑,折磨死我了…
str := "this is a var"
- 上述代码中,
str
就是一个变量,那么在其他地方调用str
,就代表着this is a var
。
取值
msgbox %str%
msgbox % str
- 第一行是传统方式,第二行是表达式方式,依然是推荐表达式。
2. 标签、热键、函数
点击链接 标签 即可查看官方API,要是看不懂,请往下看:
标签
label:
; do sth.
return
- 标签指的就是这玩意:
label:
我们可以随意定义label
,可以是qwer
,甚至可以是汉字喝药
。但是,不可以是关键字哦!
关键字就例如API里提到的那些规定好的字段,一般只要你设计的标签名称够怪,不会和关键字冲突的
热键
F1::
; 你想实现的功能
retrun
- 热键就是指:我们按下设计好的键盘或者鼠标命令后,可以运行指定的程序。通常是在热键后面加上双冒号
::
意思就是说,我们按下 后,就会实现里面写的程序,最后以return
结尾。
函数★
func(var) {
index := var
}
F2::
startDrink() {
; do sth.
}
- 函数并不真的指数学上的函数哈,它可以理解成一个封装好的功能。
- 我们可以定义函数的入参和出参:
- 入参:每个函数可以自带多个变量,这个是私有的
- 出参:也就是返回值
- 我们甚至可以在函数上方绑定热键,直接触发,不过一般是在无参函数上绑定。
3. 键盘事件
send keys
参数介绍
详情点击 key名称
keys
| 符号 | 按键 | | —- | —- | |^
| | |+
| | |!
| | |#
| 或 | | … | … |
例子
; QQ默认截图 Ctrl + Alt + a
send ^!a
; 重复按a键10次
send {a 10}
; 按住e
send {e down}
; 弹起e
send {e up}
4. 鼠标事件
click [, Options]
参数介绍
点击链接 鼠标点击 查看详情
例子
; 当前光标处单击
click
; 指定坐标点单击
click, 100 100
; 移动鼠标不单击
click, 100 100 0
; 指定坐标点右击
click, 100 100 Right
; 当前位置双击
click, 2
; 按住左键
click, down
; 松开右键
click, up Right
5. 定时器
点击链接 SetTimer 即可查看官方API,要是看不懂,请往下看:
; 以指定时间重复运行
SetTimer [, Label, PeriodOnOffDelete, Priority]
方括号里表示可省略的参数
参数介绍:
Label
:可以直接填无参函数,如果想要实现有参函数,那么官方给出一个class
类封装的实现,这个我会单独讲PeriodOnOffDelete
:On
:开启,如没有就新建默认延迟250(0.25秒)的定时器Off
:关闭,但不删除Delete
:删除,字面意思Period
:周期,也就是延迟,单位毫秒(1秒 = 1000毫秒),默认250- 如果为负数,则只执行一次
Priority
:优先级。通常用来提高优先级去重置同名定时器。但是个人不推荐用这种方式,不够优雅,最好是定义一个class
去管理一批定时器
基本用法示例
; 一秒执行一次 func 函数
SetTimer, func, 1000
func() {
msgbox 这里是func函数
}
以 class
的方式去创建一个定时器类
class MyTimer {
__New() {
this.timer := ObjBindMethod(this, "Func")
this.interval := 1000
}
Strat() {
timer := ObjBindMethod(this, "Func")
SetTimer % timer, % this.interval
}
Stop() {
timer := this.timer
SetTimer % timer, Off
}
Func() {
msgbox 这里是func函数
}
}
三、落地实现
俗话说天上飞的理念,对应着落地跑的实现
话不多说,开始实操!