触摸精灵帮助手册
1 基本使用
1.1 如何录制
- 点击底部导航栏切换到“制作”界面。
- 点击顶部标签栏切换到“录制脚本”标签页。
- 在名称框输入想要录制的脚本的名称。
- 在描述框输入想要录制的脚本的描述。
- 点击“录制”按钮。
- 阅读弹出的提示对话框中的内容,然后点击“确定”按钮。
- 切换到手机的任意界面,按下热键开始录制(在使用控制条时按下控制条“录制”按钮开始录制)。
- 再次按下热键停止录制(在使用控制条时按下控制条“停止”按钮停止录制)。
1.2 如何播放
- 点击底部导航栏切换到“列表”界面。
- 单击想要播放的脚本,或者长按想要播放的脚本,在弹出的菜单中选择“播放”。
- 阅读弹出的提示对话框中的内容,然后点击“确定”按钮。
- 切换到手机的任意界面,按下热键开始播放(在使用控制条时按下控制条“播放”按钮开始播放)。
- 脚本在播放完毕后会自动停止,或在播放过程中再次按下热键停止播放(在使用控制条时按下控制条“停止”按钮停止播放,按下“暂停”按钮暂停播放,按下“退出”按钮退出此次播放)。
1.3 如何编辑
- 点击底部导航栏切换到“列表”界面。
- 单击想要播放的脚本,或者长按想要播放的脚本,在弹出的菜单中选择“编辑”。
- 在弹出的界面中直接编辑脚本文件,或点击“插入”按钮选择支持的函数。
- 点击“保存”按钮保存脚本文件,点击“退出”按钮退出编辑界面。
1.4 如何导出
- 点击底部导航栏切换到“播放”界面。
- 长按想要播放的脚本,在弹出的菜单中选择“导出”。
- 在弹出的文件浏览器中切换到想要导出的目录, 然后点击“确定”按钮。
1.5 如何导入
- 点击底部导航栏切换到“录制”界面。
- 点击顶部标签栏切换到“导入”标签页。
- 在文件浏览器中选中要导入的脚本, 然后点击“导入”按钮。
1.6 如何注册
- 点击底部导航栏切换到“设置”界面。
- 点击“注册状态”,获取您的设备的唯一序列号(三选一:IMEI码用于绑定手机,IMSI码用于绑定SIM卡,WMAC码用于绑定平板电脑)。
- 登录http://aisence.taobao.com,购买前请仔细阅读购买说明。
- 购买注册码,在附加信息中留下您的IMEI码或IMSI码或WMAC码、邮箱。
- 我们会尽快将注册文件发送到您的邮箱中。
- 将注册文件放入手机的SD卡中。
- 点击底部导航栏切换到“设置”界面。
- 点击“导入注册文件”,在弹出的文件浏览器中选中注册文件,然后点击确定。
- 看到“导入成功”的提示后完成注册。再次点击“注册状态”时显示“已注册”以及该注册文件的到期时间。
2 脚本语言
触摸精灵使用Lua语言作为底层脚本语言,支持Lua 5.2版本的所有语法与基本库函数,并在Lua语言的基础上添加了一些扩展函数,用于发送触摸事件、找图、找色等高级功能的实现。
2.1 基本语法
用户可参考Lua的官方手册或者其他资料来学习以下基本语法:
- 注释
- 变量与类型
- 运算符
- 赋值
- 条件控制
- 循环控制
- 函数定义
- 库函数
- 等等
2.2 扩展函数
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("{6d2b2bc657e3751d7029d45ccc2771220871bf81bb11f09a1f3d442e6188c098}d,{6d2b2bc657e3751d7029d45ccc2771220871bf81bb11f09a1f3d442e6188c098}d\n", w, h)); -- 将宽度和高度用提示框显示到屏幕上
2.2.10 getScreenColorBits()
获取当前屏幕色彩位数
- 参数
- 无
- 返回值
- 返回1:色彩位数(number)
- 示例
c = getScreenColorBits(); -- 将屏幕色彩位数保存在变量c中 notifyMessage(string.format("{6d2b2bc657e3751d7029d45ccc2771220871bf81bb11f09a1f3d442e6188c098}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{6d2b2bc657e3751d7029d45ccc2771220871bf81bb11f09a1f3d442e6188c098},将其坐标保存到变量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{6d2b2bc657e3751d7029d45ccc2771220871bf81bb11f09a1f3d442e6188c098},将其坐标保存到变量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);