LUA保留字:
If (如果)
Then(那么)
Do(做)
And(和)
For(计数)
until(除非)
while(当)
Not(如果没有)
Or(或者)
Else(否则)
End(结束)
Function(函数)
break 跳出
elseif 另外如果
false 假
in 遍历
local 私有变量
nil 无效值
repeat 直到满足
return 返回
true 真
判定跳出死循环就可以用os.difftime()
一、基本语法:
function main() --主程序入口,“--”在这里是注释符 --这里写程序流程 end --主程序结束
二、软件自带函数:
2.2.1 logDebug() 输出调试信息到系统日志 参数 参数1:调试信息(string) 返回值 无 示例 logDebug("hello"); -- 输出"hello"到系统日志 2.2.2 mSleep() 进行毫秒级别延迟 参数 参数1:毫秒数(number) 返回值 无 示例 mSleep(1000); -- 延迟1秒 2.2.3 notifyMessage() 以文字提示框的方式通知用户 参数 参数1:提示文字(string) 返回值 无 示例 notifyMessage("hello"); -- 在屏幕上显示"hello" 2.2.4 notifyVibrate() 以震动方式通知用户 参数 参数1:毫秒数(number) 返回值 无 示例 notifyVibrate(1000); -- 让设备震动1秒 2.2.5 notifyVoice() 以播放音频的方式通知用户 参数 参数1:音频路径(string) 返回值 无 示例 notifyVoice("/mnt/sdcard/a.mp3"); -- 播放路径为"/mnt/sdcard/a.mp3"的音频 2.2.6 touchDown() 发送手指按下事件 参数 参数1:手指ID, 范围0~128, 用于标识一个手指,在后续的touchMove()和touchUp()中需要使用(number) 参数2:X坐标 (number) 参数3:Y坐标 (number) 返回值 无 示例 touchDown(0, 100, 100); -- ID为0的手指在坐标为(100, 100)的点按下 touchUp(0); -- ID为0的手指抬起 2.2.7 touchMove() 发送手指移动事件 参数 参数1:touchDown()时传入的手指ID(number) 参数2:X坐标 (number) 参数3:Y坐标 (number) 返回值 无 示例 touchDown(0, 100, 100); -- ID为0的手指在坐标为(100, 100)的点按下 touchMove(0, 200, 100); -- ID为0的手指滑动到坐标为(200, 100)的点 touchUp(0); -- ID为0的手指抬起 2.2.8 touchUp() 发送手指抬起事件 参数 参数1:touchDown()时传入的手指ID(number) 返回值 无 示例 touchDown(0, 100, 100); -- ID为0的手指在坐标为(100, 100)的点按下 touchUp(0); -- ID为0的手指抬起 2.2.9 getScreenResolution() 获取当前屏幕分辨率 参数 无 返回值 返回1:宽度(number) 返回2:高度(number) 示例 w, h = getScreenResolution(); -- 将屏幕宽度和高度分别保存在变量w、h中 notifyMessage(string.format("%d,%d\n", w, h)); -- 将宽度和高度用提示框显示到屏幕上 2.2.10 getScreenColorBits() 获取当前屏幕色彩位数 参数 无 返回值 返回1:色彩位数(number) 示例 c = getScreenColorBits(); -- 将屏幕色彩位数保存在变量c中 notifyMessage(string.format("%d\n", c)); -- 将色彩位数用提示框显示到屏幕上 2.2.11 getColor() 获取指定像素的颜色 参数 参数1:X坐标 (number) 参数2:Y坐标 (number) 返回值 返回1:色彩位数(number) 示例 c = getColor(100, 100); -- 将坐标为(100,100)的点的颜色保存在变量c中 if c == 0x0000ff then -- 如果该点颜色为0x0000ff(纯蓝色) touchDown(0, 100, 100); -- 那么点击该坐标 touchUp(0); end 2.2.11 getColorRGB() 获取指定像素颜色的R、G、B三个值 参数 参数1:X坐标 (number) 参数2:Y坐标 (number) 返回值 返回1:R(number) 返回2:G(number) 返回3:B(number) 示例 r, g, b = getColorRGB(100, 100); -- 将坐标为(100,100)的点的颜色的R、G、B分别保存在变量r、g、b中 if r == 0x00 and b == 0x00 and g == 0xff then -- 如果该点颜色为0x0000ff(纯蓝色) touchDown(0, 100, 100); -- 那么点击该坐标 touchUp(0); end 2.2.12 findColor() 全屏找色 参数 参数1:要找的颜色(number) 返回值 返回1:X坐标,如果没找到返回-1(number) 返回2:Y坐标,如果没找到返回-1(number) 示例 x, y = findColor(0x0000ff); -- 在全屏范围找到第一个颜色为0x0000ff的点,将其坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end 2.2.13 findColorFuzzy() 全屏模糊找色 参数 参数1:要找的颜色(number) 参数2:精确度 (number) 返回值 返回1:X坐标,如果没找到返回-1(number) 返回2:Y坐标,如果没找到返回-1(number) 示例 x, y = findColorFuzzy(0x0000ff, 90); -- 在全屏范围找到第一个颜色为0x0000ff的点,精确度为90%,将其坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end 2.2.14 findColorInRegion() 区域找色 参数 参数1:要找的颜色 (number) 参数2:区域左上角X坐标(number) 参数3:区域左上角Y坐标(number) 参数4:区域右下角X坐标(number) 参数5:区域右下角Y坐标(number) 返回值 返回1:X坐标,如果没找到返回-1(number) 返回2:Y坐标,如果没找到返回-1(number) 示例 x, y = findColorInRegion(0x0000ff, 100, 100, 200, 200); -- 在区域[(100,100)(200,200)]范围找到第一个颜色为0x0000ff的点,将其坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end 2.2.15 findColorInRegionFuzzy() 区域模糊找色 参数 参数1:要找的颜色 (number) 参数2:精确度 (number) 参数3:区域左上角X坐标(number) 参数4:区域左上角Y坐标(number) 参数5:区域右下角X坐标(number) 参数6:区域右下角Y坐标(number) 返回值 返回1:X坐标,如果没找到返回-1(number) 返回2:Y坐标,如果没找到返回-1(number) 示例 x, y = findColorInRegionFuzzy(0x0000ff, 90, 100, 100, 200, 200); -- 在区域[(100,100)(200,200)]范围找到第一个颜色为0x0000ff的点,精确度为90%,将其坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end 2.2.16 findImage() 全屏找图 参数 参数1:要找的图片的路径,只支持BMP格式(string) 参数2:(可选)指定图片中透明颜色(number) 返回值 返回1:X坐标,如果没找到返回-1(number) 返回2:Y坐标,如果没找到返回-1(number) 示例 x, y = findImage("/mnt/sdcard/a.bmp"); -- 在全屏范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,将其左上角坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end x, y = findImage("/mnt/sdcard/a.bmp", 0xffffff); -- 在全屏范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,忽略图片中颜色为0xffffff(黑色)的点,将其左上角坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end 2.2.17 findImageFuzzy() 全屏模糊找图 参数 参数1:要找的图片的路径,只支持BMP格式(string) 参数2:精确度 (number) 参数3:(可选)指定图片中透明颜色(number) 返回值 返回1:X坐标,如果没找到返回-1(number) 返回2:Y坐标,如果没找到返回-1(number) 示例 x, y = findImageFuzzy("/mnt/sdcard/a.bmp", 90); -- 在全屏范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,精确度为90,将其左上角坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end x, y = findImageFuzzy("/mnt/sdcard/a.bmp", 90, 0xffffff); -- 在全屏范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,精确度为90,忽略图片中颜色为0xffffff(黑色)的点,将其左上角坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end 2.2.18 findImageInRegion() 区域找图 参数 参数1:要找的图片的路径,只支持BMP格式(string) 参数2:区域左上角X坐标(number) 参数3:区域左上角Y坐标(number) 参数4:区域右下角X坐标(number) 参数5:区域右下角Y坐标(number) 参数6:(可选)指定图片中透明颜色(number) 返回值 返回1:X坐标,如果没找到返回-1(number) 返回2:Y坐标,如果没找到返回-1(number) 示例 x, y = findImageInRegion("/mnt/sdcard/a.bmp", 100, 100, 200, 200); -- 在区域[(100,100)(200,200)]范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,将其左上角坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end x, y = findImageInRegion("/mnt/sdcard/a.bmp", 100, 100, 200, 200, 0xffffff); -- 在区域[(100,100)(200,200)]范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,忽略图片中颜色为0xffffff(黑色)的点,将其左上角坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end 2.2.19 findImageInRegionFuzzy() 区域模糊找图 参数 参数1:要找的图片的路径,只支持BMP格式(string) 参数2:精确度 (number) 参数3:区域左上角X坐标(number) 参数4:区域左上角Y坐标(number) 参数5:区域右下角X坐标(number) 参数6:区域右下角Y坐标(number) 参数7:(可选)指定图片中透明颜色(number) 返回值 返回1:X坐标,如果没找到返回-1(number) 返回2:Y坐标,如果没找到返回-1(number) 示例 x, y = findImageInRegionFuzzy("/mnt/sdcard/a.bmp", 90, 100, 100, 200, 200); -- 在区域[(100,100)(200,200)]范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,精确度为90,将其左上角坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end x, y = findImageInRegionFuzzy("/mnt/sdcard/a.bmp", 90, 100, 100, 200, 200, 0xffffff); -- 在区域[(100,100)(200,200)]范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,精确度为90,忽略图片中颜色为0xffffff(黑色)的点,将其左上角坐标保存到变量x和y中 if x ~= -1 and y ~= -1 then -- 如果找到了 touchDown(0, x, y); -- 点击那个点 touchUp(0); end 2.2.20 keepScreen() 开启/关闭屏幕保持。当开启屏幕保持时,后续的找图、找色等函数不会重新获取屏幕图像,而是使用开启屏幕保持之前的屏幕图像;当关闭屏幕保持时,后续的找图、找色等函数会每次都重新获取屏幕图像。适当使用此函数可以优化脚本运行效率 参数 参数1:是否启用屏幕保持(boolean) 返回值 无 示例 keepScreen(true); -- 开启屏幕保持 if getColor(100, 100) == 0x000000 or getColor(200, 200) == 0x000000 then -- 进行2次取色,由于启用了屏幕保持,这2次取色不会重新获取2次屏幕图像,这样可以提高性能 notifyMessage("yes"); -- 如果(100,100)和(200,200)坐标有一个颜色为黑色,输出"yes" else -- 否则 notifyMessage("no"); -- 输出"no" end keepScreen(false); -- 关闭屏幕保持 2.2.21 snapshotScreen() 全屏截图 参数 参数1:保存截图的路径(string) 返回值 无 示例 snapshotScreen("/mnt/sdcard/a.bmp"); -- 将全屏截图保存到路径为"/mnt/sdcard/a.bmp"的图片中 2.2.22 snapshotRegion() 区域截图 参数 参数1:保存截图的路径(string) 参数2:区域左上角X坐标(number) 参数3:区域左上角Y坐标(number) 参数4:区域右下角X坐标(number) 参数5:区域右下角Y坐标(number) 返回值 无 示例 snapshotRegion("/mnt/sdcard/a.bmp", 100, 100, 200, 200); -- 将区域[(100,100)(200,200)]的截图保存到路径为/mnt/sdcard/a.bmp的图片中 2.2.23 getDeviceID() 获取设备串号 参数 无 返回值 设备串号 示例 deviceID = getDeviceID(); -- 将设备ID保存到deviceID变量中 2.2.24 getNetTime() 获取网络时间 参数 无 返回值 网络时间, 该时间与lua的os.time()函数一样,返回的是UTC时间1970年1月1日0时0分0秒到现在流逝的秒数,可以配合os.date()转换成方便阅读的格式。返回-1表示不能连接网络时间服务器 示例 time = getNetTime(); if time ~= -1 then tt = os.date("*t", time); if tt.year > 2014 and tt.month > 2 and tt.day > 15 and tt.hour > 12 and tt.sec > 30 then notifyMessage("当前时间超过了2013年2月15日12点30分"); end else notifyMessage("请连接网络"); end 2.2.25 rotateScreen() 旋转屏幕的坐标体系, 后续的找图、找色、截图、触摸动作都会使用新的坐标体系。 参数 0: 保持原本的坐标体系。对于IOS设备来说,此时HOME键在下方时的屏幕左上角为原点。 90: 坐标系统向右转90度。对于IOS设备来说,此时HOME键在右方时的屏幕左上角为原点 -90: 坐标系统向左转90度。对于IOS设备来说,此时HOME键在左方时的屏幕左上角为原点 180: 坐标系统倒立。对于IOS设备来说,此时HOME键在下方时的屏幕左上角为原点 返回值 无 示例 rotateScreen(90); -- 旋转坐标体系向右90度,大多数横屏游戏使用此坐标体系. touchDown(0, 100, 100); -- 发送触摸动作,此时点击的点使用新的坐标体系. touchUp(0); (此部分摘自触摸精灵手册)三、论坛中发现的一个比较好用的原创找色函数:
--H.R制作,H.R LUA脚本教学群:165488683 --参数说明:一个主色值,相似度及查找范围,这个和一般找色没差别 --W,H这两个参数为主色找到后找辅色的范围,W表示主色前后的距离,H表示主色上下的距离,这样找辅色的区域总大小是2W*2H --ARG用来存放辅助色的数组,我也不知道什么原因,触摸使用可变参数总是报错,不得于只有使用一个数组来做参数,这样我们的辅助色数量也是可变的,只是在调用的时候,得用{}把色值包起来。如:{0xDBEEFA,0xDCEFFC,0xDDEEFB,0x1295E9,0xff0000}。 --返回值说明:返回三个参数,分别是成功标志,找到是TRUE,找不到是FALSE,主色值坐标,找到就是有效点坐标点,找不到返回-1. function mutifindcolor(zhusezhi,xsd,x1,y1,x2,y2,w,h,arg) cgbj=0; repeat xz,yz=findColorInRegionFuzzy(zhusezhi,xsd,x1,y1,x2,y2); if xz>0 then for i,v in pairs(arg) do local xf,yf=findColorInRegionFuzzy(arg[i],xsd,xz-w,yz-h,xz+w,yz+h); if xf>0 then cgbj=1; else cgbj=0; break; end end if cgbj==1 then return true,xz,yz; end xtmp,ytmp=xz+1,yz; repeat xz1,yz1=findColorInRegionFuzzy(zhusezhi,xsd,xtmp,ytmp,x2,ytmp); if xz1>0 then for i,v in pairs(arg) do local xf,yf=findColorInRegionFuzzy(arg[i],xsd,xz1-w,yz1-h,xz1+w,yz1+h); if xf>0 then cgbj=1; else cgbj=0; break; end end if cgbj==1 then return true,xz1,yz1; end xtmp=xz1+1; end until xz1<0 y1=yz+1; end until xz<0 return false,-1,-1; end --使用范例 function main() f,x,y=mutifindcolor(0xDBEEFB,85,700,0,1023,590,10,10,{0xDBEEFA,0xDCEFFC,0xDDEEFB,0x1295E9,0xff0000}); if f then --如果找到,则点击 click(x,y); else notifyMessage("没找到!"); mSleep(2000); end end --点击子程序(执行一次点击) function click(x,y) touchDown(0, x, y); mSleep(90); touchUp(0); end
发表评论: