按键精灵手机版游戏脚本学习手册(免费部分)

一、 课前准备

1. 序言

按键精灵手机版游戏脚本教学(以下均称为手机按键),适用于零基础人群或者是写脚本无从下手的基础薄弱的人群,最终达到组建家庭小型工作室的目的。本教程仅针对游戏脚本的编写来进行教学的,对于其他类型APP处理,如抢单脚本、引流脚本之类的不太适用,写法上和学习思路上有较大的区别。学习30天左右,可以独自完成常见类型游戏的脚本编写(FPS射击类游戏、MOBA竞技类游戏、横版格斗类游戏除外),了解常见计算机硬件,可独自组建和维护家庭工作室。

1.1脚本和外挂的区别

脚本:一系列可以反复执行的命令。通过一些判断条件,可以让这些命令具有一定的智能效果。应用领域例如:

1.游戏中实现自动打怪,自动补血,自动说话等;

2.办公族可用按键精灵自动处理表格间数据的转换,自动调整文档格式、文章排版等;

3.利用按键精灵实现定时自动打开检验网页链接,文献检索,收集资料等重复操作;

外挂:篡改游戏原本正常的设定和规则,大幅增强游戏角色的技能和超越常规的能力。应用领域例如:

1.辅助外挂:重复运行游戏内需要重复性操作(不涉及篡改游戏数据),比如传奇自动打怪,但是很多游戏已经内置了这些功能,叫做内挂。

2.变态外挂:DNF全屏秒杀,FPS游戏透视爆头,传奇游戏加速等,一般是通过内存或者封包实现。

1.2手游脚本和PC脚本的区别

手游脚本原理和PC脚本的原理基本上是相似的,基本上都是图色、内存、封包那一套东西,但是PC端游都需要过保护,例如腾讯的TP验证,对于新手来说,根本过不了保护那一关,这一关都过不了,你会写图色脚本又有什么用呢?而且PC端游功能复杂,只会图色效率很低,内存和封包,不是科班出身的基本上都看不懂,就不要说学习了,所以外行学习按键精灵或者易语言去写图色脚本,没什么用处,浪费时间浪费钱而已。作为外行,我建议掌握按键手机版的写法后,再去学习易语言的中控,投入最少的钱和时间,获得最大的收益。

1.3了解我国相关刑法

1.破坏计算机信息系统罪,根据《中华人民共和国刑法》第二百八十六条规定,破坏计算机信息系统罪是指违反国家规定,对计算机信息系统功能或计算机信息系统中存储、处理或者传输的数据和应用程序进行破坏,或者故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的行为。获利5000块钱以上或者造成一万块钱以上的损失处5年以下有期徒刑。

2.非法经营罪,根据《中华人民共和国刑法》第二百二十五条的规定,是指违反国家规定,有下列非法经营行为之一的犯罪:(一)未经许可经营法律、行政法规规定的专营、专卖物品或其他限制买卖的物品的;(二)买卖进出口许可证、进出口原产地证明以及其他法律、行政法规规定的经营许可证或者批准文件的;(三)未经国家有关主管部门批准,非法经营证券、期货或者保险业务的,或者非法从事资金结算业务的;(四)从事其他非法经营活动,扰乱市场秩序,情节严重的行为。个人营业额达到5万以上或者盈利达到一万以上处三年以下有期徒刑。

3.侵犯著作权罪,根据《中华人民共和国刑法》第二百一十七条规定,侵犯著作权罪,是指以营利为目的,未经著作权人许可复制发行其文字、音像、计算机软件等作品,出版他人享有独占出版权的图书,未经制作者许可复制发行其制作的音像制品,制作、展览假冒他人署名的美术作品,违法所得数额较大或者有其他严重情节的行为。如果不是情节特别严重,一般都是赔钱私了。

2.手机按键的学习思路

根据我的个人经验,我把按键图色脚本基础内容分为4部分

  1. 图色:既然是图色脚本,掌握常用的图色功能是重中之重,主要是学习找色、比色、找字、找图、文字识别的灵活使用。
  2. Function函数:通过封装函数,可以极大的减少不必要的代码,主要是学习参数的传递,封装,返回值
  3. 数组:稍微复杂的脚本,都会用到数组来进行传参,主要是学习数组的合成、分割、排序
  4. 多线程:复杂的脚本需要用到多线程来并行处理任务,主要是学习多线程的控制、防止线程之间的干扰

按键图色脚本进阶内容学习分为3部分

  1. 掌握常见功能模块,例如定时功能、循环遍历、循环查找、拾取物品、对接第三方平台、数组应用
  2. 实现一个完整的脚本
  3. 从面向过程编程到面向对象编程的思路转换

3.如何学好手机按键

  1. 看得懂源码或者视频不代表你就写的出来,再简单的东西也要自己过一遍才知道。
  2. 写功能之前先把思路理清楚,做这个功能分多少步,每一步干什么,每一步需要用到什么。
  3. 面向百度编程,不懂的东西去百度搜索,永远不要等着别人给你讲。
  4. 站在巨人的肩膀上,分析别人的作品可以快速成长。
  5. 不到万不得已,不要用别人的插件
  6. 自信,相信自己的技术

4.电脑调试&软件下载安装

电脑硬件要求:4核8线程CPU,内存8G及其以上

开启VT:新款电脑默认开启,老款电脑自行百度如何在BIOS中开启VT

笔记本电脑:在电池模式中,切换为高性能模式

按键精灵手机助手下载地址:http://download.myanjian.com/

二、 基础语法和命令学习

1. 基础语法

1.1标识符

为变量、常量、数据类型、子程序、函数等定义的名字

例如 Dim a

这里的a就是标识符,注意按键精灵中标识符不区分大小写,并且是唯一的,例如:

Dim a和dim A是一个意思

1.2关键字

关键字就是计算机中面向硬件的指令,简单的说就是方面用户和计算机进行交互的速记符,一般要求编程时用户定义的标识符的时候不能和关键字重名,否则程序运行出错。

我们在给程序命名时,不能使用这些关键字、保留字、命令名称进行命名。例如:

Dim dim

Dim true

这是错误的用法

1.3赋值

使用 = 把右边的值赋予给左边,例如:

Dim a=1

赋值可以被覆盖的,例如:

Dim 女朋友=夜刀神十香

女朋友=时崎狂三

如果等号表示赋值的时候,左边=右边 和 右边=左边 代表的含义是不一样的,例如

Dim a=1

Dim b=2

a=b的结果为  a=1  b=1   因为a=1,b=a,所以b=1

b=a的结果为  b=2  a=2   因为b=2,a=b,所以a=2

1.4常量

常量是一个不可变的值,在计算机中是只读的,例如

圆周率 π=3.1415926 ,假如我们要计算圆的面积S

Dim S=πR2 那么这个π的值一是不会再改变,这个π就是常量

1.5变量

变量是相对常量来说的,就是可以变化的值,再计算机中是可读可写的,例如

Dim S=πR2 半径R的是可以变化的,这个R就是变量,在按键精灵手机版中,变量可简单分为局部变量、全局变量、共享变量

局部变量:定义在所有子程序或者函数内的变量

全局变量:定义在所有子程序或者函数外的变量

共享变量:作用类似于全局变量,用于多线程中传递参数(全局变量不能直接用于多线程)

1.6数据类型

按键精灵安卓版中有如下几种类型,

布尔:取值范围是0或者1,即只能是true 或者false;

数值:1,2,3,i8(-2^n-1  -  2^n-1-1),i16,i32,u8(0 -  2^n-1),u16,u32,f32,f64 (了解即可)

字符:"a" "b" "c"

字符串:"abc132啊哦饿"

数组:a={1,2,3}   a=array(1,2,3)  

表:table = {"tb1":123, "tb2":"字符串123", "tb3":{1, 2, 3}}(了解即可)

时间日期:%Y-%m-%d %H:%M:%S (了解即可)

1.7数据转换

按键精灵中提供了6种数据转换

CBool:数字0转成布尔值为False,非0的数转为布尔值为True(了解即可)

CInt 转整数:转换成功后返回短整型数据类型的值,注意:返回此数值是经过四舍五入的结果

CLng 转整数:转换成功后返回长整型数据类型的值,注意:返回此数值是经过四舍五入的结果(了解即可)

CStr 转字符串:转换成功后返回字符串型后数据类型的值

CSng 转浮点数:转换成功后返回单精度浮点数数据类型的值

CDbl 转浮点数:转换成功后返回双精度浮点数的值(了解即可)

1.8注释

就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。注释只是为了提高可读性,不会被计算机编译。

按键精灵安卓版中,需要注释的类容前面加"//",注释的用法如下:

//橙苏博客

1.9调试信息

常用的调试信息有TracePrint 和ShowMessage,TracePrint可以再控制台中显示,ShowMessage可以在界面显示,例如:

TracePrint “橙苏博客”

ShowMessage “橙苏博客”,1000,500,500

1.10课后习题

  1. 指出下面的标识符

Dim 张三

Dim a=b

Dim c

2.指出下面错误的标识符命名

Dim TRUE

Dim true

Dim TRue

3.当 = 代表赋值时,a=b 和b=a 是否等价?

4.简述全局变量、局部变量、共享变量的区别?

5."0"和0是否等价?

6."a"&"b"&"c" 和"abc"是否等价?

7.123=CInt("123")正确吗?

  • "123"=CStr(123)正确吗?
  • 下面那个可以输出0.5

(1)Traceprint Int(0.5)

(2)Traceprint CInt(0.5)

(3)Traceprint CLng(0.5)

(4)Traceprint CSng(0.5)

(5)Traceprint CDbl(0.5)

2. 基本命令

2.1触摸命令

Keypress:按一某个键,每个键都有对应的键代码,可查询键码表

应用场景:输入某些文字或按下某些功能键,例如:

Keypress 67 代表按下删除键

Keydown和keyup:按下某个键过一段时间再弹起了解即可

应用场景:长按功能键,例如:

模拟手动关机的例子

KeyDown "Power"  //模拟按住电源键不放

Delay 3000    //延时3秒

KeyUp "Power"   //松开电源键

备注:有按下就必须有弹起

Tap:单点一下屏幕

应用场景:模拟点击操作,例如:

Tap 200,200

Randomtap(X,Y,10)

备注:游戏中必须做到随机点击,不能固定点某一个地方,否则会被封号

Touch:按住某点一段时间后松开

应用场景:传奇中长按进行连续攻击,例如:

点击屏幕坐标(100,100)的点,并持续按住100毫秒(0.1秒)

Touch 100,100,100

Randomtap、Randomstap:随机范围的点击

应用场景:tap的升级版,以目标点位为中心的随机范围点击,例如:

Randomtap(100,100,100)

(0,0,200,200)

Swipe滑动:任意方向的滑动

应用场景:切换屏幕,摇杆类游戏,例如:

用300毫秒的时间,从点100,100划动到点200,200

Swipe 100,100,200,200,300

Touchdown、touchmove、touchup:类似于拖到的效果

应用场景:验证码滑块拖动,例如

TouchDown 100, 100, 1//按住屏幕上的100,100坐标不放,并设置此触点ID=1

TouchMove 300, 300, 1, 200//将ID=1的触点花200毫秒移动至300,300坐标

TouchUp 1//松开弹起ID=1的触点

备注:swipe可以做的,Touchdown、touchmove、touchup也可以做,但是Touchdown、touchmove、touchup能做,swipe不一定能做。

2.2控制命令

For:有限次的循环,默认步长为1

应用场景:遍历数组和二重循环,用的非常多

用法1:

For 10

Traceprint “我被循环了10次”

Next

用法2:

For i=1 to 10

Traceprint “这是第“& i &”次循环”

Next

用法3:(了解即可)

For i=0 to 10 step 2

Traceprint “我被循环了6次”

Next

用法4:

For each i in 数组

Traceprint 数组(i-1)

Next

用法5:

For i=0 to 5

For j=0 to 5

Traceprint i,j

Next

Next

If:如果……则

用法1:

If 1<2 then

Traceprint “1小于2”

End if

用法2:

If 1<2 then

Traceprint “1小于2”

Else

Traceprint “1不小于2”

End if

用法3:

If 1>2 then

Traceprint “1大于2”

ElseIf 1=2 then

Traceprint “1等于2”

Else

Traceprint “1小于2”

End if

备注:if语句中只能有一个else

else 只能在elseif后面

if的判断条件默认为true

两种结果的时候,用if ,三种及其以上结果的时候,select case

Select Case: 根据情况条件来选择执行对应语句

用法1:

Dim 变量=1

Select Case 变量

Case 0,1    //可支持判断多个值,中间以逗号隔开

    TracePrint "你输入的数字为:0或者1"  

Case 2

    TracePrint "你输入的数字为:2"

Case 3

    TracePrint "你输入的数字为:3"

End Select

备注://不支持判断语句 如:Case a>0

While:如果……则循环

用法1:

While true

Traceprint “一直循环”

Delay 100

Wend

用法2:

Dim t=0

While true

Traceprint “循环中”

t=t+1

If t>5 then

Exit while

End if

Delay 100

Wend

备注:循环时一定要加延迟,否则程序会因为CPU使用率增加而变卡

Do:循环

和while区别不大,一个是满足情况才循环,一个是满足情况下退出循环(了解即可)

Rem、Goto :跳转到标记(了解即可)

用法1:

Rem 标记

Traceprint “1”

Goto 标记

备注:可以做到循环的效果,但是不建议使用goto,容易打乱程序结构

Call:调用

用法1:

Call 测试程序()

用法2:

测试程序()

用法3:

Call 测试程序(参数一,参数二)

Sub:子程序

用法1:

Sub 测试程序()

Traceprint “测试程序”

End sub

用法2:

Sub 测试程序(参数1,参数2)

Dim a=参数1+参数2

End sub

Function:函数,用法和sub几乎一致,但是多了返回值

用法1:

Function 测试程序()

Traceprint “测试程序”

End function

用法2:

Function 测试程序(参数1,参数2)

Dim a=参数1+参数2

End function

用法3:

Function 测试程序(参数1,参数2)

Dim a=参数1+参数2

If a>0 then

测试程序=true

Else

测试程序=false

End if

End function

If 测试程序(参数1,参数2)=true then

Traceprint “测试程序”

End If

备注:sub和function自己调用自己的时候,要进行次数限制,否则会无限套娃。

掌握function传参和给自身赋值

EndScript:强制结束程序运行

用法1:

For 3

Tracetrint “1”

Endscript

Next

OnScriptExit:脚本结束事件

用法:

Function OnScriptExit()

//这里面写脚本停止时想自动运行的代码

End Function  

2.3课后习题

1.keypress “a”和keypress “A”的效果一样吗?

2.执行keydown后,可以不执行keyup的正确吗?

3.Randomtap(10,10,10)的实际点击范围是多大?

4.Swipe指令能否完成图标的拖动效果?

5.for i=0 to 5 step 2 会循环多少次?

6.If语句中,else一般写在elseif前面正确吗?

7.If语句中,可以有两个及其以上的else正确吗?

8.Select case语句中,支持判断语句吗,如select case 1<2 ?

9.Sub子程序有返回值吗?

10.现有函数格式如下,测试程序(3,3)=true正确吗?

Function 测试程序(a,b)

Dim c=a+b

If c>6 then

测试程序=true

Else

测试程序=false

End If

End function

3. 图色命令

3.1颜色命令

Findcolor:区域找色

用法1:

FindColor x1,y1,x2,y2,"123456-000000|aabbcc-030303|ddeeff-202020",0,1.0,intX,intY

用法2:

返回值=FindColor(x1,y1,x2,y2, "0000FF-101010|FFFFFF-000000|FF00FF",0, 0.9, intX, intY)

Findmulticolor:多点找色

用法1:

FindMultiColor x1,y1,x2,y2,"FFFFFF","4|1|2F9772-000000|123456-101010,3|7|378757",0,0.9,intX,intY

CmpColorEx:多点比色

用法:

If CmpColorEx("300|500|FFFFFF|123456-102030,305|505|FFFFFF",0.9) = 1 Then

    TracePrint "全部点颜色相等"

Else

    TracePrint "有一个或多个颜色不符合"

End If

Getcolornum:获取区域颜色数量

用法1:

颜色数量 = GetColorNum(26,20,31,26,"FFFFFF|123456-000000",1.0)

用法2:

FindColor x1,y1,x2,y2,"123456-000000|aabbcc-030303|ddeeff-202020",0,1.0,intX,intY

If intX>-1 then

颜色数量 = GetColorNum(intX-10,intY-10, intX+10, intY+10,"FFFFFF|123456-000000",1.0)

End If

3.2图形命令

KeepCapture:截图至内存

Findpic:找图

用法1:

FindPic x1,y1,x2,y2, "Attachment:1.png","000000",0, 0.8, intX, intY

用法2:

返回值=FindPic(x1,y1,x2,y2, "Attachment:1.png|Attachment:2.png","000000",0, 0.8, intX, intY)

ReleaseCapture:释放内存中的截图

备注:使用截屏至内存,找图完毕后,要及时释放内存中的截图。

3.3文字命令

SetDictEx:设置字库文件

用法:

SetDictEx(0, "Attachment:xxx.txt")

UseDict:使用字库文件

用法:

UseDict(0)

Findstr:找字

用法1:

FindStr 0,0,2000,2000,"长安","9f2e3f-000000",1.0,intX,intY

用法2:

索引值 = FindStr(0,0,2000,2000,"长安|洛阳","9f2e3f-000000",0.9,intX,intY)

备注:

设置偏色时,字体清晰可见即可,偏色过大,会导致字体糊成一团。

找字的用途不仅仅局限于找字符串,其他形状也是可以的

Ocr:文字识别

用法:

识别文字 = Ocr(x1,y1,x2,y2,"9f2e3f-030303|2d3f2f-000000|3f9e4d-100000",0.9)

备注:一般不要使用Ocr做文字识别去判断,找字会快一些。

Image.OcrText本地光学文字识别

用法:

识别文字=Image.OcrText(665,1138,690,1200, 0, 3)

备注:此命令用于识别白色中文方块字效果较好

smartOcr:智能识别数字(此命令为隐藏命令,准确度不高不稳定)

用法:

识别数字 = SmartOcr(665,1138,690,1200,"FFFFFF-101010")

备注:一般用于识别数字,不能识别坐标中的逗号。

3.4图色技巧总结

  1. 无论是找色,找图,找字,都应该尽可能缩小查找区域,区域越大,查找速度越慢,越容易出错
  2. 找不到图色时,应当先微调,再粗调,微调就是调偏色“FFFFFF-000000”,粗调就是调相似度。找色的偏色一般为“050505”或者“101010”,找图或者找字偏色一般为“202020”-“404040”,粗调不低于0.8。
  3. 找图色经常找错的时候,偏色设置为“050505”以下,相似度设置为1.0,来提高准确性
  4. 原则上使用优先度是:区域找色>多点比色>多点找色>找字>找图

3.5课后习题

  1. 简述多点找色和多点比色的区别?
  • 使用KeepCapture命令后找图的截取的内容是实时的吗?
  • 为什么使用完KeepCapture后要及时释放内存中的截图?
  • Findstr找字,文字二值化后显示不完整,做成的字库将无法识别文字,正确吗?
  • Findstr只能用于找字符不能用于找图案,正确吗?
  • 将以上区域找色,多点找色,区域找图,区域找字使用function函数进行封装,并完成以下要求

1.查找到时返回true,未查找到时返回false

2.对于以上两种返回结果,都可以设置是否进行随机范围的点击

4. 扩展命令

4.1Device设备命令

Device.GetImsi()获取设备IMSI号了解内容

应用场景:制作本地收费系统时会用到,配合MD5进行加解密

用法:

设备IMSI号 = Device.GetImsi()

GetDeviceId:获取设备唯一编号了解内容

应用场景:制作本地收费系统时会用到,配合MD5进行加解密

用法:

返回值=GetDeviceID()

Device.GetDPI()获取屏幕DPI大小了解内容

应用场景:用户定制实体手机脚本时用到

用法:

返回值 = Device.GetDPI()

GetScreenX()获取屏幕宽度了解内容

应用场景:用户定制实体手机脚本时用到

用法:

屏幕横坐标X=GetScreenX()

GetScreenY()获取屏幕高度了解内容

应用场景:用户定制实体手机脚本时用到

用法

屏幕纵坐标Y=GetScreenY()

Device.Reboot()重启设备

应用场景:定时重启虚拟机,配合收费版的按键小精灵开机自启运行脚本

用法:

Device.Reboot()

4.2Sys系统命令

Sys.ClearMemory()清理内存

应用场景:类似于一键清理垃圾加速功能,按键精灵本身和白名单不会被清除,一定程度上可以防止脚本因长时间运行而崩溃

Sys.GetFront()获取当前应用包名(了解内容)

应用场景:不知道应用包名的时候,来读取前台应用包名

用法:

返回值 = Sys.GetFront()

GetRunningApp:获取应用包名(了解内容)

应用场景:读取所有运行中程序的包名

用法:

Dim arr() //定义一个数组变量

arr=GetRunningApp()

For each n in arr

    TracePrint n

Next

Sys.isRunning()判断包名是否运行

应用场景:判断某后台运行应用是不是崩溃了,例如外服游戏挂VPN,判断VPN是否掉线

用法:

返回值 = Sys.isRunning(应用包名)

Sys.AppIsFront()判断应用是否在前台

应用场景:例如判断游戏是否掉线

用法:

返回值 = Sys.AppIsFront(应用包名)

4.3Log日志命令

Log.Open 开启日志

应用场景:将程序中的TracePrint打印保存在文本中,方便定位故障原因

用法:

Log.Open

Log.Close 关闭日志

用法:

Function OnScriptExit()

    log.Close

End Function

4.4其他常用命令

Inputtext输入内容

应用场景:在对话框中输入字符串

用法

Inputtext "abcdefg"

Delay延迟

应用场景:程序运行完毕后,暂停一会在运行下一个程序

用法

Delay 50

Runapp启动应用

应用场景:启动某个APP

用法

Runapp “com.android.settings”

Killapp关闭应用

应用场景:关闭某个APP

用法

Killapp “com.android.settings”

Import导入插件

应用场景:使用插件时的导入命令,注意插件名称的大小写。

用法

Import "shanhai.lua"

Readuiconfig读界面配置

应用场景:读取脚本UI界面中的数据

用法1:

ReadUIConfig("多选框")=true

备注:读取出来的是布尔值

用法2:

ReadUIConfig("下拉框")=1

备注:读取出来的是数值

用法3:

ReadUIConfig("输入框")=""

备注:读取出来的是字符串

//调试的时候,记得先在预览界面上保存

4.5课后习题

  1. 了解UTF-8字符串命令、字符串函数、界面函数
  • 判断下拉框的第一条数据的代码为ReadUIConfig("下拉框")=1正确吗?
  • ReadUIConfig("下拉框")>0的写法正确吗?
  • ReadUIConfig("输入框")读取到的内容是字符串还是数值?

5. 标准库函数

5.1数学函数

Abs绝对值

应用场景:将负值转化为正值

用法

Abs(-10)

Fix取整

应用场景:删除数值的小数部分并,返回以整数表示的结果

用法:

Fix(-8.5)

Int取整

应用场景:删除数值的小数部分,并返回以整数表示的结果

用法:

Int(-8.5)

备注:Int返回小于或等于数值的第一个负整数,Fix返回大于或等于数值的第一个负整数

Randomize初始化随机数

Rnd随机数

应用场景:在生成随机数前使用一次

用法:

//Int((最大值 - 最小值 + 1) * Rnd() + 最小值)

Dim MyValue

Randomize  

MyValue = Int(((6-2+1) * Rnd()) + 1)   

Traceprint MyValue

Round四舍五入

用法

Round(4.5)

5.2数组函数

Array合成数组

应用场景:给数组函数传参

用法

Dim i=array(1,”abc”,{4,5})

Dim i={1,2,3}

Split分割数组

应用场景:将数组分割为若干段字符串,格式Split(数组,分隔符)

用法

Dim a={“123|456”,”789|369”}

Dim 数组()=Split(a(0),”|”)

Ubound数组长度

应用场景:获取数组长度,一般循环时会用到

用法

For i=0 to ubound(数组)

Traceprint 数组(i)

Next

练习例子:数组传参、二分法排序、冒泡排序法

5.3时间日期函数

Time()当前系统从1970年1月1日至今所经过的秒数

应用场景:定时器

用法

Dim t=time()

Delay 1000

Time()-t>1 then

Traceprint “过去1秒了”

End If

Tickcount()获取脚本运行时间

应用场景:定时器

用法

Dim t= Tickcount()

Delay 1000

Tickcount()-t>1000 then

Traceprint “过去1秒了”

End IF

备注:以上2种常用于定时器功能

5.4运算符

5.4.1算术运算符

+加

-减

*乘

/除

\整除

用法

A=4\3

Mod求余

用法

A=4 Mod 3

5.4.2连接运算符

&强制连接:强制两个表达式进行字符串连接

用法

Traceprint 1&”1”

5.4.3关系运算符

=等于、赋值

<>不等于

>大于

<小于

>=大于等于

<=小于等于

5.4.4逻辑运算符

And与:全部为真,返回true,否则返回false

or或:有一个为真,就返回true;全部为假返回false

not非:真为假,假为真

5.5课后习题

  1. 简述常用的两种数组的赋值方法和遍历方法
  2. 使用时间日期函数写一个定时器功能
  3. 使用二分法原理找出数组中的最大值或者最小值
  4. 使用冒泡排序法对数组进行从从小到大的排序

6. 插件命令

6.1时间日期命令

DateTime.Hour()

DateTime.Minute()

DateTime.Second()

应用场景:游戏里面的定时活动,比如6点30分开始活动

用法

While true

    If DateTime.Hour() = 14 and DateTime.Minute() >= 30 Then

        Do Until DateTime.Hour() = 15

            TracePrint "开始活动"&now()

            Delay 5000

        Loop

        TracePrint "活动结束"

    End If

    Delay 1000

Wend

6.2多线程命令

Thread.setshareVar设置共享变量变量可以是任意类型

用法

Thread.setshareVar”共享变量”,1

Thread.getshateVar 获取共享变量

用法

Thread.getshateVar(“共享变量”)

Thread.start启动线程

用法

Dim a=thread.start(主程序)

Sub 主程序()

Traceprint “这是主程序”

End Sub

Thread.stop结束线程

用法

Thread.stop(a)

Thread.wait等待线程(了解即可)

用法

Thread.wait(a)

备注:当需要并行处理任务的时候或者单线程处理任务不及时的时候,就需要用到多线程,但是不能滥用多线程。一般来说游戏脚本线程数量不应多于1条,并且要尽可能不使用多线程

注意事项:

  1. 主线程停止后子线程会停止
  2. 多线程中的无法直接使用全局变量,需要进行传参才可以使用
  3. 避免频繁启停多线程,容易导致内存堆栈溢出,从而脚本崩溃
  4. 多线程运行时需要避免出现线程间相互干扰的情况

6.3课后习题

1.了解File文件操作命令(课后了解)

2.简述多线程的控制思路

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

转载请注明出处橙苏博客 » 按键精灵手机版游戏脚本学习手册(免费部分)
分享到: 生成海报

本站接广告推广、脚本定制、付费咨询

联系微信:Saynothing2020
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活