[关闭]
@miniknife 2016-10-13T10:06:02.000000Z 字数 60825 阅读 211421

(已停更)触动精灵iOS脚本开发手册


当前手册适用于 触动精灵iOS V2.3.2
本文档已停止更新,最新版本的开发手册请访问https://www.zybuluo.com/miniknife/note/212706

目录

前言

       触动精灵是一款模拟手机触摸、按键操作的软件,通过制作脚本,可以让触动精灵代替双手,自动执行一系列触摸、按键操作。触动精灵简单、易用,不需要掌握任何编程知识就可以录制出功能强大的脚本;还可以使用编程知识,编写出功能更为复杂,交互更为灵活的脚本;只要能够在手机上完成的人为操作,触动精灵都可以代替完成,不仅省力,而且高效。

       触动精灵采用 Lua 脚本语言作为底层语言,支持 Lua 5.2.3 版本的所有语法与基本函数,并在其的基础上添加了一些扩展函数,用于取色、找色、找图、发送触摸事件等高级功能的实现。

用户在阅读本函数说明前,请参考 Lua 的官方手册以及相关资料,学习以下基本语法:

        - 注释
        - 变量与类型
        - 运算符
        - 条件、循环控制
        - 函数定义
        - 库函数
        - ……

       本说明仅供初等文化水平以上的、了解计算机编程基本原理的个体学习与参考,并不适用于零基础的编程入门者学习编程基本知识。严禁用于商业以及非法目的,严禁转载、抄袭、未经许可地引用。
为了便于解释和描述,本说明中采用了一些非专业的描述与形容方法(如:整数型),敬请理解。因编写校对仓促,如有错误欢迎及时指正,本文中的示例仅供函数参考,不要直接用于脚本中。

重要提示:
Lua官方手册:http://www.lua.org/manual/5.2/
Lua中文开发手册:http://book.luaer.cn/
Lua 简明教程:https://www.zybuluo.com/miniknife/note/317045
触动精灵的脚本开发、存储过程必须使用 UTF-8 文本编码,如果您出现脚本中文无法正常显示与处理,请在您使用的编辑器或 IDE 中设置文本编码为 UTF-8,谢谢。


学习前的准备

       工欲善其事,必先利其器,在学习触动精灵脚本编写前我们需要下载安装一些辅助工具来完成脚本编写,包含但不限于以下工具:

触动精灵iOS

最新版本 V2.3.2
使用教程:https://www.zybuluo.com/miniknife/note/307627
官方源地址:http://apt.touchsprite.com
测试源地址:http://apt-test.touchsprite.com
脚本存放路径:/var/mobile/Media/TouchSprite/lua
默认资源路径:/var/mobile/Media/TouchSprite/res
脚本日志路径:/var/mobile/Media/TouchSprite/log
配置文件路径:/var/mobile/Media/TouchSprite/config

注意有些函数不支持低版本触动精灵,请仔细阅读函数说明并尽量保持触动精灵客户端为最新版。
测试版为不稳定版本,为避免不必要的麻烦,请勿大规模安装。

脚本编辑器:TouchSprite Studio

最新版本 1.1.7
下载地址:http://pan.baidu.com/s/1bn5b9Vp 密码:k9yf
使用手册:https://www.zybuluo.com/miniknife/note/123055

支持函数自动补全、函数提示、关键字高亮、文件传送、远程运行、自动缩进等常用功能,已内置所有至最新 2.2.1 版本触动精灵扩展函数,推荐使用。

抓色器:TSColorPicker

最新版本 1.7.10
下载地址:http://bbs.touchsprite.com/question/5190
使用手册:https://www.zybuluo.com/havonz/note/94681

一个趁手的抓色器可以让你的脚本开发过程变的轻松愉快,在此强烈推荐由苏泽制作的触动抓色器,快捷抓点、一键生成代码、远程抓屏,让你如虎添翼。具体使用方法请阅读压缩包内附带的说明(远程抓屏功能需使用触动精灵iOS v2.1.5 以上版本)。

触动精灵脚本开发必看英文词汇手册

手册地址:https://www.zybuluo.com/lisaisacat/note/277023


函数:init 初始化

函数名称:初始化
函数功能:脚本使用触摸函数前必须调用,以指定应用程序以及坐标系。
函数方法
init(文本型 bid, 整数型 rotate);
返回值:无
参数 类型 说明
bid 文本型 目标程序的Bundle ID,当填写“0”时,自动使用当前运行的应用
Rotate 整数型 屏幕方向,0 - 竖屏, 1 - Home键在右边, 2 - Home键在左边

脚本实例:

  1. init("com.apple.weather", 0); --以 "com.apple.weather" 竖屏初始化
  2. init("0", 1); --以当前应用 Home 键在右边初始化

参考资料:
Bundle ID 的获取方法
1、在触动精灵右上角的"更多"、"应用ID查询"中能查看到应用程序的Bundle ID;
2、使用 iFile、PP助手等软件可查看应用文件夹下的 Info.plist,其中的 CFBundleIdentifier 即为该应用的Bundle ID。

注意事项:

  1. 在iOS7以上使用触动精灵 2.x 版本,第一个参数可省略。
  2. 此函数可在脚本运行过程中多次调用已改变屏幕方向。

函数:touchDown、touchUp、touchMove 触摸点击、滑动

函数名称:触摸按下、抬起、移动
函数功能:发送触摸事件。
函数方法
touchDown(整数型 index, 整数型 x, 整数型 y);
touchMove(整数型 index, 整数型 x, 整数型 y);
touchUp(整数型 index, 整数型 x, 整数型 y);
返回值:无
参数 类型 说明
index 整数型 手指序号(可省略)
x,y 整数型 屏幕坐标

脚本实例:
示例 1 快速划动

  1. touchDown(1, 150, 550); --在 (150, 550) 按下
  2. mSleep(30);
  3. touchMove(1, 150, 600); --移动到 (150, 600)
  4. mSleep(30);
  5. touchUp(1, 150, 600); --在 (150, 600) 抬起

示例 2 连续划动

  1. touchDown(1, 150, 550); --在 (150, 550) 按下
  2. for i = 0, 200, 10 do --使用for循环从起始点连续横向移动到终止点
  3. touchMove(1, 150 + i, 550);
  4. mSleep(150); --延迟
  5. end
  6. touchUp(1, 150 + 200, 550); --在 (350, 550) 抬起

示例 3 多点触控

  1. touchDown(1, 200, 400); --手指 1 (200, 400) 按下
  2. touchDown(2, 300, 500); --手指 2 (300, 500) 按下
  3. mSleep(50);
  4. for i = 1, 100, 1 do --使用 for 循环使两只手指同时分离
  5. touchMove(1, 200 - i, 400 - i);
  6. touchMove(2, 300 + i, 500 + i);
  7. mSleep(50);
  8. end
  9. touchUp(1, 200 - 100, 400 - 100); --抬起手指1
  10. touchUp(2, 300 + 100, 500 + 100); --抬起手指2

注意事项:

  1. 需要注意的是在使用 touchDowntouchUp 函数时,中间一定要插入一定的延时,建议大于 20毫秒,否则可能会出现点击无效等异常情况。

名词解析:

  1. 手指序号,用于多点触控的支持。标记多只手指,来分别控制它们的移动。
  2. 屏幕坐标,横坐标为 x,纵坐标为 y,单位为像素。例如,iPhone 4 与 iPhone 4S 的屏幕分辨率 为 640 * 960,则其最大横坐标为 640,最大纵坐标为 960。
  3. for 循环是 Lua 基本语法,属于循环控制。

函数:inputText 输入字符串

函数名称:输入字符串
函数功能:向输入框中输入文本
函数方法
inputText(文本型string);
返回值:无
参数 类型 说明
string 文本型 将输入的文本以及控制字符

脚本实例:
输入欢迎文本并发送

  1. touchDown(150,150); --点击输入框获取焦点(假设输入框坐标已知)
  2. touchUp(150,150);
  3. mSleep(1000); --延迟 1 秒以便获取焦点
  4. for var = 1,15 do
  5. inputText("\b") --删除输入框中的文字(假设输入框中已存在文字)
  6. end
  7. inputText("Welcome.#ENTER#"); --在输入框中输入字符串"Welcome."并回车

注意事项:

  1. 使用该函数前,必须先点击输入框获取焦点(指使当前的输入光标停留在某一输入框中)。
  2. 如果设备系统版本为iOS 7,\r无法使用,使用\b需安装触动精灵 1.6.9 及以上版本。
  3. 仅在 iOS 7 上,可使用"#ENTER#"作为回车,相当于点击虚拟键盘上的"Done",需要注意的是,并不是所有输入框都可以使用此功能,在某些应用当中可能导致目标应用崩溃。
  4. 该函数不支持第三方输入法(指百度输入法、搜狗输入法等),请切换到系统内置输入法方可使用。
    对于弹出的窗口,需要先初始化再使用该函数,例如 App Store登录窗口(该窗口Bundle ID 为"com.apple.springboard")。
  5. 控制字符包括 \b、\n、\r、#ENTER#。

函数:getColor、getColorRGB 获取屏幕某点颜色值

函数名称:获取颜色、获取颜色RGB 、取色
函数功能:获取某一点的颜色值(BGR)、颜色 R,G,B 值。
函数方法
color = getColor(整数型x, 整数型y);
返回值 1 整型 color
color_r, color_g, color_b = getColorRGB(整数型 x, 整数型 y);
返回值 2 整型 color_r, color_g, color_b
参数 类型 说明
x,y 整数型 将获取颜色值的屏幕坐标
返回值 类型 说明
color 整数型 该点的十进制颜色值BGR
color_r, color_g, color_b 整数型 该点颜色的RGB值

脚本实例:
1.如果某点符合某颜色则点击

  1. color = getColor(100, 100); --获取(100,100)的颜色值,赋值给color变量
  2. if color == 0xffffff then --如果该点的颜色值等于0xffffff
  3. touchDown(1, 100, 100); --那么点击该点
  4. touchUp(1, 100, 100);
  5. end

--亦可写作

  1. if getColor(100, 100) == 0xffffff then
  2. touchDown(1, 100, 100);
  3. touchUp(1, 100, 100);
  4. end

2.如果某点的颜色与某颜色相似则点击

  1. r,g,b = getColorRGB(100,100); --获取(100, 100)的颜色值,赋值给color变量
  2. if r > 200 and g < 150 then --如果红色强度大于 200,绿色强度小于 150
  3. touchDown(1,100,100); --那么点击该点
  4. touchUp(1,100,100);
  5. end

3.封装一个单点模糊比色函数

  1. function isColor(x,y,c,s)
  2. local fl,abs = math.floor,math.abs
  3. s = fl(0xff*(100-s)*0.01)
  4. local r,g,b = fl(c/0x10000),fl(c%0x10000/0x100),fl(c%0x100)
  5. local rr,gg,bb = getColorRGB(x,y)
  6. if abs(r-rr)<s and abs(g-gg)<s and abs(b-bb)<s then
  7. return true
  8. end
  9. end
  10. --用法
  11. if isColor(963, 961, 0x7b593f,90) then --90 为模糊值,值越大要求的精确度越高
  12. touchDown(963, 961)
  13. mSleep(50)
  14. touchUp(963, 961)
  15. end

注意事项:

  1. getColor 与 getColorRGB 的作用是一样的,只不过前者返回单变量,后者返回 R, G, B 三变量。
  2. 如直接使用例子中的代码进行测试,请在全部代码之前,加入 2 ~ 3 秒延迟;或者使用循环语句。 因为脚本开始运行时,会出现音量提示遮盖在前台,影响获取颜色。
  3. 特别注意,getColor函数获得的颜色值十六进制文本中,实际顺序为 RGB。

参考资料 如何获取屏幕上某点的颜色

  1. 在你想取出颜色的界面,同时按一下电源键和 Home 键进行截图(此时屏幕会闪一下),在相机胶卷中可以看到该截图。
  2. 使用PP助手等软件将截图导出到电脑,使用取色工具或带有取色功能的软件(如 PhotoShop)取色。
    取色工具可以在附录中找到下载地址。
    常见颜色表:http://www.114la.com/other/rgb.htm

名词解析

  1. R,G,B值,即代表红(Red)、绿(Green)、蓝(Blue)三个通道的颜色强度。
  2. 整型,指的是可以用十、十六、八进制指定的数据类型。使用十六进制符号,必须加上 0x。
  3. 赋值是 Lua 基本语法,操作符为"="(一个等号)。
  4. 等于是 Lua 基本语法,属于条件控制,操作符为"=="(两个等号)。新手常常将等于写作赋值,从而导致编译出现错误。

函数:mSleep 延时

函数名称:等待延迟,延时
函数功能:发送系统等待事件。
函数方法
mSleep(整数型interval);
返回值:无
参数 类型 说明
interval 整数型 单位为毫秒,脚本暂停执行的时间长度

脚本实例:
1.我真的还想再延迟约 500 年

  1. mSleep(500 * 365 * 24 * 60 * 60 * 1000);

2.按住 3 秒不松手

  1. touchDown(1, 200, 300); --按下
  2. mSleep(3000); --延迟 3
  3. touchUp(1, 200, 300); --抬起

注意事项:

  1. 延迟函数的使用与各类函数的使用息息相关,尤其是触摸类函数。脚本一般是用来模拟人在界面上的操作,因此要考虑人在各种情况下的延迟、界面加载时的响应时间。
  2. 延迟间隔不可过短,当 interval <= 50 ms 时,延迟精确度大幅下降,当 interval <= 16 ms 时,实际延迟约在16 ms左右。
  3. 请勿将此函数用于长时间的精确计时。
  4. 1 秒 (s) = 1000 毫秒 (ms)。

函数:findColorInRegionFuzzy 模糊区域找色

函数名称:区域找色、模糊找色、模糊区域找色
函数功能:在指定区域中,寻找符合指定颜色的坐标,支持模糊查找。
函数方法
x, y = findColorInRegionFuzzy(整型 color, 整数型 degree, 整数型 x1, 整数型 y1, 整数型 x2, 整数型 y2);
返回值:整数型 x, y
参数 类型 说明
color 整数型 将要找的十六进制颜色值
degree 整数型 寻找精度,范围:1 ~ 100,当是100时为完全匹配
x1,y1 整数型 欲寻找的区域左上角顶点屏幕坐标
x2,y2 整数型 欲寻找的区域右下角顶点屏幕坐标
返回值 类型 说明
x,y 整数型 找到的点坐标,如未找到则返回 -1,-1

脚本实例:
1.精确寻找指定区域中,指定颜色的坐标,并按下
--寻找符合条件的点

  1. x, y = findColorInRegionFuzzy(0x112233, 100, 50, 50, 300, 300);
  2. if x ~= -1 and y ~= -1 then --如果在指定区域找到某点符合条件
  3. touchDown(1, x, y); --那么单击该点
  4. touchUp(1, x, y);
  5. else --如果找不到符合条件的点
  6. dialog("未找到符合条件的坐标!",0);
  7. end

2.模糊查找指定区域中,尽可能接近指定颜色的点,并按下

  1. for deg = 100, 1, -1 do --使用 for 循环不断降低精确度
  2. x, y = findColorInRegionFuzzy(0xffffff, deg, 50, 50, 300, 300);
  3. if x ~= -1 and y ~= -1 then --如果在指定区域找到某点符合条件
  4. touchDown(1, x, y); --那么单击该点
  5. touchUp(1, x, y);
  6. break; --并跳出循环
  7. end
  8. end
  9. dialog("未找到符合条件的坐标!",0);

注意事项:

  1. 未找到则返回 (-1, -1) ,所以找到时 x, y 均不等于 -1,~= 为不等于操作符,是 Lua 基本语法, 属于逻辑控制。
  2. 通过不断降低模糊查找精确度的方法在指定区域查找到的不一定是最接近指定颜色的点,该代码应用过程中,建议使用"保持屏幕"减少性能损耗,参见"保持屏幕"一章。

函数:findImageInRegionFuzzy 模糊区域找图

函数名称:区域找图、模糊找图、模糊区域找图
函数功能:在指定区域中,寻找指定的图案,返回其左上角顶点坐标,支持模糊查找。
函数方法
x, y = findImageInRegionFuzzy(文本型 picpath, 整数型 degree, 整数型 x1, 整数型 y1, 整数型 x2, 整数型 y2, 整型 alpha);
返回值:整数型 x, y
参数 类型 说明
picpath 文本型 将要寻找的图片文件名
degree 整数型 寻找精度,范围:1 ~ 100,当是100时为完全匹配
x1,y1 整数型 欲寻找的区域左上角顶点屏幕坐标
x2,y2 整数型 欲寻找的区域右下角顶点屏幕坐标
alpha 整数型 忽略的颜色值(透明色) 若无请填 0
返回值 类型 说明
x,y 整数型 找到的图片的左上角顶点坐标,如未找到则返回 -1,-1

脚本实例:
1.精确寻找指定区域中,指定图片的位置
--寻找符合条件的图片(假设图片的背景颜色为白色)

  1. x, y = findImageInRegionFuzzy("test_alpha.png", 100, 0, 0, 320, 480, 0xffffff);
  2. if x ~= -1 and y ~= -1 then --如果在指定区域找到某图片符合条件
  3. touchDown(1, x, y); --那么单击该图片
  4. touchUp(1, x, y);
  5. else --如果找不到符合条件的图片
  6. dialog("未找到符合条件的坐标!",0);
  7. end

注意事项:

  1. 不推荐此函数,对于找小型图片精度较差。
  2. 默认图片路径为 /var/mobile/Media/TouchSprite/res(参数中无需填写完整路径),自建目录请填写相对路径。
  3. 忽略的颜色值指将要寻找的图片的背景颜色,即在屏幕画面上不匹配寻找对象的背景颜色。

函数:findMultiColorInRegionFuzzy 区域多点找色

函数名称:多点找色,区域多点找色
函数功能:在指定区域,根据颜色以及其周边点的颜色,寻找符合条件的点的坐标,支持模糊查找。
函数方法
x, y = findMultiColorInRegionFuzzy(整型color,文本型posandcolor, 整数型degree, 整数型x1,整数型y1,整数型x2,整数型y2);
返回值:整数型 x, y
参数 类型 说明
color 整型 欲寻找的参照点颜色
posandcolor 文本型 周边点颜色参数
degree 整数型 寻找精度,范围:1 ~ 100,当是100时为完全匹配
x1, y1 整数型 欲寻找的区域左上角顶点屏幕坐标
x2,y2 整数型 欲寻找的区域右下角顶点屏幕坐标
返回值 类型 说明
x, y 整数型 返回符合条件的参照点的坐标,如未找到则返回 -1,-1

进阶指导:
当我们使用“区域模糊找色”函数时,常常会因为屏幕上有大量符合指定颜色的点而找不到 需要的坐标。该函数通过在寻找到一个符合指定颜色color的坐标后,进一步确认其周边点坐标的方式,来确定准确目标。例如,现在我们在图像上找到了我们需要的一个按钮,这个按钮的图案是不变的,但是它的整体位置却会在整个屏幕上变化,现在我们想要在脚本运行时得到其坐标。

我们首先找到一个点:
这个点的颜色为 0x181F85,坐标为 (268, 802)。
记录下来,接着找这个按钮上的另外一个点:
这个点的颜色为 0x00BBFE,坐标为 (297, 803),相对于第一个点的坐标为 (29, 1)。 记录下来,接着找这个按钮上的第三个点和第四个点。
第三个点的颜色为 0x0B6BBE,坐标为 (371, 798),相对于第一个点的坐标为 (103, -4)。
第四个点的颜色为 0x150972,坐标为 (333, 811),相对于第一个点的坐标为 (65, 9)。
现在我们找到了需要的三个点:

序号 颜色 坐标 相对坐标
1 0x181F85 (268, 802) (0, 0)
2 0x00BBFE (297, 803) (29, 1)
3 0x0B6BBE (371, 798) (103, -4)
4 0x150972 (333, 811) (65, 9)

现在我们可以把它写成多点找色的格式了:
--多点找色

  1. x, y = findMultiColorInRegionFuzzy(0x181F85, "29|1|0x00BBFE,103|-4| 0x0B6BBE,65|9|0x150972", 100, 0, 0, 639, 959);

那么返回的(x, y)就应该是(268,802)了。即使这个按钮平移了,这个点的坐标变了,也可以寻找到其准确位置。

注意事项:

  1. posandcolor 参数中的坐标为相对坐标。
  2. 多点找色的代码可直接用触动精灵取色工具生成,其使用方法参见图文教程。
  3. 颜色值的十六进制文本中,其顺序为BGR。
  4. 相对于第一个点的坐标,即用这个点的横坐标、纵坐标分别减去第一个点的横坐标、纵坐标,可以为负数。
  5. 使用此函数时精度参数设置过低,会导致性能大幅下降。

函数:findMultiColorInRegionFuzzyExt 高级区域多点找色

函数名称:高级多点找色,高级区域多点找色
函数功能:在指定区域,根据颜色以及其周边点的颜色,寻找所有符合条件的点的坐标,支持模糊查找。
函数方法
point = findMultiColorInRegionFuzzyExt(整型color,文本型posandcolor, 整数型degree, 整数型x1,整数型y1,整数型x2,整数型y2);
返回值:table类型 point
参数 类型 说明
color 整型 欲寻找的参照点颜色
posandcolor 文本型 周边点颜色参数
degree 整数型 寻找精度,范围:1 ~ 100,当是100时为完全匹配
x1, y1 整数型 欲寻找的区域左上角顶点屏幕坐标
x2,y2 整数型 欲寻找的区域右下角顶点屏幕坐标
返回值 类型 说明
point table类型 以 table 形式返回所有符合条件的参照点的坐标,如未找到则返回的table为空

返回的 table 为以下形式:

  1. table = {
  2. {x = 100,y = 110},
  3. {x = 200,y = 210},
  4. {x = 300,y = 310},
  5. ...
  6. }

脚本实例:

  1. point = findMultiColorInRegionFuzzyExt( 0xcf0000, "-37|3|0x942814,-38|20|0xeba62d,1|54|0xf2b054,28|22|0x8a5707", 90, 97, 220, 903, 701)
  2. if #point ~= 0 then --如返回的table不为空(至少找到一个符合条件的点)
  3. for var = 1,#point do
  4. nLog(point[var].x..":"..point[var].y)
  5. end
  6. end

函数:findImage 高级区域找图

函数名称:区域找图、高级区域找图
函数功能:在指定区域中,寻找指定的图案,返回其左上角顶点坐标。
函数方法
x, y = findImage(文本型 picpath, 整数型 x1, 整数型 y1, 整数型 x2, 整数型 y2);
返回值:整数型 x, y
参数 类型 说明
picpath 文本型 将要寻找的图片文件名
x1,y1 整数型 欲寻找的区域左上角顶点屏幕坐标
x2,y2 整数型 欲寻找的区域右下角顶点屏幕坐标
返回值 类型 说明
x,y 整数型 找到的图片的左上角顶点坐标,如未找到则返回 -1,-1

脚本实例:
1.精确寻找指定区域中,指定图片的位置
--寻找符合条件的图片

  1. snapshot('test.png',1,1,55,55) --截图到资源文件夹
  2. x, y = findImage("test.png", 0, 0, 120, 480);--在(0,0)到(120,480)寻找刚刚截图的图片
  3. if x ~= -1 and y ~= -1 then --如果在指定区域找到某图片符合条件
  4. toast(x..y); --显示坐标
  5. else --如果找不到符合条件的图片
  6. toast('没有找到图片!');
  7. end

注意事项:

  1. 此函数推荐与snapshot 截图函数配合使用,成功率较高。
  2. 默认图片路径为 /var/mobile/Media/TouchSprite/res(参数中无需填写完整路径),自建目录请填写相对路径。

函数:snapshot 截图

函数名称:截图
函数功能:截取屏幕中指定区域的图像并生成指定格式的图片文件
函数方法
snapshot(文本型 picname, 整数型 x1,整数型y1, 整数型 x2, 整数型 y2, 数字型 quality);
返回值:无
参数 类型 说明
picname 文本型 截图保存的文件名
x1,y1 整数型 欲截取的区域左上角顶点屏幕坐标
x2,y2 整数型 欲截取的区域右下角顶点屏幕坐标
quality 数字型 当截图格式选为jpg时,可用此参数控制图片质量,此参数值为大于0且小于等于1的值

脚本实例:
--全屏截图(iPhone 5, 5S),并以当前日期为文件名保存

  1. current_time = os.date("%Y-%m-%d", os.time());
  2. snapshot(current_time..".png", 0, 0, 639, 1135); --以时间戳命名进行截图
  3. snapshot(current_time..".jpg", 0, 0, 639, 1135, 0.5); --使用jpg格式截图,并设置图片质量为0.5

注意事项:

  1. 保存图片的格式可为 bmp, jpg, png,因为 png 是 iOS 中最常见的格式,所以推荐选择 png。
  2. 截图时,如使用全屏截图,右下角顶点坐标最大为 (639, 1135),否则会出现越界错误。
  3. 默认图片路径为 /var/mobile/Media/TouchSprite/res,自建目录请填写相对路径,文件相同将会被覆盖
  4. 本文实例中 os.date 与 os.time 为 Lua 基本库函数,请查阅附录 Lua 操作系统函数库。
  5. ".." 为字符串连接操作符,可以将字符串变量、常量连接在一起。
  6. 本文实例中 640 * 1136 为 iPhone 5, 5S 等设备的分辨率,实际使用中请根据运行设备替换为对应值。
  7. quality参数仅在触动精灵版本高于 2.0.9 时方可使用。
  8. 当安装版本高于 v2.2.5 - 1 时,四个坐标参数省略,默认为截取全屏图像。

函数:saveImageToAlbum 将图片存入系统相册

函数名称:将图片存入相册
函数功能:将指定路径的图片文件写入系统相册。
支持版本:触动精灵iOS v2.2.5 - 1 以上
函数方法
saveImageToAlbum(文本型 path);
返回值:无
参数 类型 说明
path 文本型 需要写入系统相册的图片路径,支持绝对路径

脚本实例:

  1. saveImageToAlbum("/User/Media/TouchSprite/lua/1.png");
  2. saveImageToAlbum("2.png");

注意事项:

  1. 图片的格式可为 bmp, jpg, png。
  2. 如不填写绝对路径时,将默认为触动精灵 RES 目录下的文件。

函数:dialog 提示框

函数名称:对话框,弹窗,提示框
函数功能:弹出提示信息。
函数方法
dialog(文本型 text, 整数型 time);
返回值:无
参数 类型 说明
text 文本型 提示信息,将在设备屏幕上以弹窗形式显示
time 整数型 提示信息显示的时间,不限时间请填0

脚本实例:
1.欢迎使用

  1. dialog("欢迎使用触动精灵!", 5);
  2. mSleep(1000);
  3. dialog("本脚本仅供演示对话框的用法。\n提示信息可以换行。",0);

注意事项:

  1. time 参数时间一般在 2 秒以上,否则出现时间太短看不清楚。
  2. 该函数仅供呈现提示信息给用户,不可接收返回值。
  3. 该函数所产生的提示窗口显示的时候会影响当前屏幕取色,请在合理的位置使用该函数。
  4. 关于转义字符:\n 为换行,请查阅 Lua 转义字符表。
  5. 在触动精灵 2.2.4 以上版本中,time 参数可省略,如省略将按 0 处理。

函数:toast 提示

函数名称:HUD提示
函数功能:以HUD方式显示提示信息。
支持版本:触动精灵iOS v2.2.4 以上
函数方法
toast(文本型 text);
返回值:无
参数 类型 说明
text 文本型 提示信息,将在设备屏幕上以HUD形式显示

脚本实例:
1.欢迎使用

  1. toast("欢迎使用触动精灵!");
  2. mSleep(1000);
  3. toast("本脚本仅供演示toast函数效果。\n提示信息可以换行。");

注意事项:

  1. 该函数所产生的提示信息将以HUD形式显示在屏幕上,该函数所产生的提示信息可能会影响当前屏幕的找色,请合理使用。

函数:dialogRet 带按钮的对话框

函数名称:带按钮的对话框
函数功能:弹出提示信息,并提供 1 ~ 3 个按钮给用户选择。
函数方法
choice = dialogRet(文本型 text, 文本型 cbtn, 文本型 btn1, 文本型 btn2, 整数型 time);
返回值:整数型 choice
参数 类型 说明
Text 文本型 提示信息
cbtn 文本型 默认按钮标题,不需要请填 ""
btn1 文本型 可选按钮 1,不需要请填 "" 或 0
btn2 文本型 可选按钮 2,不需要请填 "" 或 0
time 整数型 提示信息显示的时间,不限时间请填 0
返回值 类型 说明
choice 整数型 返回用户按下按钮的序号 cbtn == 0;btn1 == 1;btn2 == 2

脚本实例:
1.选择性别(双选)

  1. choice = dialogRet("请选择您的性别:", "男", "女", "", 0);

2.选择性别(三选)

  1. choice = dialogRet("请选择您的性别:", "男", "女", "人妖", 0);
  2. if choice == 0 then --男
  3. dialog("你好,帅哥。",0);
  4. mSleep(1000);
  5. elseif choice == 1 then --女
  6. dialog("你好,美女",0);
  7. mSleep(1000);
  8. else --人妖
  9. dialog("人妖不允许使用该脚本。",0);
  10. mSleep(1000);
  11. lua_exit(); --退出脚本
  12. end

3.请阅读许可协议

  1. dialogRet("这里是许可协议或广告,强制阅读 30 秒不可消除。", "", "", "", 30);

注意事项:

  1. 请勿将三个按钮都设置为空,再将 time 参数设置为 0,这样将造成出现无法消失也没有按钮的 对话框,造成设备无法进行其它操作,只能重启。
  2. 值得一提的是,cbtn 总是对话框的最右边或者最下面的按钮。
  3. 参数中的 0 是数字,不是文本 "0"。

函数:dialogInput 带参数的对话框

函数名称:带参数的对话框
函数功能:弹出提示信息,并提供 1 ~ 2 个编辑框给用户输入。
函数方法
text_a = dialogInput(文本型title,文本型 format,文本型 btn);
返回值 1 文本型 text_a 返回用户输入的文本
text_a,text_b = dialogInput(文本型title,文本型format,文本型 btn);
返回值 2 文本型 text_a, text_b 返回用户输入的文本
参数 类型 说明
title 文本型 提示标题
format 文本型 编辑框中浅色的提示文字,如果需要两个编辑框,则将提示文字用"#"分割
btn 文本型 确认按钮标题
返回值 类型 说明
text_a,text_b 文本型 返回用户输入的文本

脚本实例:
1.输入姓名

  1. ::getInfo:: --设置跳转标签
  2. text_a = dialogInput("请输入您的姓名", "在这里输入姓名", "确认");
  3. mSleep(1000);

2.输入姓名和年龄

  1. text_a, text_b = dialogInput("请选择您的姓名和年龄", "在这里输入姓名#在这里输入年龄", "确认");
  2. mSleep(1000);
  3. if text_b ~= "" and text_a ~= "" then --均已填写
  4. dialog("你好,"..text_b.." 岁的 "..text_a.." 。", 5);
  5. mSleep(1000);
  6. elseif text_a ~= "" then --只填写了姓名
  7. dialog("你好,不知道年龄的 "..text_a.." 。", 5);
  8. mSleep(1000);
  9. else --均未填写
  10. dialog("请填写您的信息!", 5);
  11. mSleep(1000);
  12. goto getInfo; --返回重新填写
  13. end

注意事项:

  1. 一般来说,使用该函数都要对用户输入的数据进行一定的检查,例如要求非空、长度不得少于。
  2. 使用双编辑框时,函数返回的两个字符串顺序与 format 中的顺序相反,请注意。
  3. 由于对话框事件需要响应时间,所以建议每次使用对话框,均应使用延迟。

名词解析:

  1. goto 是 Lua 基本语法,设置标签,然后使用 goto 函数跳转到代码的指定位置向下执行。该函数请谨慎使用,因为大量的跳转会造成代码编写的混乱。

函数:showUI 自定义脚本界面

函数名称:自定义界面
函数功能:显示一个自定义的界面,用来接收用户相关的自定义配置。
函数方法
ret, input_1, input_2, ... = showUI(文本型 ui_json);
返回值:整数型 ret, 文本型 input_(*)
参数 类型 说明
ui_json 文本型 自定义界面json格式字符串调用时字符串需经过压缩与转义
返回值 类型 说明
ret 整数型 1 == 确认输入;0 == 取消输入
input_(*) 文本型 返回用户输入的多项数据

什么是 json

json 就是一串字符串,在该函数中,我们用它来创建界面上的一系列会使用特定的符号标注的元素:
{} 双括号表示对象
[] 中括号表示数组
"" 双引号内是属性或值
冒号表示后者是前者的值
所以 {"name": "Michael"} 可以理解为是一个包含 name 为 Michael 的对象,而 [{"name": "Michael"},{"name": "Jerry"}] 就表示包含两个对象的数组。
当然了,你也可以使用 {"name":["Michael","Jerry"]} 来简化上面一部分,这是一个拥有 name 数组的对象。
不管是键或文本型的值都要用双引号引起来,所以上面的代码就是 {"name":"json"}。

调用示例

为了便于 json 的书写,我们通常使用可读性较强的形式;但是为了便于脚本的调用,我们 需要将 json 进行压缩与转义。将上文中的 json 进行转义后,作为字符串放进 showUI 函数的参 数 ui_json 中,例如:

  1. --[[ret, input_1, input_2, ... = showUI("");]]
  2. ret, input_1, input_2, input_3 = showUI("{\"style\":"
  3. .."\"default\",\"views\":[{\"type\":\"Label\",\"text\":"
  4. .."\"settings\",\"size\":25,\"align\":\"center\",\"color\":"
  5. .."\"0,0,255\"},{\"type\":\"RadioGroup\",\"list\":"
  6. .."\"option1,option2,option3,option4,option5,option6,option7\","
  7. .."\"select\":\"1\"},{\"type\":\"Edit\",\"prompt\":\"Test\","
  8. .."\"text\":\"Custom Text\",\"size\":15,\"align\":\"left\","
  9. .."\"color\":\"255,0,0\"},{\"type\":\"CheckBoxGroup\",\"list\":"
  10. .."\"option1,option2,option3,option4,option5,option6,option7\","
  11. .."\"select\":\"3@5\"}]}");

json 在线校验格式化、压缩转义工具:http://www.bejson.com/

上面的代码看起来有些乱,可能会让新手无所适从,我们换一种形式来写:

  1. w,h = getScreenSize();--此段代码仅供演示用,不可复制粘贴直接运行
  2. MyJsonString = [[
  3. {
  4. "style": "default",
  5. "width": ]]..w..[[,
  6. "height": ]]..h..[[,
  7. "config": "save_111.dat",
  8. "timer": 10,
  9. "views": [
  10. {
  11. "type": "Label",
  12. "text": "设置",
  13. "size": 25,
  14. "align": "center",
  15. "color": "0,0,255"
  16. },
  17. {
  18. "type": "RadioGroup",
  19. "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7",
  20. "select": "1"
  21. },
  22. {
  23. "type": "Edit",
  24. "prompt": "测试三下",
  25. "text": "默认值",
  26. "size": 15,
  27. "align": "left",
  28. "color": "255,0,0"
  29. },
  30. {
  31. "type": "CheckBoxGroup",
  32. "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7",
  33. "select": "3@5"
  34. }
  35. ]
  36. }
  37. ]]
  38. ret, input1, input2, input3 = showUI(MyJsonString);

在上面的例子中可以看到"width""height"的值我们使用了变量 w,h 这两个变量具体数值由 getScreenSize() 函数提供,这样我们实现了UI界面自动适应屏幕大小,需要在UI中使用动态数据的时候我们还可以使用table的方式来进行构造,这样使用变量的时候可以更加顺手,例如:

  1. local sz = require("sz")
  2. local json = sz.json
  3. local w,h = getScreenSize();
  4. MyTable = {
  5. ["style"] = "default",
  6. ["width"] = w,
  7. ["height"] = h,
  8. ["config"] = "save_001.dat",
  9. ["timer"] = 10,
  10. views = {
  11. {
  12. ["type"] = "Label",
  13. ["text"] = "设置",
  14. ["size"] = 25,
  15. ["align"] = "center",
  16. ["color"] = "0,0,255",
  17. },
  18. {
  19. ["type"] = "RadioGroup", --单选框,input1
  20. ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",--7个单选项
  21. ["select"] = "1", --默认选择选项2,序号从0开始
  22. },
  23. {
  24. ["type"] = "Edit", --输入框,input2
  25. ["prompt"] = "请输入一个数字",--编辑框中无任何内容时显示的底色文本
  26. ["text"] = "默认值", --界面载入时已经存在于编辑框中的文本
  27. },
  28. {
  29. ["type"] = "CheckBoxGroup", --多选框,input3
  30. ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",--7个多选项
  31. ["select"] = "3@5", --默认选择选项3和选项5
  32. },
  33. {
  34. ["type"] = "ComboBox", --下拉框,input4
  35. ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",--7个下拉轩轩个
  36. ["select"] = "1", --默认选择选项2,序号从0开始
  37. },
  38. }
  39. }
  40. local MyJsonString = json.encode(MyTable);
  41. ret, input1, input2, input3, input4 = showUI(MyJsonString);--返回值ret, input1, input2, input3, input4
  1. 以上实例中将table转为JSON需要借助苏泽扩展库实现,触动精灵iOS 2.x以上版本中已集成扩展库,扩展库的更多用法请参阅手册"触动精灵苏泽扩展库"。
  2. 最下面返回值的数量应与代码中的非标签空间总数数量保持一致,否则会造成后面的非标签控件返回值无效。

一个包含所有控件的默认样式UI实例

  1. local sz = require("sz")
  2. local json = sz.json
  3. w,h = getScreenSize();
  4. MyTable = {
  5. ["style"] = "default",
  6. ["width"] = w,
  7. ["height"] = h,
  8. ["config"] = "save_01.dat",
  9. ["timer"] = 99,
  10. ["orient"] = 0,
  11. ["pagetype"] = "multi",
  12. ["title"] = "触动精灵脚本配置",
  13. ["cancelname"] = "取消",
  14. ["okname"] = "开始",
  15. pages =
  16. {
  17. {
  18. {
  19. ["type"] = "Label",
  20. ["text"] = "第一页设置",
  21. ["size"] = 25,
  22. ["align"] = "center",
  23. ["color"] = "0,0,0",
  24. },
  25. {
  26. ["type"] = "RadioGroup",
  27. ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",
  28. ["select"] = "1",
  29. },
  30. },{
  31. {
  32. ["type"] = "Label",
  33. ["text"] = "第二页设置",
  34. ["size"] = 25,
  35. ["align"] = "center",
  36. ["color"] = "0,0,0",
  37. },
  38. {
  39. ["type"] = "Edit",
  40. ["prompt"] = "请输入一个字母",
  41. ["text"] = "默认值",
  42. ["kbtype"] = "ascii",
  43. },
  44. {
  45. ["type"] = "Edit",
  46. ["prompt"] = "请输入一个数字",
  47. ["text"] = "默认值",
  48. ["kbtype"] = "number",
  49. },
  50. },{
  51. {
  52. ["type"] = "Label",
  53. ["text"] = "第三页设置",
  54. ["size"] = 25,
  55. ["align"] = "center",
  56. ["color"] = "0,0,0",
  57. },
  58. {
  59. ["type"] = "CheckBoxGroup",
  60. ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",
  61. ["select"] = "3@5",
  62. },
  63. {
  64. ["type"] = "ComboBox",
  65. ["list"] = "选项1,选项2,选项3",
  66. ["select"] = "1",
  67. ["data"] = "子选项1,子选项2,子选项3,子选项4#子选项5,子选项6,子选项7#子选项8,子选项9",
  68. ["source"] = "test"
  69. },
  70. {
  71. ["type"] = "ComboBox",
  72. ["select"] = "1",
  73. ["dataSource"] = "test"
  74. },
  75. }
  76. }
  77. }
  78. local MyJsonString = json.encode(MyTable);
  79. retTable = {showUI(MyJsonString)};
  80. for var = 1,#retTable do
  81. nLog(retTable[var]) --输出每一个返回值
  82. end
  1. 以上实例中使用了两个 ComboBox 控件,并在两个 ComboBox 控件之间建立了数据关联,此控件属性需触动精灵iOS V 2.1.8 以上版本支持。
  2. 以上实例中的 orient、pagetype、title 属性需触动精灵iOS V2.2.5 以上版本支持。
  3. 以上实例中最后对于 showUI 的调用将返回一个table。

用 json 创建界面

上面是调用的例子,但是我们首先我们要设计一个界面,并生成一段json字符串,再进行压缩转义。
我们先看上图界面示例json原来的样子(非脚本代码,不可直接引用),再作解释:

  1. {--此示例仅供演示作用,不可复制粘贴直接运行
  2. "style": "default", "config": "save_111.dat", "width": 400,
  3. "height": 120, "bg": "a.png", "timer": 10, "cancelname": "取消", "okname": "开始",
  4. "views": [
  5. {
  6. "type": "Label",
  7. "text": "设置",
  8. "size": 25, "align": "center",
  9. "color": "0,0,255"
  10. },
  11. {
  12. "type": "RadioGroup",
  13. "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7",
  14. "select": "1"
  15. },
  16. {
  17. "type": "Edit",
  18. "prompt": "测试三下",
  19. "text": "默认值",
  20. "size": 15, "align": "left",
  21. "color": "255,0,0"
  22. },
  23. {
  24. "type": "CheckBoxGroup",
  25. "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7",
  26. "select": "3@5"
  27. },
  28. {
  29. "type": "ComboBox",
  30. "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7",
  31. "select": "1"
  32. },
  33. {
  34. "type": "Image",
  35. "src": "http://www.baidu.com/img/bdlogo.png"
  36. }
  37. ]
  38. }

创建一个界面,需要包含 style 与 views 两个主键。
style 表示界面样式,views 数组则包含了界面上的控件。

全局属性

style 界面样式

  • default - 默认样式,一般设置为默认即可,所有控件自动排列,每个控件占据一行。
  • custom - 自定义样式,当界面样式被指定为这种,则必须指定每个控件的 rect 属性以调整控件的尺寸以及位置,具体参看后面章节。

width、height 界面的宽和高

width 与 height 分别指定了界面的宽和高(像素 pixels),请注意宽度不得低于 400 pixels,高度不得低于 120 pixels。

bg 指定界面的背景图片

指定界面的背景图片,相对路径为 res 资源目录,可填写绝对路径。

okname、cancelname 指定底部按钮显示文字

  • okname - 指定底部右侧确认按钮上显示的文字。
  • cancelname - 指定底部左侧取消按钮上显示的文字。

title 界面标题

触动精灵iOS V2.2.5 及以上版本支持

用于指定UI顶部标题栏文字。

pagetype 开启多页显示模式

触动精灵iOS V2.2.5 及以上版本支持

当指定该属性值为 multi 时,UI可分页显示,左右滑动进行翻页,如不指定该属性,将使用默认的单页模式。

orient 指定UI界面显示方向

触动精灵iOS V2.2.5 及以上版本支持

  • 0 - Home键在设备下方
  • 1 - Home键在设备右侧
  • 2 - Home键在设备左侧

注意事项:

当在 iOS9 以上版本的iPad设备上使用 showUI 界面时,务必使用此属性指定正确的屏幕方向,否则将可能出现确定、取消按钮无法点击的情况。

config 指定UI配置保存文件名

  • 如果存在此键名,则用户点击确认时保存配置到指定文件中。
  • 如果配置文件存在,调用该界面会自动载入该文件中的配置,如果更新了UI代码后必须要删除旧的配置文件才会正常显示。

timer - 指定UI界面自动确认时间

  • 指定界面在自动配置文件存在的情况下,自动确认UI输入。
  • 注意使用此属性必须要设定 config 属性,第一次存储配置文件不存在时,此属性不生效,当配置文件存在时,此属性会在生成UI上进行倒计时,同时用户也可以点击闹钟图标取消倒计时。
  • 在脚本UI界面点击闹钟标志则取消倒计时功能。

rettype 指定返回值类型

触动精灵iOS V2.2.6 及以上版本支持

  • default - 默认模式,保持旧版格式,可使用此属性兼容旧的脚本UI。
  • array - 数组模式,将所有控件返回值按添加顺序放入一个table中并返回。
  • table - table模式,将所有控件返回值以 key,values 形式的table返回,key为控件id属性所指定的值。

selpage 多页模式下指定默认停留的页面

触动精灵iOS V2.2.7 及以上版本支持

通用属性

width 控件宽度

触动精灵iOS V2.2.6 及以上版本支持

当 showUI 全局属性 style 为 default 时,如需将多个控件放入同一行显示,可用此属性调整控件宽度。

nowrap 指定下一个控件是否换行

触动精灵iOS V2.2.6 及以上版本支持

当此属性为 1 时,将指定下一个控件不换行,用于将多个控件放入一行显示。

界面控件

我们可以看到,界面控件被定义在 views 数组中。而自定义界面一共有七种控件类型 type:标签 Label,单选框 RadioGroup,编辑框 Edit,多选框 CheckBoxGroup,下拉框 ComboBox,图片 Image。

标签 Label

一共有四种属性:标题 text、字体大小 size、对齐方式 align、字体颜色 color

参数 类型 说明
标题 text 文本型 必填,一般来用显示说明文字或者标题,该控件没有任何返回值,只用作显示
字体大小 size 数值型 选填,如果不指定该属性,则默认值为 15
对齐方式 align 文本型 选填,默认左对齐。可取值为:左对齐 left,右对齐 right,居中 center
字体颜色 color 文本型 选填,默认黑色。使用RGB十进制数值,以英文半角逗号分割

注意事项:

标签可支持多行显示,在字符串中插入 \n 可以进行换行,例如:\"测试\n测试 1\n测试 2\"
文字颜色尽量选择和背景区别较大、在电子设备屏幕上看起来不刺眼的颜色,具体可参考配色网

单选框 RadioGroup

一共有五种属性:可选项目标题 list、默认选中项编号 select、控件ID id、在可选项上显示图片 images、选项图片缩放 scale

参数 类型 说明
可选项目标题 list 文本型 必填,多个可选项目之间用英文半角逗号分割
默认选中项编号 select 文本型 必填,只允许填写一个,序号从 0 开始,与可选项目标题中的顺序保持一致
控件ID id 文本型 选填,为控件指定ID,可以理解为控件的名称,在返回类型为table时将作为返回table中的key
在可选项上显示图片 images 文本型 选填,此属性可单独使用也可以和list属性同时使用,多个图片资源用英文半角逗号分割
选项图片缩放 scale 数值型 当images属性有效时可用此属性设置图片资源缩放比例,范围0 - 1

编辑框 Edit

一共有六种属性:编辑框提示文本 prompt、编辑框默认内容 text、 字体大小 size、对齐方式 align、字体颜色 color、键盘类型 kbtype

参数 类型 说明
编辑框提示文本 prompt 文本型 必填,编辑框中无任何内容时显示的底色文本
编辑框默认内容 text 文本型 必填,界面载入时已经存在于编辑框中的文本
字体大小 size 数值型 选填,如果不指定该属性,则默认值为 15
对齐方式 align 文本型 选填,默认左对齐。可取值为:左对齐 left,右对齐 right,居中 center
字体颜色 color 文本型 选填,默认黑色。使用RGB十进制数值,以英文半角逗号分割
键盘类型 kbtype 文本型 选填,设置获取焦点时弹出的键盘类型,number ascii default

多选框 CheckBoxGroup

又称作检查框,一共有五种属性:可选项目标题 list、默认选中项编号 select、控件ID id、在可选项上显示图片 images、选项图片缩放 scale

参数 类型 说明
可选项目标题 list 文本型 必填,多个可选项目之间用英文半角逗号分割
默认选中项编号 select 文本型 必填,允许填写一个或多个,填写多个时以 @ 分割。序号从 0 开始,与可选项目标题中的顺序保持一致
控件ID id 文本型 选填,为控件指定ID,可以理解为控件的名称,在返回类型为table时将作为返回table中的key
在可选项上显示图片 images 文本型 选填,此属性可单独使用也可以和list属性同时使用,多个图片资源用英文半角逗号分割
选项图片缩放 scale 数值型 当images属性有效时可用此属性设置图片资源缩放比例,范围0 - 1

下拉框 ComboBox

一共有五种属性:
可选项目标题 list、默认选中项编号 select、两个ComboBox控件建立数据关联时的下级选项 data、两个ComboBox控件建立数据关联时的上级数据源名称 source、两个ComboBox控件建立数据关联时的下级数据源名称 dataSource

参数 类型 说明
可选项目标题 list 文本型 必填,多个可选项目之间用英文半角逗号分割
默认选中项编号 select 文本型 必填,只允许填写一个,序号从 0 开始,与可选项目标题中的顺序保持一致
两个ComboBox控件建立数据关联时的下级选项 data 文本型 选填
两个ComboBox控件建立数据关联时的上级数据源名称 source 文本型 选填
两个ComboBox控件建立数据关联时的下级数据源名称 dataSource 文本型 选填

注意事项:

  1. 默认选中项编号 select 只允许填写一个,序号从 0 开始(此控件需触动精灵iOS V2.1.3 以上版本支持)。
  2. 上一级的必须要有data数据给下级使用,而且list里面逗号分割的个数必须要和data里面#号分割的个数保持一致,上一级的source 和下一级的 dataSource 要保持一致
  3. 使用了dataSource 就不可以使用list(data、source、dataSource属性需触动iOS V2.1.8 以上版本支持)

图片 Image

放置一个图片到 UI 上,属性:插入图片的路径 src、

参数 类型 说明
插入图片的路径 src 文本型 必填,可以是本地路径或者网络路径
对齐方式 align 文本型 选填,在 default 模式下设置 image 控件的对齐方式 left center right
缩放比例 scale 数值型 选填,在 default 模式下设置 image 控件的缩放比例,范围 0 - 1
宽度 width 数值型 选填,在 default 模式下设置 image 控件的宽度

注意事项:
图片路径的可以是本地路径或者网络路径,例如:\"type\":\"Image\",\"src\":\"http://www.baidu.com/img/bdlogo.png\" 或者\"src\":\"1.png\"

默认样式

以上六种控件均可重复使用,这个界面的样式 style 为 default,即默认样式,这个样式下的控件将会自动排列,不需要指定其坐标。

指定控件尺寸与位置

另一种界面样式为 custom,当界面样式被指定为这种,则必须指定每个控件的 rect 属性以调整控件的尺寸以及位置,例如:

  1. {
  2. "type": "Edit", "size": 15, "align": "left",
  3. "prompt": "提示文字",
  4. "text": "默认文字",
  5. "color": "255,0,0",
  6. "rect": "0,0,100,40"
  7. }
参数 类型 说明
尺寸与位置 rect 文本型 必填,该属性适用于全部五种控件,将控件的左上角顶点横坐标、纵坐标,控件宽度、高度分别以英文半角逗号分割。

注意事项:

在触动精灵iOS V2.2.6 以上版本中,自定义模式坐标计算方式由原来的分辨率(pt)改为分辨率(px),开发者使用自定义模式时需要做对应修改,新的方式只需将原自定义模式坐标乘以 Render 屏对应的倍数即可

返回值

除了标签 Label,其余四种控件均存在文本型返回值,按照定义时的顺序依次返回给 input_1, input_2, input_3, ...。
单选框返回当前选中项的编号;
编辑框返回其中的内容;
多选框返回 当前选中项的编号(从 0 开始),多个选项以 @ 分割。如:3@5 表示多选框组编号为 3 和 5 的两个选项已被选中。
别忘记,该函数的第一个返回值为整数型 ret,用户单击右下角的“确认”时返回 1,单击左下角的“取消”时返回 0。
通过设置全局属性 rettype 可指定返回值类型适应不同的需求,具体用法参看全局属性介绍部分(此属性需触动精灵iOS V2.2.6 以上版本支持)。

自定义样式实例代码

  1. local sz = require("sz")
  2. local json = sz.json
  3. w,h = getScreenSize();
  4. MyTable = {
  5. ["style"] = "default",
  6. ["rettype"] = "table",
  7. ["width"] = w,
  8. ["height"] = h,
  9. ["config"] = "save_01.dat",
  10. ["timer"] = 99,
  11. ["orient"] = 0,
  12. ["pagetype"] = "multi",
  13. ["title"] = "触动精灵脚本UI演示",
  14. ["cancelname"] = "取消",
  15. ["okname"] = "开始",
  16. pages =
  17. {
  18. {
  19. {
  20. ["type"] = "Label",
  21. ["text"] = "第一页设置",
  22. ["size"] = 25,
  23. ["align"] = "center",
  24. ["color"] = "0,0,0",
  25. },
  26. {
  27. ["id"] = "a01",
  28. ["type"] = "RadioGroup",
  29. ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",
  30. ["select"] = "1",
  31. },
  32. {
  33. ["type"] = "Label",
  34. ["text"] = "请选择",
  35. ["width"] = 100,
  36. ["nowrap"] = 1,
  37. },
  38. {
  39. ["id"] = "year",
  40. ["type"] = "Edit",
  41. ["width"] = 100,
  42. ["prompt"] = "年",
  43. ["text"] = "1900",
  44. ["kbtype"] = "number",
  45. ["nowrap"] = 1,
  46. },
  47. {
  48. ["type"] = "Label",
  49. ["text"] = "年",
  50. ["width"] = 30,
  51. ["nowrap"] = 1,
  52. },
  53. {
  54. ["id"] = "mon",
  55. ["type"] = "ComboBox",
  56. ["width"] = 130,
  57. ["list"] = "一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月",
  58. ["select"] = "1",
  59. ["nowrap"] = 1,
  60. },
  61. {
  62. ["type"] = "Label",
  63. ["text"] = "月",
  64. ["width"] = 30,
  65. ["nowrap"] = 1,
  66. },
  67. {
  68. ["id"] = "day",
  69. ["type"] = "ComboBox",
  70. ["width"] = 110,
  71. ["list"] = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31",
  72. ["select"] = "1",
  73. ["nowrap"] = 1,
  74. },
  75. {
  76. ["type"] = "Label",
  77. ["text"] = "日",
  78. ["width"] = 30,
  79. },
  80. {
  81. ["type"] = "Label",
  82. ["text"] = "请选择性别:",
  83. ["width"] = 170,
  84. ["nowrap"] = 1,
  85. },
  86. {
  87. ["id"] = "sex",
  88. ["type"] = "RadioGroup",
  89. ["list"] = "男,女,人妖",
  90. ["select"] = "1",
  91. },
  92. },{
  93. {
  94. ["type"] = "Label",
  95. ["text"] = "第二页设置",
  96. ["size"] = 25,
  97. ["align"] = "center",
  98. ["color"] = "0,0,0",
  99. },
  100. {
  101. ["id"] = "edit01",
  102. ["type"] = "Edit",
  103. ["prompt"] = "请输入一个字母",
  104. ["text"] = "默认值",
  105. ["kbtype"] = "ascii",
  106. },
  107. {
  108. ["id"] = "edit02",
  109. ["type"] = "Edit",
  110. ["prompt"] = "请输入一个数字",
  111. ["text"] = "默认值",
  112. ["kbtype"] = "number",
  113. },
  114. {
  115. ["type"] = "Label",
  116. ["text"] = "请选择兵种",
  117. ["size"] = 25,
  118. ["align"] = "center",
  119. ["color"] = "0,0,0",
  120. },
  121. {
  122. ["id"] = "arm",
  123. ["type"] = "CheckBoxGroup",
  124. ["list"] = "兵种1,兵种2,兵种3,兵种4,兵种5,兵种6,兵种7,兵种8,兵种9,兵种10,兵种11,兵种12",
  125. ["images"] = "a.png,b.png,c.png,d.png,e.png,f.png,g.png,h.png,i.png,j.png,k.png,l.png",
  126. ["select"] = "3@5",
  127. ["scale"] = 0.4,
  128. },
  129. },{
  130. {
  131. ["type"] = "Label",
  132. ["text"] = "第三页设置",
  133. ["size"] = 25,
  134. ["align"] = "center",
  135. ["color"] = "0,0,0",
  136. },
  137. {
  138. ["id"] = "a02",
  139. ["type"] = "CheckBoxGroup",
  140. ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",
  141. ["select"] = "3@5",
  142. },
  143. {
  144. ["id"] = "cb01",
  145. ["type"] = "ComboBox",
  146. ["list"] = "选项1,选项2,选项3",
  147. ["select"] = "1",
  148. ["data"] = "子选项1,子选项2,子选项3,子选项4#子选项5,子选项6,子选项7#子选项8,子选项9",
  149. ["source"] = "test"
  150. },
  151. {
  152. ["id"] = "cb02",
  153. ["type"] = "ComboBox",
  154. ["select"] = "1",
  155. ["dataSource"] = "test"
  156. },
  157. }
  158. }
  159. }
  160. local MyJsonString = json.encode(MyTable);
  161. UIret,values = showUI(MyJsonString)
  162. if UIret == 1 then
  163. nLog("年:"..values.year)
  164. nLog("月:"..values.mon)
  165. nLog("日:"..values.day)
  166. end
  1. 以上实例需触动精灵iOS V2.2.6 以上版本支持。
  2. 实例中所使用的图片资源包下载地址:http://pan.baidu.com/s/1jGrVCH4,将图片包中的图片文件解压后放入 /User/Media/TouchSprite/res 目录中,运行实例即可看到效果。
  3. 实例在 iPhone6s iOS 9.0.2 上调试通过,如在其他设备上使用,需自行调整部分参数以适配不同的分辨率。

效果图
IMG_0089.PNG-135.6kB
IMG_0090.PNG-332.3kB
IMG_0091.PNG-109.4kB

名词解析

  1. JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本 格式,易于人阅读和编写,同时也易于机器解析和生成。
  2. JSON中冒号后的值可以是字符串、数字、也可以是另一个数组或对象。
  3. 转义即取消某些特定的、在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义,如三种引号 " ' ` 、美元符号 $ 等等。当我们在被引号“括起来”的文本中,想表示出一个引号,就需要转义,如:dialog("\"",5);

注意事项:

  1. 如果您的系统为iOS 9以上版本,并且设备是iPad,由于一些特殊原因,锁定横屏的时候弹出的UI界面可能无法正常操作,如出现此问题,请将设备改为锁定竖屏。
  2. 需要注意的是,所有控件的属性值必须按照规则来赋值,错误的赋值类型会导致一些不可预料的结果。
  3. 为了方便开发者使用,触动精灵提供了封装好的UI库供大家使用,说明文档:https://www.zybuluo.com/miniknife/note/293935#触动精灵ui库

函数:openURL 打开网络地址

函数名称:打开网址
函数功能:调用系统浏览器,打开一个指定网址。
函数方法
openURL(文本型 url);
返回值:无
参数 类型 说明
url 文本型 需要打开的目标网址

脚本实例:
调用系统浏览器打开触动精灵官方论坛

  1. openURL("http://bbs.touchsprite.com");

访问系统功能页面

  1. openURL("prefs:root=WIFI"); --打开wifi界面
  2. openURL("prefs:root=LOCATION_SERVICES"); --打开定位服务界面
  3. openURL("prefs:root=General&path=VPN"); --打开VPN界面

注意事项:

  1. 默认、正常情况下调用的浏览器为 Safari。
  2. 欲打开的目标网址必须以 http:// 开头,一些特殊协议也是支持的,如:mailto://, sms://, tel://, ifile://, cydia:// 等等。

函数:initLog、wLog、closeLog 日志函数

函数名称:初始化日志、写日志、关闭日志
函数功能:配置日志输出地址与方式、写出或发送日志、关闭日志输出连接。
函数方法
initLog(文本型 name, 整数型 flag);
wLog(文本型 name, 文本型 contents);
closeLog(文本型 name);
返回值:无
输出方式
0 - 输出到文件名
1 - 输出到带时间戳的文件名
2 - 异步发送到服务器
3 - 同步发送到服务器
参数 类型 说明
name 文本型 日志文件名或服务器地址与端口 不带后缀,自动添加.log
flag 整数型 可选输出方式
contents 文本型 日志内容,在该参数中,加入"[DATE]"自动替换为当前可读时间

脚本实例:
1.写到本地日志

  1. initLog("test", 0);--把 0 换成 1 即生成形似 test_1397679553.log 的日志文件
  2. wLog("test","[DATE] Test_1 OK!!!");
  3. mSleep(500);
  4. wLog("test","[DATE] Test_2 OK!!!");
  5. closeLog("test"); --关闭日志

2.发送服务器日志

  1. initLog("192.168.1.1", 2); --初始化日志,并以异步方式发送;把 2 换成 3 即为同步发送
  2. wLog("192.168.1.1", "[DATE] Test OK!!!"); --将日志发送到 192.168.1.1
  3. closeLog("192.168.1.1"); --关闭服务器连接

3.多日志记录

  1. initLog("test_1", 0);
  2. initLog("test_2", 0);
  3. wLog("test_1","[DATE] Test_1 OK!!!");
  4. mSleep(500);
  5. wLog("test_2","[DATE] Test_2 OK!!!");
  6. closeLog("test_1"); closeLog("test_2");

注意事项

  1. flag参数设置为 2 和 3,需要触动精灵 1.7.0 及以上版本支持,并需要配合触动精灵日志服务端 使用,要求设备与运行服务端的PC处于同一网段。
  2. 该函数支持多日志记录,即可以定义并初始化多个日志用于分类存放。
  3. 此函数一般用于脚本开发阶段,若脚本开发完成,只需注释掉initLog即可。
  4. 日志的编码为 UTF-8,请使用支持 UTF-8 编码的编辑器查看。

函数:sysLog 系统日志

函数功能:输出系统日志 NSLog
函数方法
sysLog(文本型 contents);
返回值:无
参数 类型 说明
content 文本型 需要显示的日志内容

注意事项:

  1. 该函数将日志输出到 iOS 系统级日志中,请使用 iTools 或 XCode 查看。
  2. 当使用同步消息传送时,脚本需等待日志已经到达服务端才继续执行下面的指令。
  3. 当使用异步消息传送时,调用者在发送消息以后可以不用等待响应,可以接着处理其他任务。 即发送日志无需等待发送完成即可继续执行。
  4. 注释的操作符形式为 --...... 或 --[[......]] ,可将用于说明的代码写入脚本以便开发时理解。
  5. XCode 为 Apple 专为 Mac OS X 设计的开发平台。
  6. 日志工具下载地址可在附录中找到。

函数:nLog 远程日志

函数功能:输出日志到触动精灵IDE(TS Studio)
函数方法
nLog(文本型 contents);
返回值:无
参数 类型 说明
content 文本型 需要显示的日志内容

脚本实例:

  1. for var = 1,50 do
  2. nLog("[DATE]"..var);
  3. mSleep(100);
  4. end

注意事项:

  1. 该函数需要触动精灵 2.1.6 以上版本支持。
  2. 该函数需要TS Studio 1.0.3 以上版本支持。
  3. 使用该函数无需设置日志接收端 IP 地址。
  4. 此函数仅作为调试用途,由TS Studio发起的脚本运行将会接收到nLog回传信息,其他方式运行的脚本将不会触发nLog函数。

函数:playAudio 播放音频

函数名称:播放音频
函数功能:在后台播放指定的声音文件。
函数方法
playAudio(文本型 filename);
返回值:无
参数 类型 说明
filename 文本型 音频文件名,支持 mp3、m4a、m4r、ogg、wav

脚本实例:

  1. playAudio("test.mp3"); --播放 test.mp3
  2. mSleep(10000)

注意事项:

  1. 默认音频路径为 /var/mobile/Media/TouchSprite/res,自建目录请填写相对路径。
  2. 如音频放置在默认资源目录,参数中可直接填写文件名。
  3. 脚本终止将直接导致音频播放终止。

函数:ocrText 本地光学字符识别

函数名称:本地光学字符识别
函数功能:将指定区域的图像转换为其显示出的文字。
函数方法
text = ocrText(整数型 x1, 整数型 y1, 整数型 x2, 整数型 y2, 整数型 language, 文本型 list);
返回值:文本型 text
参数 类型 说明
x1, y1 整数型 欲识别的区域左上角顶点屏幕坐标
x2, y2 整数型 欲识别的区域右下角顶点屏幕坐标
language 整数型 语言选择 10 - 英文 20 - 英文识别(适用于深色背景) 1 == 中文
list 文本型 识别白名单,设置此参数后,不在白名单中的字符将被忽略
返回值 类型 说明
text 文本型 返回的识别结果

脚本实例:

  1. recognize = ocrText(20, 120, 200, 140, 10); --OCR 英文识别
  2. mSleep(1000);
  3. dialog("识别出的字符:"..recognize, 0);
  1. whitelist = "0123456789-"
  2. a = ocrText(92, 1390, 472, 1464, 10, whitelist)
  3. dialog(a)

注意事项:

  1. 该函数对非正规字体及有干扰的情况下识别效果不佳,推荐用来识别背景色相对单一的英文及数字。
  2. 需要相应的识别库以及识别插件:
    I. 将识别库(英文 eng.traineddata,简体中文 chi_sim.traineddata)放置于 /var/mobile/Media/ TouchSprite/tessdata 目录下,此目录需手动建立;
    II. 插件(OcrPlugin.dylib)可在触动精灵更多-插件中下载(需触动精灵 2.0 以上版本);
  3. OCR 识别库下载地址可在附录中找到;
  4. 白名单参数需触动精灵iOS v2.2.7-3 以上版本支持;
  5. 触动精灵iOS v2.2.7-3 以上版本中已集成英文字库及插件,直接调用即可。
  6. 如需使用中文字库,请将中文字库文件移至 /Applications/ TouchSprite.app/tessdata 下方可正常使用。

函数:addDmOcrDict、dmOcrText、dmFindText 文字点阵化识别、查找

函数名称:文字点阵化识别(Dot Matrix)
函数功能:加载自定义的点阵字库识别屏幕上的文字。
支持版本:触动精灵iOS v2.2.4 以上
函数方法
index = addDmOcrDict(文本型 dict);
index = addDmOcrDictEx(TABLE型 dict);
返回值:整数型 index
ret = dmOcrText(index 整数型, x1 整数型, y1 整数型, x2 整数型, y2 整数型, "c0,c1" 文本型,alpha 整数型)
返回值:文本型 ret
x, y = dmFindText(index 整数型, str 文本型, x1 整数型, y1 整数型, x2 整数型, y2 整数型, "c0,c1" 文本型, alpha 整数型)
返回值:整数型 x y
参数 类型 说明
dict 文本型 字库名,如:dict.txt 由大漠工具生成,需放置于触动精灵 res 目录
index 整数型 字库标识,由 addDmOcrDict 函数返回值生成
x1, y1 整数型 欲识别的区域左上角顶点屏幕坐标
x2, y2 整数型 欲识别的区域右下角顶点屏幕坐标
c0, c1 文本型 偏色范围,由大漠工具中获取,需要与制作字库时所设值保持一致,多组偏色用#分割
alpha 整数型 精确度,范围 0 - 100
str 文本型 想要查找的字符串
返回值 类型 说明
index 整数型 字库标识,由 addDmOcrDict 函数返回值生成,dmOcrText 第一个参数需要用到此值
ret 文本型 返回的识别结果
x, y 整数型 找到的字符串坐标(字符串左上角点),如未找到则返回 -1,-1

脚本实例:

  1. index = addDmOcrDict("dict.txt")
  2. ret = dmOcrText(index,962,19,1068,54,"FFFFFF,000000",90)
  3. toast(ret)
  1. --在屏幕上找"弓"字的坐标
  2. index = addDmOcrDict("dict.txt")
  3. x, y = dmFindText(index,"弓",35, 226, 385, 264,"fffbff,737573#FFFFFF,000000",90) --两组偏色
  4. toast(x..","..y)

注意事项:

  1. 该函数完全兼容大漠字库格式,字库由大漠工具生成;
  2. 字库文件必须放置于触动精灵的 RES; 目录,加载字库时无需填写绝对路径;
  3. 生成的字库文件格式必须为UTF-8格式,字库首尾不能包含空行、空格等;
  4. 使用 dmFindText 函数需触动精灵iOS V2.2.7-2 以上版本支持;
  5. 触动精iOS灵 V2.2.7-3 以上版本可使用 addDmOcrDictEx 函数加载table格式字库。
  6. 大漠工具下载地址:http://pan.baidu.com/s/1qXpdUw8 密码:ljay

函数:keepScreen 保持屏幕

函数名称:保持屏幕,保持图像
函数功能:在脚本中保持当前屏幕内容不变,多次调用取色、找色、截图、找图等函数时,直接调用保持的内容。该函数为优化类函数,能够为大量的静态图像处理函数提供性能优化。
函数方法
keepScreen(逻辑型 flag);
返回值:无
参数 类型 说明
flag 逻辑型 保持开关

脚本实例:
遍历屏幕区块

  1. keepScreen(true);
  2. for k = 1, 640, 10 do
  3. for j = 1, 960, 10 do
  4. --格式化为十六进制文本
  5. color = string.format("%X", getColor(k, j));
  6. --输出到系统日志
  7. sysLog("("..k..", "..j..") Color: "..color..".");
  8. end
  9. end
  10. keepScreen(false);

注意事项:

  1. 据不完全统计,使用该函数与不使用该函数,普通屏上脚本取色速率高达 100x ,高分屏上脚本取色速率高达 50x。在执行大量静态图像操作时,请务必使用该函数优化脚本性能。
  2. 该函数一般用于画面变动节奏较慢,但需要根据大量取色、找色来完成计算和操作的脚本中,例如"天天爱消除"、"天天星连萌"这样的游戏。

参考资料 "天天爱消除"、"天天星连萌"脚本开源范例:
http://bbs.touchsprite.com/article/147

名词解析:

  1. 静态图像处理,指可在某一状态下屏幕内容保持到内存(不影响显示),对其进行进一步的 多次分析。否则,每次使用图像类函数,都将截取一次屏幕内容。
  2. 保持开关,逻辑型只有两种属性:true 为真,false 为假。

注意事项:

  1. 当使用 keepScreen(true); 时启用屏幕保持,运行到该函数时内存中的屏幕图像保持在这一时刻。
  2. 当使用 keepScreen(false); 时关闭屏幕保持,释放内存中的屏幕图像,以备下一次继续保持。

函数:runApp、closeApp 运行应用、关闭应用

函数名称:运行应用、关闭应用
函数功能:打开或关闭一个应用程序。
函数方法
flag = runApp(文本型 bid);
closeApp(文本型 bid);
返回值:无
参数 类型 说明
bid 文本型 应用程序的Bundle ID
返回值 类型 说明
flag 整数型 0 == 应用启动成功;非0 == 应用启动失败

脚本实例:
打开内置天气应用,然后退出

  1. r = runApp("com.apple.weather"); --启动应用
  2. mSleep(10 * 1000);
  3. if r == 0 then
  4. closeApp("com.apple.weather"); --退出应用
  5. else
  6. dialog("启动失败",3);
  7. end

注意事项:

  1. runApp函数需要系统响应时间较长,注意做好延迟或判断。
  2. 使用closeApp函数后在后台仍可看到应用程序图标属正常现象,实际进程已不在后台。
  3. 关于 Bundle ID 的获取方法,参见"初始化"一章。

函数:getScreenSize 获取屏幕分辨率

函数名称:获取屏幕分辨率,取分辨率
函数功能:获取设备屏幕的分辨率,用来判断坐标系的使用。
函数方法
width,height = getScreenSize();
返回值:整数型 width,height
返回值 类型 说明
width 整数型 获取到的屏幕宽度
height 整数型 获取到的屏幕高度

脚本实例:
根据分辨率判断设备类型

  1. width, height = getScreenSize();
  2. if width == 640 and height == 1136 then
  3. --iPhone 5, 5S, iPod touch 5
  4. elseif width == 640 and height == 960 then
  5. --iPhone 4,4S, iPod touch 4
  6. elseif width == 320 and height == 480 then
  7. --iPhone 非高分屏
  8. elseif width == 768 and height == 1024 then
  9. --iPad 1,2, mini 1
  10. elseif width == 1536 and height == 2048 then
  11. --iPad 3,4,5, mini 2
  12. end

注意事项:

  1. 统一为竖直(Home 键在下方时)屏幕的宽度和高度。

函数:getDeviceType 获取设备类型

函数名称:获取设备类型
函数功能:获取设备的类型,可使用获取屏幕分辨率代替。
函数方法
type = getDeviceType();
返回值:整数型 type
返回值 类型 说明
type 整数型 设备类型 0 == iPod Touch;1 == iPhone;2 == iPad

脚本实例:
根据分辨率判断设备类型

  1. types = getDeviceType();
  2. if types == 0 then
  3. --iPod Touch
  4. elseif types == 1 then
  5. --iPhone
  6. elseif types == 2 then
  7. - -iPad
  8. end

函数:getDeviceID 获取触动精灵设备号

函数名称:获取设备号
函数功能:获取设备标识,每台设备的标识都是唯一的。
函数方法
id = getDeviceID();
返回值:文本型 id
返回值 类型 说明
id 文本型 触动精灵32位设备号

脚本实例:
获取设备号并输出到日志

  1. id = getDeviceID();
  2. sysLog("Device ID: "..id);

注意事项:

  1. 该函数返回的,并非udid,而是触动精灵内部设备号,可用来鉴定设备唯一性。

函数:deviceIsAuth 获取触动精灵授权状态

函数名称:获取触动精灵授权状态
函数功能:检测当前设备使用的触动精灵是否已经授权。
函数方法
auth = deviceIsAuth();
返回值:整数型 auth
返回值 类型 说明
auth 整数型 0 == 当前设备未授权,有单次30分钟的运行限制;1 == 当前设备已授权,无任何限制

脚本实例:

  1. auth = deviceIsAuth();
  2. if auth ~= 0 then
  3. dialog("您的触动精灵客户端已授权",0)
  4. end

函数:userPath 获取触动精灵、帮你玩用户路径

函数名称:获取触动精灵、帮你玩用户路径
函数功能:获取触动精灵的路径或帮你玩脚本商城的用户路径。
函数方法
path = userPath();
返回值:文本型 path
返回值 类型 说明
path 文本型 触动精灵的路径或帮你玩脚本商城的用户路径

脚本实例:

  1. path = userPath();
  2. path = path.."/script/gameCFG.txt" --设置一个在帮你玩中可保存的文件路径

注意事项:

  1. 由于在帮你玩脚本商城中每个用户都有独立目录,故提供此函数来获取当前用户的文件目录路径,如果你的脚本需要保存/读取一些信息,请先用此函数获取路径并保存在变量中。

函数:lua_exit 退出脚本执行

函数名称:退出脚本、结束函数
函数功能:直接终止脚本。
函数方法
lua_exit();
返回值:无

脚本实例:
弹出许可协议,若不同意则退出脚本

  1. ret = dialogRet("许可协议\n协议内容", "同意", "不同意", 0, 0);
  2. if ret == 0 then --如果按下"同意"按钮
  3. init("0",0); --开始初始化
  4. else
  5. lua_exit(); --否则退出脚本
  6. end

注意事项:

  1. 需要注意的是调用该函数时,脚本并非立即终止执行,脚本将会在你调用此函数之后的下一行结束,如果不希望出现此情况可以在调用函数之后加入一行无意义代码即可。

函数:pressHomeKey 模拟主屏幕按键

函数名称:模拟主屏幕按键,模拟 Home 按键
函数功能:模拟用户按下或抬起主屏幕按键的操作。
函数方法
pressHomeKey(整数型 flag);
返回值:无
参数 类型 说明
flag 整数型 iOS6及其以下系统 0 ==按下;1 ==抬起;iOS7 只能填0

脚本实例:
1.返回主屏幕

  1. pressHomeKey(0); --按下 Home
  2. pressHomeKey(1); --抬起 Home

2.调出后台

  1. pressHomeKey(0); --按一次 Home
  2. pressHomeKey(1);
  3. mSleep(300); --短暂延迟
  4. pressHomeKey(0); --再按一次
  5. pressHomeKey(1);

3.调出 Siri (iPhone 4S 以上,iOS 6 及以下)

  1. pressHomeKey(0); --按下 Home
  2. mSleep(3000); --按住不放
  3. pressHomeKey(1); --抬起

注意事项:

  1. 在 iOS 6 下,状态标识为 0 时,调用该函数则开始按下 Home 键并按住不放,直到状态标识为 1 时重新调用该函数,抬起 Home 键。
  2. 在 iOS 7 下,状态标识只能填写 0,代表按一次 Home 键,即按下并立即抬起 Home 键的操作。
  3. 如需在 iOS 7 以上版本中使用双击功能请使用函数 doublePressHomeKey ,具体用法请参照对应章节。

函数:doublePressHomeKey 双击HOME键

函数名称:双击HOME键
函数功能:模拟用户双击HOME键的操作。
函数方法
doublePressHomeKey();
返回值:无

脚本实例:
1.双击HOME键打开后台

  1. doublePressHomeKey();

注意事项:

  1. 此函数需触动精灵iOS V2.x 以上版本支持
  2. 此函数仅能用于 iOS 7 或以上版本

函数:isFrontApp 判断是否为前台应用

函数名称:是否为前台应用
函数功能:根据应用的 Bundle ID 判断应用是否处于前台。
函数方法
flag = isFrontApp(文本型 bid);
返回值:整数型 flag
参数 类型 说明
bid 文本型 待检测的应用程序 Bundle ID
返回值 类型 说明
flag 整数型 0 == 不在前台运行;1 == 在前台运行

脚本实例:
1.监听应用状态

  1. isfront = 1;
  2. while isfront == 1 do --如果应用处于前台则继续
  3. mSleep(3000); --此处放置代码块
  4. isfront = isFrontApp("com.tencent.mqq"); --更新前台状态
  5. end

注意事项:

  1. Bundle ID 的获取方法参见"初始化"一章。

函数:resetIDLETimer 重置锁屏计时

函数名称:重置锁屏计时
函数功能:重置系统空闲时间,阻⽌止自动锁屏,保持屏幕常亮。
函数方法
resetIDLETimer();
返回值:无

函数实例:
保持屏幕常亮

  1. while true do
  2. mSleep(30 * 1000); --等待 30
  3. resetIDLETimer(); --重置锁屏计时
  4. end

注意事项:

  1. 该函数可能会减少屏幕、电池寿命,请谨慎使用。
  2. while true do ... end 为死循环代码,一般不建议这样使用。除非强行终止运行,否则该脚本不会自动停止,如果用户忘记终止脚本,将会缩减电池寿命。

函数:vibrator 手机振动

函数名称:手机振动,震动
函数功能:使手机振动一次。
函数方法
vibrator();
返回值:无

函数实例:
警报

  1. for var = 1,5 do
  2. playAudio("alert.mp3"); --播放警报铃声
  3. vibrator(); --振动
  4. mSleep(1000); --延迟 1
  5. end

注意事项:

  1. 频繁调用该函数可能会减少电池寿命,请谨慎使用。
  2. 使用此函数需在移动设备设置里打开震动选项。

函数:lockDevice 锁定设备

函数名称:锁定设备
函数功能:锁定设备并关闭屏幕。
函数方法
lockDevice();
返回值:无

脚本实例:
结束并锁定设备

  1. lockDevice();
  2. lua_exit();

注意事项:

  1. 无人值守的情况下,使用该函数可减少电池消耗。

函数:deviceIsLock 设备锁定状态

函数名称:设备锁定状态
函数功能:判断当前设备的屏幕锁定状态。
函数方法
flag = deviceIsLock();
返回值:整数型 flag
返回值 类型 说明
flag 整数型 0 == 表示设备未锁定;非0 == 表示设备已锁定

脚本实例:
判断设备是否锁定

  1. flag = deviceIsLock();
  2. if flag == 0 then
  3. dialog("未锁定",3);
  4. else
  5. unlockDevice(); --解锁屏幕
  6. end

注意事项:

  1. unlockDevice 函数功能是解除当前设备屏幕锁定状态,具体使用方法参照对应章节。
  2. 以上实例配合定时启动脚本效果显著,需要注意的是不要用以上代码配合开机自启动使用,此函数无法在设备启动过程中正确判断。

函数:unlockDevice 解锁设备

函数名称:解锁设备
函数功能:解除屏幕锁定状态。
函数方法
unlockDevice();
返回值:无

脚本实例:
解锁设备

  1. flag = deviceIsLock(); --判断屏幕是否锁定
  2. if flag == 0 then
  3. dialog("未锁定",3);
  4. else
  5. unlockDevice(); --解锁屏幕
  6. end

注意事项:

  1. 如您的设备设备了锁屏密码,则此函数仅能唤醒屏幕。
  2. 以上实例配合定时启动脚本效果显著,需要注意的是不要用以上代码配合开机自启动使用。
  3. 此函数仅支持iOS7以上版本。

函数:getNetTime 获取网络时间

函数名称:获取网络时间
函数功能:从互联网上获取时间信息,返回从1970年1月1日到当前状态的秒数。
函数方法
time = getNetTime();
返回值:整数型 time
返回值 类型 说明
time 整数型 返回从 1970年1月1日到当前状态的秒数

脚本实例:
获取网络时间并判断脚本过期

  1. origin = 1404439947; --代表北京时间 2014/7/4 10:12:27
  2. origin_text = os.date("%Y/%m/%d %X", origin); --格式化时间
  3. current = getNetTime(); --获取网络时间
  4. current_text = os.date("%Y/%m/%d %X", current); --格式化时间
  5. if origin >= current then
  6. dialog("脚本尚未过期!", 5);
  7. else
  8. dialog("脚本已经过期!\n脚本使⽤用期限:"..origin_text.."\n当前时间:"..current_text, 5);
  9. lua_exit();
  10. end

注意事项:

  1. 该函数需要网络支持,且根据网络状况有所延迟。

函数:writePasteboard、readPasteboard 剪贴板读写

函数名称:写剪贴板、读剪贴板
函数功能:读写系统剪贴板。
函数方法
writePasteboard(文本型 string);
返回值 无
string = readPasteboard();
返回值 文本型 string
返回值、参数 类型 说明
string 文本型 写入或读出的剪贴板字符串

脚本实例:
1.从剪贴板中写出到编辑框

  1. string = readPasteboard(); --读出剪贴板内容
  2. mSleep(500); --延迟 0.5
  3. inputText(string); --写出字符串

2.从文件中读入一行并储存到剪贴板

  1. file = io.open("/User/Media/TouchSprite/lua/test.txt" ,"r"); --以只读方式打开文件
  2. if file then --如果打开成功
  3. writePasteboard(file:read()); --储存到剪贴板
  4. file:close(); --关闭文件
  5. else
  6. dialog("Cannot open: test.txt",0);
  7. end

注意事项:

  1. 该函数将覆盖系统剪贴板,如有重要数据储存在剪贴板请及时备份。

函数:getTSVer、getOSVer 获取触动精灵/帮你玩内核服务版本号、获取系统版本号

函数功能:获取触动精灵/帮你玩版本号、获取系统版本号
函数方法
version = getTSVer();
version = getOSVer();
返回值:文本型 version
返回值 类型 说明
version 文本型 返回的触动精灵/帮你玩内核服务版本号或系统版本号如:1.8.5、2.0.6

脚本实例:
1.判断版本是否符合要求

  1. tsver = getTSVer(); --获取触动精灵/帮你玩内核服务版本
  2. tsint = tonumber(string.sub(tsver, 1, 1)..string.sub(tsver, 3,3)..string.sub(tsver, 5,5));
  3. --转化为数字版本号
  4. sysver = getOSVer(); --获取系统版本
  5. sysint = tonumber(string.sub(sysver, 1, 1)..string.sub(sysver, 3,3)..string.sub(sysver, 5, 5));
  6. --转化为数字版本号
  7. if tsint >= 170 and sysint >= 701 then
  8. init("0",0);
  9. else
  10. dialog("本脚本不支持您的触动精灵/帮你玩内核服务或系统版本,请尽快升级!", 5);
  11. lua_exit();
  12. end

名词解析:

  1. string.sub 为Lua基本函数,属于字符串处理函数库,详情请参阅相关文档。
  2. tonumber 为 Lua 基本函数,属于类型转换函数库,详情请参阅官方文档。

注意事项:

此函数适用于触动精灵、企业版和帮你玩脚本商城客户端,在不同的客户端下运行获取的都是触动服务版本号而不是客户端版本号。

函数:getOSType 获取设备系统类型

函数功能:获取设备系统类型
函数方法
os_type = getOSType();
返回值:文本型 os_type
返回值 类型 说明
os_type 文本型 返回设备的系统类型 ios、android

注意事项:

  1. 此函数需触动精灵iOS V2.1.6 以上版本支持。

函数:checkScriptAuth 获取脚本状态

函数功能:获取TSP脚本的状态
支持版本:触动精灵iOS V2.2.6、帮你玩iOS V1.0.1 以上
函数方法
tsp = checkScriptAuth();
返回值:Table型 tsp
返回值 类型 说明
tsp.type 文本型 返回当前脚本的类型: lua tsp p4u
tsp.auth 数值型 返回当前脚本的授权状态: 0 - 未授权;1 - 已授权
tsp.id 文本型 返回当前脚本的ID(此ID唯一,可在开发者平台查看)

函数:frontAppBid 获取前台应用BID

函数名称:获取前台应用
函数功能:获取前台应用的 Bundle ID。
函数方法
bid = frontAppBid();
返回值:文本型 bid
返回值 类型 说明
bid 文本型 返回前台应用程序的Bundle ID,若无应用处于前台,则返回空字符串

脚本实例:
1.获取前台应用并初始化

  1. bid = frontAppBid();
  2. init(bid,0);
  3. --亦可写作
  4. init("0",0);

2.检查指定应用是否开启

  1. bid = frontAppBid();
  2. if bid ~= "com.apple.mobilesafari" then
  3. dialog("请打开 Safari 再运行该脚本!", 5);
  4. mSleep(3000);
  5. lua_exit();
  6. end

注意事项:

  1. Bundle ID 的获取方法参见"初始化"一章。

函数:luaExitIfCall 设置来电暂停

函数名称:设置来电暂停
函数功能:设置电话拨入时停止脚本运行的标识。
函数方法
luaExitIfCall(逻辑型 flag);
返回值:无
参数 类型 说明
flag 逻辑型 状态标识 true == 开启来电暂停;false == 关闭来电暂停

脚本实例:

  1. luaExitIfCall(true);
  2. init("0",0);

注意事项:

  1. 该函数在脚本中可使用多次,以调整配置。
  2. 当有电话拨入时,检查来电暂停状态标识,若为 true,则立即终止脚本;若为 false,则继续运行脚本。
  3. 触动精灵iOS V2.2.4 以上版本将停止改为暂停。

函数:clearKeyChain 清除钥匙串

函数名称:清除钥匙串
函数功能:清除指定应用储存在系统钥匙串中的信息。
函数方法
clearKeyChain(文本型 bid);
返回值:无
参数 类型 说明
bid 文本型 需要清除的应用程序的 Bundle ID

脚本实例:
清除前台应用的钥匙串

  1. clearKeyChain(frontAppBid());

注意事项:

  1. 钥匙串一经清除,不可恢复,请妥善保管您的隐私信息。

名词解析:

  1. 钥匙串,是iOS提供给应用程序,允许自动记住密码以及重要信息的安全存储数据库,钥匙串一旦清除,该应用中记住的密码等机密信息全部清空。

函数:setWifiEnable 设置无线局域网开关

函数名称:设置无线局域网开关
函数方法
setWifiEnable(逻辑型 flag);
返回值:无
参数 类型 说明
flag 逻辑型 打开WIFI - true;关闭WIFI - false

脚本实例:

  1. setWifiEnable(true); --打开 Wifi
  2. setWifiEnable(false); --关闭 Wifi

函数:setBTEnable 设置蓝牙开关

函数名称:设置蓝牙开关
支持版本:触动精灵iOS V2.1.8 以上
函数方法
setBTEnable(逻辑型 flag);
返回值:无
参数 类型 说明
flag 逻辑型 打开蓝牙 - true;关闭蓝牙 - false

脚本实例:

  1. setBTEnable(true); --打开 蓝牙
  2. setBTEnable(false); --关闭 蓝牙

函数:setAirplaneMode 设置飞行模式开关

函数名称:设置飞行模式开关
支持版本:触动精灵iOS v2.1.8 以上
函数方法
setAirplaneMode(逻辑型 flag);
返回值:无
参数 类型 说明
flag 逻辑型 打开飞行模式 - true;关闭飞行模式 - false

脚本实例:

  1. setAirplaneMode(true); --打开 飞行模式
  2. setAirplaneMode(false); --关闭 飞行模式

函数:catchTouchPoint 获取用户点击坐标

函数名称:获取用户点击坐标
函数功能:调用该函数后,触动精灵将等待用户完成一次或多次屏幕点击,并返回点击的坐标。
函数方法
x,y = catchTouchPoint();
返回值:整数型 x,y
ret = catchTouchPoint(touchCount);
返回值:table类型 ret
返回值 类型 说明
x,y 整数型 用户点击屏幕的坐标
ret table型 当touchCound参数有效时,将返回一个包含所有点击坐标的table
参数 类型 说明
touchCount 整数型 所需获取的 点/坐标 个数(需触动精灵iOS V2.2.4以上版本支持)

脚本实例:

  1. dialog("一秒后接收用户一次点击", 0);
  2. mSleep(1000);
  3. x,y = catchTouchPoint();
  4. dialog("x:"..x.." y:"..y, 0);
  1. --获取多个点击坐标
  2. local ret = catchTouchPoint(3);
  3. for i = 1, #ret do
  4. nLog("第"..i.."次点击的位置:"..i..",x="..ret[i].x..",y="..ret[i].y);
  5. end

注意事项:

  1. 此函数将一直等待用户完成屏幕点击并阻止脚本继续运行。
  2. 此函数获取到的坐标为竖屏坐标,横屏情况请自行转换。
  3. 本函数有较小的延迟,连续点击时,请勿点击过快。
  4. 在触动精灵iOS V2.2.4以上版本中可接收多个点击坐标并以 table 形式返回。

函数:fakeGPS 伪造GPS定位信息

函数名称:伪造 GPS 定位信息
函数功能:调用该函数以欺骗当前应用获取到的位置信息。
函数方法
fakeGPS(float x, float y, flag);
返回值:无
参数 类型 说明
x,y 浮点型 将要伪造位置的经纬度坐标
flag 整数型 当此参数为非0时,就会持续让软件处于伪装GPS状态

脚本实例:

  1. a = runApp("com.baidu.map"); --启动百度地图
  2. mSleep(2000);
  3. if a == 0 then --启动成功
  4. fakeGPS(87.1478199292, 43.4912963982);
  5. end

注意事项:

  1. 多次调用该函数能多次伪造位置,当不带参数执行时将取消伪造功能。
  2. 调用此函数需先启动目标应用程序再执行伪装函数。
  3. 此函数可能对部分APP无效。
  4. 参数 flag 需触动 v2.3.2-2 以上版本支持(使用此参数后,重启软件即使不运行触动精灵脚本,也会一直处于伪装状态,直到用户运行该软件后执行fakeGPS()后才可以解除伪装状态
    )。

函数:appBundlePath 获取应用程序安装路径

函数名称:获取应用程序安装路径
函数功能:调用该函数将返回应用程序的安装路径。
支持版本:触动精灵iOS v2.0.7 以上
函数方法
path = appBundlePath(文本型 bid);
返回值:文本型 path
参数 类型 说明
bid 文本型 需要获取路径的应用程序的 Bundle ID
返回值 类型 说明
path 文本型 目标应用程序的安装路径

脚本实例:

  1. appPath = appBundlePath("com.baidu.map"); --获取"百度地图"安装路径
  2. dialog(appPath,0);

函数:appDataPath 获取应用程序数据路径

函数名称:获取应用程序数据路径
函数功能:调用该函数将返回应用程序的数据路径。
支持版本:触动精灵iOS v2.0.8 以上
函数方法
path = appDataPath(文本型 bid);
返回值:文本型 path
参数 类型 说明
bid 文本型 需要获取路径的应用程序的 Bundle ID
返回值 类型 说明
path 文本型 目标应用程序的数据路径

脚本实例:

  1. dataPath = appDataPath("com.baidu.map"); --获取"百度地图"数据路径
  2. if dataPath ~= nil then --如果获取到路径
  3. dialog(dataPath,0);
  4. end

注意事项:

  1. iOS 8 下,并非所有应用都有 data 目录,如返回值为空,说明该应用没有data 目录。

函数:appIsRunning 检测应用是否运行

函数名称:检测应用是否运行
支持版本:触动精灵iOS v2.2.0 以上
函数方法
flag = appIsRunning(文本型 bid);
返回值:整数型 flag
参数 类型 说明
bid 文本型 目标应用程序的Bundle ID
返回值 类型 说明
flag 整数型 0 - 目标应用未运行;1 - 目标应用运行中

脚本实例:

  1. flag = appIsRunning("com.tencent.mqq"); --检测QQ是否在运行
  2. if flag == 0 then --如果没有运行
  3. runApp("com.tencent.mqq") --运行QQ
  4. end

注意事项:

  1. 此函数将判断目标应用的运行状态,目标应用前台运行或者后台运行返回值都为 1

函数:lua_restart 重载脚本

函数名称:重新加载运行脚本
支持版本:触动精灵iOS v2.2.1 以上
函数方法
lua_restart();
返回值:无

注意事项:

  1. 此函数作用相当于停止脚本后重新运行脚本。

函数:setScreenResolution 更改设备分辨率

函数名称:强制更改设备分辨率
支持版本:触动精灵iOS v2.2.1 以上
函数方法
setScreenResolution(文本型 size);
返回值:无
参数 类型 说明
size 文本型 "640x960" "750x1334" "640x1136" "1125x2001" "1242x2208" "768x1024" "1536x2048" "default"

脚本实例:

  1. setScreenResolution("640x960") --将当前设备分辨率更改为 640*960
  2. mSleep(10000)
  3. setScreenResolution("default") --恢复当前设备默认分辨率

注意事项:

  1. 每次打开触动精灵将会自动恢复当前设备的默认分辨率(可在更多中关闭此功能)。
  2. 开发者可合理利用此函数进行单设备多分辨率脚本适配开发,使用此函数修改分辨率后在实际应用中运行脚本可能会存在点击坐标偏差。
  3. 执行完此函数需要一些时间生效,如在脚本中使用,请在调用此函数后加入适当的延迟。
  4. 双击电源键可强制恢复默认分辨率(在脚本运行中或者录制过程中不可用)。
  5. 此函数仅支持iOS8以上设备、且不支持非 Retina 屏幕的设备(如:iPad2、iPadMini)。
  6. 需要注意的是,如果您的设备是iphone6,在系统中将显示模式调整为放大,当前分辨率即为 640x1136,无需再次使用此函数调整分辨率为 640x1136
  7. 不推荐将分辨率改为比本身设备默认更高的分辨率,可能会出现无法恢复默认分辨率的问题。
  8. 在iOS9以上版本中请勿使用此函数,会造成一些不可预料的结果。
  9. 如您的设备有锁屏密码,请勿使用此函数更改分辨率,会造成无法解锁设备的问题。

警告

此函数不推荐写在脚本中给最终脚本用户使用,推荐仅用于开发者进行多分辨率适配截图使用,如要在脚本中使用请用弹窗提醒用户,如因操作不当造成分辨率无法恢复、无法输入解锁密码等后果由用户自己承担。

函数:setScreenScale 设置屏幕坐标缩放

函数名称:设置屏幕坐标缩放
函数功能:对屏幕坐标进行缩放,可直接影响点击、取色、找色函数中的坐标参数。
支持版本:触动精灵iOS v2.2.7 以上
函数方法
setScreenScale(逻辑型 flag, 数值型 width, 数值型 height);
返回值:无
参数 类型 说明
flag 逻辑型 true - 打开,false - 关闭
width 数值型 基准屏幕的宽度
height 数值型 基准屏幕的高度

脚本实例:

  1. setScreenScale(true, 750, 1334) --以750,1334分辨率为基准坐标进行缩放
  2. --[[
  3. 当此函数打开时,将影响点击、取色、单点模糊找色函数
  4. ]]
  5. setScreenScale(false) --关闭缩放

注意事项:

  1. 当此函数打开时,受影响的函数为点击和单点找色函数:touchDown touchUp touchMove getColor getColorRGB findColorInRegionFuzzy snapshot
  2. 多点找色函数不受此函数影响
  3. 当两个设备宽高比相差较大时,此函数转换后的效果较差

函数:beforeUserExit 终止运行之前运行

函数名称:在用户主动终止脚本运行之前执行
支持版本:触动精灵iOS v2.2.1 以上
函数方法
beforeUserExit();
返回值:无

脚本实例:
以下实例,当用户在脚本运行过程中按音量键停止脚本,将会触发 beforeUserExit 函数并执行函数体内的语句

  1. function beforeUserExit()
  2. dialog("OK",0)
  3. end
  4. for var = 1,30 do
  5. mSleep(1000)
  6. nLog("var")
  7. end

注意事项:

  1. 函数名必须为 beforeUserExit 才能够被识别,请勿在函数体中使用死循环,否则会造成脚本无法终止或其他不可预料的问题。
  2. 此函数可以被 lua_exit()音量键停止远程接口停止 触发。
  3. 此函数必须在已获取触动精灵授权的设备上使用方可生效。

函数:showFloatButton 显示、隐藏悬浮条

函数名称:显示、隐藏悬浮条
函数功能:控制浮动按钮显示或者隐藏。
支持版本:触动精灵iOS v2.2.7 以上
函数方法
showFloatButton(逻辑型 flag);
返回值:无
参数 类型 说明
flag 逻辑型 true - 显示悬浮按钮,false - 隐藏悬浮按钮

函数:whoAmI 检测触动产品类型

函数名称:检测触动产品类型
函数功能:用于判断当前运行的触动产品类型。
支持版本:触动精灵iOS v2.3.2 以上
函数方法
ret = whoAmI();
返回值:整数型 ret
返回值 类型 说明
ret 整数型 0 - 触动精灵;1 - 帮你玩;2 - 企业版;3 - 小精灵

函数:ipaInstall、ipaUninstall 安装、卸载应用程序

函数名称:安装、卸载应用程序
函数功能:用于安装或卸载ipa类型的应用程序。
支持版本:触动精灵企业版iOS v1.0.7 以上
函数方法
flag = ipaInstall(文本型 path);
flag = ipaUninstall(文本型 bid);
返回值:整数型 flag
返回值 类型 说明
flag 整数型 0 - 失败;1 - 成功
参数 类型 说明
path 文本型 所要安装的ipa文件路径
bid 文本型 所要卸载的应用程序 BundleID

注意事项:

  1. 此功能支持在 iOS6 以上版本的系统中使用
  2. ipaUninstall 函数执行成功后将删除文件系统中的ipa文件
  3. 调用此函数前需确保在目标设备中已安装过 AppSync 插件

函数:loadPlugin、callPlugin、unloadPlugin 载入插件、执行插件函数、释放插件

函数名称:载入插件、执行插件函数、释放插件
函数功能:调用外部插件完成指定任务。
函数方法
loadPlugin(文本型 plugin_name);
返回值:无
return = callPlugin(文本型plugin_name,文本型func_name, 文本型params);
返回值:文本型 return
unloadPlugin(文本型 plugin_name);
返回值:无
参数 类型 说明
plugin_name 文本型 插件必须放置于 plugin 目录,后缀名默认为 .dylib,不允许填写在参数中
func_name 文本型 插件中的函数名
params 文本型 传递给插件函数的单参数

脚本实例:
-- httpGet 使用 Get 方式访问个网址,返回获取的网页数据

  1. a = callPlugin("NetworkTools", "httpGet", "http://www.baidu.com")

-- httpPost 使用 Post 方式访问网址,返回获取的网页数据,URL 和参数对用 $ 分割

  1. a = callPlugin("NetworkTools", "httpPost", "http://www.xxx.com$a=1&b=2")

-- 自定义 UA 和 Cookie,需要在 httpGet 和 httpPost 调用前调用

  1. callPlugin("NetworkTools", "httpSetUA", "aaa")
  2. callPlugin("NetworkTools", "httpSetCookie", "bbb")

注意事项:

  1. 插件必须放置在指定目录,文件名必须为#plugin_name#.dylib,作为参数被调用时,只需填写#plugin_name#。
  2. 插件编写类名必须和插件文件名保持一致,如TSPlugin,且不和现有插件冲突。
  3. params为函数传入的参数拼接字符串,参数只能是可字符串化的数字、文本、逻辑型等。即传递多个参数需要合并成一个字符串参数共同传递,由插件进行分离处理。
    • 例如:return = callPlugin("TSMathPlugin", "add", "20, 40");
    • 插件接收到单个参数 "20, 40" 后,分割处理成 "20" 和 "40",相加返回结果为 "60"。
  4. 插件使用完毕后必须使用释放函数,防止内存泄漏。
  5. 插件放置路径:/var/mobile/Media/TouchSprite/plugin。

名词解析:

  1. 内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,直到程序结束。

触动精灵脚本开发视频教程

本教程适合入门新手学习,所有视频教学课程由 五毛君菲佣编写及制作,在此感谢 五毛君菲佣 为触动精灵及广大开发者做出的贡献。
建议大家先学习Lua语言基础教程,再配合手册详解视频学习开发手册,否则在看手册的时候会有很多不能理解的地方哦~
在能够写出简单的脚本后,再学习菲佣的脚本进阶教程。
教程地址:https://www.zybuluo.com/miniknife/note/307651

触动精灵函数扩展库

为了进一步降低脚本开发者门槛,触动精灵提供了丰富的扩展库,包含一系列实用函数和实例代码供开发者使用。
函数库下载地址及使用说明:https://www.zybuluo.com/miniknife/note/293935

触动精灵苏泽扩展库

为了进一步降低脚本开发者门槛,触动精灵iOS 2.x 以上版本集成了苏泽的扩展库,提供了一系列实用函数供开发者使用,在这里再次感谢 苏泽 为广大开发者及触动做出的杰出贡献。

使用方法:
请在脚本开头插入 local sz = require("sz") 即可调用扩展库中所有函数。

JSON 模块

函数名称:sz.json.encode、sz.json.decode
函数功能:json串编码、解码

脚本实例:

  1. local sz = require("sz")
  2. local json = sz.json
  3. local tb = {
  4. ["我"] = "苏泽",
  5. ["爱"] = "娜娜",
  6. meme = {
  7. isArray = true,
  8. 1,0,0,4,6,9,5,1,0,0,
  9. },
  10. nullvalue = null,
  11. }
  12. local jsonstring = json.encode(tb);
  13. dialog(jsonstring, 0);
  14. local tmp = json.decode(jsonstring);
  15. dialog(tmp.meme[5], 0);
  16. dialog(tostring(tmp.nullvalue), 0);
  1. --unicode utf8
  2. local sz = require "sz"
  3. local tmp = sz.json.totable([[{"toUTF8":"\u6211\u7231\u5a1c\u5a1c"}]])
  4. dialog(tmp["toUTF8"],0)

FTP 模块

函数名称:ftp.download、ftp.upload、ftp.cmd
函数功能:FTP上传、FTP下载、执行FTP命令

脚本实例:
1.FTP下载一个文件到本地

  1. local sz = require("sz")
  2. local ftp = sz.ftp
  3. _, err = ftp.download("ftp://ftp用户名:ftp密码@ftp服务器ip地址/TsLib.lua", "/User/TsLiB.lua")
  4. if err then
  5. dialog(err, 0)
  6. else
  7. dialog("文件已下载成功", 0)
  8. end

2.FTP从本地上传一个文件到服务器

  1. local sz = require("sz")
  2. local ftp = sz.ftp
  3. _, err = ftp.upload("/User/TsLiB.lua", "ftp://ftp用户名:ftp密码@ftp服务器ip地址/Games/")
  4. if err then
  5. dialog(err, 0)
  6. else
  7. dialog("文件已上传成功", 0)
  8. end

3.从FTP服务器上删除一个文件

  1. local sz = require("sz")
  2. local ftp = sz.ftp
  3. _, err = ftp.cmd("ftp://ftp用户名:ftp密码@ftp服务器ip地址/Games/", "DELE TsLiB.lua")
  4. if err then
  5. dialog(err, 0)
  6. else
  7. dialog("文件删除成功", 0)
  8. end

4.列出指定FTP服务器路径下的文件

  1. local sz = require("sz")
  2. local ftp = sz.ftp
  3. msg, err = ftp.cmd("ftp://ftp用户名:ftp密码@ftp服务器ip地址/Games/", "LIST")
  4. if err then
  5. dialog(err, 0)
  6. else
  7. dialog("文件列表\n"..msg, 0)
  8. end

设备信息模块

函数功能:获取设备信息,具体请参照脚本实例使用

脚本实例:

  1. local sz = require("sz")
  2. dialog(sz.system.udid(), 0) --获取设备的UDID
  3. dialog(sz.system.serialnumber(), 0) --获取设备的序列号
  4. dialog(sz.system.wifimac(), 0) --获取设备的WiFi MAC地址
  5. dialog(sz.system.btmac(), 0) --获取设备的蓝牙MAC地址
  6. dialog(sz.system.osversion(), 0) --获取设备的系统版本号
  7. dialog(sz.system.mgcopyanswer("ProductType"),0) --获取设备详细型号
  8. dialog(sz.system.mgcopyanswer("UserAssignedDeviceName"),0) --获取设备名称

获取本地网络地址

  1. local sz = require("sz")
  2. local ret = ""
  3. for i,v in ipairs(sz.system.localwifiaddr()) do
  4. ret = ret..(v[1]).."="..(v[2]).."\n"
  5. end
  6. dialog(ret,0)
  1. 触动精灵iOS 2.1.9 以上版本中采用新版苏泽扩展库,sz.system.localwifiaddr() 将返回一个TABLE,TABLE中包含 本地内部环回地址、蜂窝地址、本地WIFI地址。

字符串处理模块

函数名称:
tohex;
fromhex;
md5;
sha1;
aes128_encrypt;
base64_encode;
base64_decode;
aes128_decrypt;
split;
rtrim;
ltrim;
trim;
atrim;
fromgbk;
iconv;

函数功能:字符串 十六进制编码转换、MD5计算、SHA1计算、AES128编解码、BASE64编解码、字符串分割、过滤、GBK转UTF8、字符集转换
脚本实例:
1.十六进制编码转换、MD5计算、SHA1计算

  1. local sz = require("sz")
  2. local str = "sozereal"
  3. dialog('"'..str..'" 的 16 进制编码为: <'..str:tohex()..'>', 0)
  4. dialog('<'..str:tohex()..'> 转换成明文为: "'..str:tohex():fromhex()..'"', 0)
  5. dialog('"'..str..'" 的 MD5 值是: '..str:md5(), 0)
  6. dialog('"'..str..'" 的 SHA1 值是: '..str:sha1(), 0)
  7. local binstr = "\0\1\2\3\4\5"
  8. dialog('<'..binstr:tohex()..'> 的 MD5 值是: '..binstr:md5(), 0)
  9. dialog('<'..binstr:tohex()..'> 的 SHA1 值是: '..binstr:sha1(), 0)

2.AES128编解码、BASE64编解码

  1. local sz = require("sz")
  2. local msg = "\5\4\3\2\1\0"
  3. local key = "sozereal"
  4. local emsg = msg:aes128_encrypt(key)
  5. local emsgb64 = emsg:base64_encode()
  6. dialog('二进制数据<'..msg:tohex()..'> \n 使用 AES128 算法 密钥 "'..key..'" 加密 值是: <'..emsg:tohex()..'> \n base64 串为 "'..emsgb64..'"', 0)
  7. local tmp = emsgb64:base64_decode()
  8. msg = tmp:aes128_decrypt(key)
  9. dialog('"'..emsgb64..'" base64 解码后的数据为 <'..tmp:tohex()..'> \n使用 AES128 算法 密钥 "'..key..'" 解密 值是: <'..msg:tohex()..'>', 0)

3.字符串分割及空白字符过滤

  1. local sz = require("sz")
  2. str = " 哈哈,he he,1,3,6 "
  3. new = str:split(",") --将字符串str按照 `,` 分割并返回一个TABLE
  4. dialog(new[2], 0)
  5. dialog(str:rtrim(), 0) -- 结果 " 哈哈,he he,1,3,6" ,删除字符串尾部的空白字符
  6. dialog(str:ltrim(), 0) -- 结果 "哈哈,he he,1,3,6 " ,删除字符串首部的空白字符
  7. dialog(str:trim(), 0) -- 结果 "哈哈,he he,1,3,6" ,删除字符串首尾的空白字符
  8. dialog(str:atrim(), 0) -- 结果 "哈哈,hehe,1,3,6" ,删除字符串所有的空白字符

4.将字符串从 GBK 编码转换到 UTF8 编码(需触动精灵iOS v2.2.6 以上版本)

  1. require "sz"
  2. f = io.open("/var/mobile/Media/TouchSprite/lua/a.txt", "r")
  3. s = f:read("*a")
  4. f:close()
  5. dialog(s:fromgbk())

5.字符集转换

  1. --此功能需触动精灵iOS v2.2.7 中带的苏泽库支持方可使用
  2. local sz = require("sz")
  3. local iconv = sz.iconv
  4. local cd = iconv.new("utf8", "gbk") --新建一个gbkutf8编码的转换器
  5. local f = io.open("/User/1.txt", "rb")
  6. local s = f:read("*a")
  7. f:close()
  8. dialog(cd:iconv(s))

名词解析:

  1. 空白字符包括:空格、制表符 \t 、换行符 \n\r

HTTP模块

函数名称:http.get、http.post、http.header、http.build_request
函数功能:发送 http GET 请求、发送 http POST 请求
函数方法:
status_resp, headers_resp, body_resp = http.get("http://82flex.com", 5, headers_send);
status_resp, headers_resp, body_resp = http.post("http://www.touchsprite.net/site/login", 3, headers_send, post_escaped)
参数 类型 说明
url 文本型 请求URL (必须填写)
time_out 整数型 超时时间(秒)
headers_send 文本型 请求头部 json
post_escaped 文本型 请求内容
返回值 类型 说明
status_resp 整数型 HTTP 状态码
headers_resp 文本型 响应头部 json
body_resp 文本型 响应内容

脚本实例:

  1. --采用 cjson 构造请求头部 json
  2. local sz = require("sz")
  3. local cjson = sz.json
  4. local http = sz.i82.http
  5. headers = {}
  6. headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36'
  7. headers['Referer'] = 'http://www.82flex.com'
  8. headers_send = cjson.encode(headers)
  9. dialog(headers_send,0)
  10. status_resp, headers_resp, body_resp = http.get("http://82flex.com", 5, headers_send)
  11. if status_resp ~= nil then
  12. dialog(status_resp,0)
  13. dialog(headers_resp,0)
  14. if status_resp == 200 then
  15. dialog(string.len(body_resp),0)
  16. end
  17. end
  1. --采用 cjson 构造请求头部 json
  2. local sz = require("sz")
  3. local cjson = sz.json
  4. local http = sz.i82.http
  5. headers = {}
  6. headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36'
  7. headers['Referer'] = 'http://www.touchsprite.net/site/login'
  8. headers_send = cjson.encode(headers)
  9. dialog(headers_send,0)
  10. --采用 cjson 构造请求内容,并进行 escape
  11. post = {}
  12. post['username'] = "i_82"
  13. post['password'] = '12345678'
  14. post['text'] = '触动精灵'
  15. post_send = cjson.encode(post)
  16. dialog(post_send,0)
  17. post_escaped = http.build_request(post_send)
  18. dialog(post_escaped,0)
  19. status_resp, headers_resp, body_resp = http.post("http://www.touchsprite.net/site/login", 3, headers_send, post_escaped)
  20. dialog(status_resp,0)
  21. dialog(headers_resp,0)
  22. if status_resp ~= nil then
  23. dialog(status_resp,0)
  24. dialog(headers_resp,0)
  25. if status_resp == 200 then
  26. dialog(string.len(body_resp),0)
  27. end
  28. --获取响应信息头部指定字段
  29. --方法一
  30. server = http.header(headers_resp, "Server")
  31. dialog(server,0)
  32. --方法二
  33. servers = cjson.decode(headers_resp)
  34. dialog(servers["Server"],0)
  35. end
  1. --用http.get实现下载文件功能
  2. local sz = require("sz")
  3. local cjson = sz.json
  4. local http = sz.i82.http
  5. function downFile(url, path)
  6. status, headers, body = http.get(url)
  7. if status == 200 then
  8. file = io.open(path, "wb")
  9. if file then
  10. file:write(body)
  11. file:close()
  12. return status;
  13. else
  14. return -1;
  15. end
  16. else
  17. return status;
  18. end
  19. end
  20. downFile("http://www.touchsprite.com/img/headline-new.png", "/User/Media/TouchSprite/res/1.png")

PLIST 文件操作

函数名称:plist.read、plist.write
函数功能:PLIST文件读取、写入
函数方法:
tmp2 = plist.read(plfilename);
返回值 TABLE
plist.write(plfilename, tmp2);

脚本实例:

  1. --读取键值
  2. local sz = require("sz")
  3. local plist = sz.plist
  4. local plfilename = "/var/mobile/Library/Caches/com.apple.mobile.installation.plist" --设置plist路径
  5. local tmp2 = plist.read(plfilename) --读取plist文件内容并返回一个TABLE
  6. dialog(tmp2.Metadata.ProductBuildVersion, 0) --显示ProductBuildVersion的键值
  1. --写入键值
  2. local sz = require("sz")
  3. local plist = sz.plist
  4. local plfilename = "/var/mobile/Library/Caches/com.apple.mobile.installation.plist" --设置plist路径
  5. local tmp2 = plist.read(plfilename) --读取plist文件内容并返回一个TABLE
  6. tmp2["Metadata"]["ProductBuildVersion"] = "havonz" --将表中ProductBuildVersion键值改为havonz
  7. plist.write(plfilename, tmp2) --将修改后的表写入PLIST文件

注意事项:

  1. 实例代码仅做为参考,实际调试中请将文件路径替换为实际存在的文件路径。
  2. 对于个别重要的PLIST文件,请谨慎使用写入功能或在运行脚本前进行备份。
  3. 需要注意的是,nib文件作为一种特殊的plist文件格式,不能被正确的读取。

POS 模块

函数名称:click、dbclick、touchMoveTo、angleBetween、distanceBetween、polarProjection、cmpColor
函数名称:单击、双击、精确滑动、计算角度、计算距离、根据角度和距离找点、计算颜色相似度

脚本实例:

  1. local sz = require("sz")
  2. local pos = sz.pos
  3. local p0 = pos(100, 150, 0x123456)
  4. local p1 = pos(556, 400, 0x654321)
  5. p0:click() -- 单击点 p0
  6. p0:click(100) -- 单击点 p0 按下 100 毫秒延迟 弹起
  7. p0:dbclick(100, 200) -- 双击点 p0 按下 100毫秒延迟 弹起 延迟 200 毫秒 重复第一步
  8. p0:touchMoveTo(p1, 2, 500, 1) -- 从点 p0 滑动到 p1 , 后面三个可选参数依次为:步长、弹起延迟、每步延迟
  9. dialog(" p0 到 p1 的角度为: "..p0:angleBetween(p1), 0)
  10. dialog(" p0 到 p1 的距离为: "..p0:distanceBetween(p1), 0)
  11. dialog(" p0 往 30 度方向前进 200 距离单位的另一个点: "..tostring(p0:polarProjection(200, 30)), 0)
  12. dialog("颜色 0x102030 与颜色 0x122232 的相似度为: "..pos.cmpColor( 0x102030, 0x122232), 0)
  13. dialog("p0 结构的颜色与颜色 0x123456 相似度为: "..p0:cmpColor(0x123456), 0)

在触动精灵中使用"LuaSocket"网络库

LuaSocket 是 Lua 的网络模块库,它可以很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。

如何安装

在触动精灵iOS 2.1.9 版本中包含的苏泽扩展库中已经集成了luasocket,无需额外下载安装。

httpGet请求

  1. local sz = require("sz")
  2. local http = require("szocket.http")
  3. local res, code = http.request("http://www.baidu.com");
  4. if code == 200 then
  5. dialog(res,0);
  6. end
  7. --也可以这样
  8. local response_body = {}
  9. local res, code = http.request({
  10. url = "http://www.baidu.com",
  11. sink = ltn12.sink.table(response_body)
  12. })
  1. --获取外网ip地址
  2. local sz = require("sz")
  3. local http = require("szocket.http")
  4. local res, code = http.request("http://www.ip.cn/");
  5. if code == 200 then
  6. local i,j = string.find(res, "%d+%.%d+%.%d+%.%d+")
  7. local ipaddr =string.sub(res,i,j)
  8. dialog(ipaddr,0)
  9. end
  1. 返回的2个参数中,res 是 http body 的内容,也就是请求网页的内容,code 是 http 状态码, 返回200的话就表示正常返回。
  2. 如果传入的是 table 的话,就需要用一个容器来接收 http body 的内容。

httpPost请求

  1. local sz = require("sz")
  2. local http = require("szocket.http")
  3. local response_body = {}
  4. local post_data = 'asd';
  5. res, code = http.request{
  6. url = "http://127.0.0.1/post.php",
  7. method = "POST",
  8. headers =
  9. {
  10. ["Content-Type"] = "application/x-www-form-urlencoded",
  11. ["Content-Length"] = #post_data,
  12. },
  13. source = ltn12.source.string('data=' .. post_data),
  14. sink = ltn12.sink.table(response_body)
  15. }
  1. 这里注意记得 method 传入 POST, 因为默认是 GET。
  2. headers 参数,由一个 table 组成,key 为 header,value 为 header 内容。
  3. source 参数,这里是填入 POST 的参数,多个数据的情况用 & 隔开,例如 "data1=a&data2=b"。
  4. 此代码仅为举例说明,请勿直接复制使用。

挂载代理

  1. --必须加上 http:// 否则不处理
  2. local sz = require("sz")
  3. local http = require("szocket.http")
  4. http.PROXY = "http://127.0.0.1:8888" --代理服务器地址
  5. local result = http.request("http://www.baidu.com")
  6. dialog(result,0)

以socket的方式访问

  1. local sz = require("sz")
  2. local http = require("szocket.http")
  3. local host = "www.baidu.com"
  4. local file = "/"
  5. local sock = assert(socket.connect(host, 80)) --创建一个 TCP 连接,连接到 HTTP 连接的标准 80 端口上
  6. sock:send("GET " .. file .. " HTTP/1.0\r\n\r\n")
  7. repeat
  8. local chunk, status, partial = sock:receive(1024) --以 1K 的字节块接收数据
  9. until status ~= "closed"
  10. sock:close() -- 关闭 TCP 连接

smtp方法发送mail

  1. local sz = require("sz")
  2. local smtp = require("szocket.smtp")
  3. from = "<youmail@126.com>" -- 发件人
  4. --发送列表
  5. rcpt = {
  6. "<youmail@126.com>",
  7. "<youmail@qq.com>",
  8. "<youmail@gmail.com>",
  9. }
  10. mesgt = {
  11. headers = {
  12. to = "youmail@gmail.com", -- 收件人
  13. cc = '<youmail@gmail.com>', -- 抄送
  14. subject = "This is Mail Title"
  15. },
  16. body = "这里放邮件内容"
  17. }
  18. r, e = smtp.send{
  19. server = "smtp.126.com", --smtp服务器地址
  20. user = "youmail@126.com",--smtp验证用户名
  21. password = "******", --smtp验证密码
  22. from = from,
  23. rcpt = rcpt,
  24. source = smtp.message(mesgt)
  25. }
  26. if not r then
  27. dialog(e,0);
  28. else
  29. dialog("发送成功!"0);
  30. end

实现获取网络时间

  1. local sz = require("sz")
  2. local socket = require "szocket.core"
  3. server_ip = {
  4. "132.163.4.101",
  5. "132.163.4.102",
  6. "132.163.4.103",
  7. "128.138.140.44",
  8. "192.43.244.18",
  9. "131.107.1.10",
  10. "66.243.43.21",
  11. "216.200.93.8",
  12. "208.184.49.9",
  13. "207.126.98.204",
  14. "207.200.81.113",
  15. "205.188.185.33"
  16. }
  17. function nstol(str)
  18. assert(str and #str == 4)
  19. local t = {str:byte(1,-1)}
  20. local n = 0
  21. for k = 1, #t do
  22. n= n*256 + t[k]
  23. end
  24. return n
  25. end
  26. function gettime(ip)
  27. local tcp = socket.tcp()
  28. tcp:settimeout(10)
  29. tcp:connect(ip, 37)
  30. success, time = pcall(nstol, tcp:receive(4))
  31. tcp:close()
  32. return success and time or nil
  33. end
  34. function nettime()
  35. for _, ip in pairs(server_ip) do
  36. time = gettime(ip)
  37. if time then
  38. return time
  39. end
  40. end
  41. end
  42. dialog(nettime(),0)

统计毫秒精度的时间

  1. local sz = require("sz")
  2. local socket = require ("szocket")
  3. function sleep(sec)
  4. socket.select(nil,nil,sec);
  5. end
  6. local t0 = socket.gettime()
  7. sleep(0.4);
  8. local t1 = socket.gettime()
  9. dialog(t1 - t0,0)

官方函数扩展库

为了进一步降低脚本开发者门槛,触动精灵单独开发一个扩展库,提供了一系列实用函数供开发者使用。

在线地址:https://www.zybuluo.com/miniknife/note/293935#官方函数扩展库

函数:tap 触摸点击屏幕

函数:randomTap 随机点击屏幕

函数:moveTo 直线滑动

函数:intToRgb 颜色转RGB

函数:rgbToInt RGB转颜色

函数:isColor 判断指定坐标的颜色

函数:multiColor 多点颜色判断

函数:log 日志记录

函数:multiColTap 多点颜色判断单点击

函数:moveTowards 角度直线滑动

函数:moveZoomOut 两点缩小

函数:moveZoomIn 两点放大

函数:moveCircleCenter 圆心弧度滑动

函数:moveCirclePonits 三点定圆滑动

函数:isFileExist 判断文件是否存在

函数:readFile 读文件内容返回table

函数:readFileString 读文件内容返回string

函数:writeFile 将table内容存入文件

函数:writeFileString 将string内容存入文件

函数:delFile 删除文件

函数:strSplit 分割字符串

函数:snapAndSave 截图并保存到系统相册

函数:deepCopyTable 复制表

函数:getRender 获取屏幕的render值

函数:isDay 判断日期

函数:checkTable 检查UItable

函数:findMultiColorInRegionFuzzyByTable 点阵找色

函数:getMode 获取UI模式

函数:neosUI 显示UI

触动精灵UI库

由于很多小白作者对于触动精灵开发手册中的showUI 函数很难理解,以下将UI函数进行了封装,使用起来更简单。

在线地址:https://www.zybuluo.com/miniknife/note/293935#触动精灵ui库

函数:UINew 创建UI

函数:UILable 文本标签

函数:UIRadio 单选框

函数:UIEdit 编辑框

函数:UICheck 多选框

函数:UICombo 下拉框

函数:UIComboRlt 联动下拉框

函数:UIComboRlts 联动关联框

函数:UIImage 图片框

函数:UIShow 显示UI

触动精灵云打码扩展库

"本地光学字符识别" 简称本地 OCR 由于特征库、性能的限制,识别速度慢、识别率也比较差。触动精灵提供云打码扩展库来解决这一问题。

函数:ocr.cloudOcrText、ocr.cloudOcrReportError、ocr.version

在线地址:https://www.zybuluo.com/miniknife/note/293935#触动精灵云打码扩展库

简易SMTP邮件发送库

函数:mail.send

在线地址:https://www.zybuluo.com/miniknife/note/293935#简易smtp邮件发送库

触动精灵中"os.execute"应用

注销、关机、重启、清空缓存、删除文件、解压、移动文件、复制文件、创建文件夹
在线地址:https://www.zybuluo.com/miniknife/note/293935#触动精灵中osexecute应用

触动精灵中"io库"应用

将指定文件中的内容按行读取、遍历文件、查找文件、检测指定文件是否存在
在线地址:https://www.zybuluo.com/miniknife/note/293935#触动精灵中io库应用

触动精灵实例代码

包括渐开线实现、多点模糊比色、随机字符串、日期与时间等封装好的源码。

渐开线实现

渐开线在游戏脚本中多用于找怪或者农场类游戏中收割,下面给出两种不同的渐开线在触动精灵中的实现方法:

方形渐开线

圆形渐开线

多点模糊比色

在实际游戏脚本制作中,很多界面单靠1个点不容易进行准确的判断,这里封装一个配合TABLE使用的多点模糊比色函数来实现精确判断。

随机字符串

产生随机种子

自定义字符串随机

随机大小写字母

日期与时间

获取今天是星期几

获取当前日期及时间

在线地址:https://www.zybuluo.com/miniknife/note/323513

iOS 设备分辨率一览表

设备 屏幕尺寸 分辨率 (pt) Render 分辨率 (px) PPI
iPhone4(S)/iPod Touch4G 3.5 320x480 @2x 640x960 330
iPhone 5(S/C)/iPod Touch5G(6G) 4.0 320x568 @2x 640x1136 326
iPhone 6(S) 4.7 375x667 @2x 750x1334 326
iPhone 6(S) Plus 5.5 414x736 @3x 1242x2208 401
iPad 1/2 9.7 768x1024 @1x 768x1024 163
iPad mini 7.9 768x1024 @1x 768x1024 163
TheNewiPad/iPad 4/Air/Air2 9.7 768x1024 @2x 1536x2048 264
iPad mini 2/mini 3/mini 4 7.9 768x1024 @2x 1536x2048 324
iPad Pro 9.7/12.9 768x1024 @2x 2048×2732 264

注意事项:
触动精灵制作脚本时,涉及屏幕坐标的操作均采用分辨率(px),其中iPhone 6(S) Plus 的分辨率采用逻辑分辨率 1242 * 2208。
iPhone 6(S) 放大模式的分辨率和iPhone 5(S/C) 一致,为640x1136。
iPhone 6(S) Plus 放大模式的分辨率为1125x2001。

附录

触动精灵安卓Android脚本开发手册

https://www.zybuluo.com/miniknife/note/148136

触动精灵脚本开发函数扩展库

https://www.zybuluo.com/miniknife/note/293935

触动精灵iOS脚本开发视频教程

https://www.zybuluo.com/miniknife/note/307651

已知与触动精灵冲突的插件列表

showUI 不能弹出、点击没反应、滑动失效等问题有可能是由于安装了冲突插件引起的
https://www.zybuluo.com/miniknife/note/307651#已知与触动精灵冲突的插件列表

触动精灵脚本开发实例代码

https://www.zybuluo.com/miniknife/note/323513

下载、安装触动精灵iOS/帮你玩脚本商城,欢迎添加官方推荐软件源

触动精灵官方源:http://apt.touchsprite.com

触动精灵iOS使用教程

https://www.zybuluo.com/miniknife/note/307627

脚本编辑器

远程调试、运行脚本
1. TouchSprite Studio(v1.1.7):http://pan.baidu.com/s/1bn5b9Vp 密码:k9yf

取色、图像工具

远程截图、取色、生成代码
1. 触动精灵抓色工具(v1.7.8):http://bbs.touchsprite.com/question/5190

脚本加密

https://www.zybuluo.com/miniknife/note/307651#脚本加密

文字点阵识别字库制作工具

  1. 大漠:http://pan.baidu.com/s/1qXpdUw8 密码:ljay
  2. 链接:http://pan.baidu.com/s/1o8pdh8Y 密码:5adu

设备 SSH 连接工具

  1. WinSCP:http://pan.baidu.com/s/1o6jtP7G
  2. 简体中文语言包:http://pan.baidu.com/s/15xaEy
  3. Putty:http://pan.baidu.com/s/1mgslwX6

相关工具运行库

  1. VCredist 2010:http://pan.baidu.com/s/1sjjTFQH
  2. NET Framework 4:http://www.microsoft.com/zh-cn/download/details.aspx?id=17718

OCR(光学字符识别)相关

  1. 触动精灵本地OCR简体中文识别库:http://pan.baidu.com/s/1qW2mDWC
  2. 触动精灵本地OCR英文数字识别库:http://pan.baidu.com/s/1eQ3nbZs
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注