触动精灵脚本开发手册

2025-11-17 01:08:08      匈牙利世界杯

触动精灵脚本开发手册已不更新,最新版本查看:https://helpdoc.touchsprite.com/dev_docs/598.html

开发手册 触动精灵

Windows 平台按 Ctrl + F 打开快捷搜索

Mac 平台按 command + F 打开快捷搜索

※右侧文本列表可以找到全部手册

目录

触动精灵脚本开发手册

目录

前言

学习前的准备

越狱及 root 常识

Lua 基础简明教程

脚本开发取色技巧

小白学触动零基础视频教程

触动精灵开发者指南

触动产品功能对比

如何查看更多文档

脚本开发相关工具

触动精灵 iOS

触动精灵 Android

脚本编辑器:TouchSprite Studio

抓色器:TSColorPicker

已兼容的模拟器

点击触摸

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

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

图色类及屏幕相关

函数:init 初始化

函数:getScreenSize 获取屏幕分辨率

函数:setScreenScale 坐标缩放

函数:keepScreen 保持屏幕

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

函数:findColorInRegionFuzzy 区域模糊找色

函数:findImageInRegionFuzzy 区域模糊找图

函数:findMultiColorInRegionFuzzy 区域多点找色

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

函数:findImage 高级区域找图(仅支持 iOS)

函数:snapshot 截图

函数:imageOperMerge 图片合并

开发辅助类

函数:dialog 提示框

函数:toast 提示

函数:dialogRet 带按钮的对话框

函数:dialogInput 参数对话框

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

函数:sysLog 系统日志(仅支持 iOS10 以下系统)

函数:nLog 远程日志

文件操作

函数:unzip 解压(仅支持 Android)

函数:zip 压缩(仅支持 Android)

脚本控制

函数:mSleep 延时

函数:lua_exit 退出脚本

函数:lua_restart 重载脚本

函数:luaExitIfCall 来电暂停

函数:checkScriptAuth 脚本类型和授权

系统相关

函数:getNetTime 获取网络时间

函数:addContactToAB 添加联系人

函数:removeAllContactsFromAB 清空通讯录

UTF-8 编码

模块说明

函数:utf8.char 整数序列转换字符串

函数:utf8.codes 获取字符编码

函数:utf8.codepoint 获取指定位置字符编码

函数:utf8.len 统计字符个数

函数:utf8.offset 获取字符位置

文字输入及按键模拟

函数:inputText 输入字符串

函数:switchTSInputMethod 切换到触动/帮你玩输入法(仅支持 Android)

函数:getInPutMethod 获取当前输入法包名(仅支持 Android)

函数:pressHomeKey 模拟主屏幕按键

函数:doublePressHomeKey 双击 HOME 键(仅支持 iOS)

函数:keyDown、keyUp 模拟键盘(仅支持 iOS)

命令: 安卓模拟物理按键(仅支持 Android)

应用相关

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

函数:isFrontApp 判断前台应用

函数:frontAppBid 获取前台应用

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

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

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

函数:openURL 打开网络地址

函数:ipaInstall、ipaUninstall 安装、卸载应用(仅支持 iOS)

函数:install, uninstallApp 安装、卸载应用程序(仅支持 Android)

函数:getInstalledApps 获取应用列表

函数:isInstalledApk 查询应用程序是否安装(仅支持 Android)

函数:cleanApp 清理应用数据(仅支持 Android)

函数:switchApp 切换到指定应用(仅支持 Android)

函数:closeAllApp 清理后台应用(仅支持 Android)

函数:getAppInfo 获取指定应用的信息(仅支持 Android)

系统信息类

函数:getDeviceType 获取设备类型

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

函数:getMemoryInfo 获取设备内存信息

函数:getTSVer、getOSVer 获取引擎版本号、获取系统版本号

函数:getOSType 获取设备系统

函数:getTSAccountID 获取触动账号 ID

函数:batteryStatus 检测电池状态、电量

函数:getProcess 获取设备进程列表

函数:getDeviceAlias 获取设备别名(仅支持 iOS 企业版)

函数:getDeviceName 获取设备名称

函数:setDeviceName 设置设备名称(仅支持 iOS)

函数:getIMEI 获取设备 IMEI(仅支持 Android)

函数:getNetworkIP 获取网络 IP(仅支持 Android)

函数:getDeviceBrand 获取设备品牌(仅支持 Android)

函数:getDeviceModel 获取设备型号(仅支持 Android)

函数:getCPUType 获取 CPU 型号(仅支持 Android)

函数:getUUID 获取 UUID(仅支持 Android)

函数:getSDCardPath 获取 SD 卡路径(仅支持 Android)

函数:getDPI 获取屏幕 DPI 和像素密度(仅支持 Android)

系统控制

函数:setRotationLockEnable 锁定设备方向(仅支持 iOS)

函数:setWifiEnable 无线开关

函数:setBTEnable 蓝牙开关

函数:setAirplaneMode 飞行模式开关

函数:getVPNStatus 获取VPN状态

函数:setVPNEnable VPN 开关(仅支持 iOS)

函数:setCellularDataEnable 蜂窝网络开关(仅支持 iOS)

函数:setAssistiveTouchEnable 小圆点开关(仅支持 iOS)

函数:setReduceMotionEnable 减弱动效开关(仅支持 iOS)

函数:getBacklightLevel 获取屏幕亮度

函数:setBacklightLevel 设置屏幕亮度

函数:setVolumeLevel 设置设备音量

函数:vibrator 手机振动

函数:playAudio 播放音频

函数:stopAudio 停止播放 (仅Android)

函数:lockDevice 锁定设备

函数:deviceIsLock 设备锁定状态

函数:unlockDevice 解锁设备

函数:setAutoLockTime 设置锁屏时间

函数:resetIDLETimer 重置锁屏计时

函数:setScreenResolution 修改分辨率(仅支持 iOS)

函数:clearKeyChain 清除钥匙串(仅支持 iOS)

函数:saveImageToAlbum 图片存入相册

函数:saveVideoToAlbum 视频存入相册

命令: 安卓视频存入相册

函数:writePasteboard、readPasteboard 读写剪贴板

函数:connectToWifi 连接 WiFi

回调函数

函数:beforeUserExit 终止之前运行

文字识别

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

函数:addTSOcrDict、addTSOcrDictEx、tsOcrText、tsFindText 触动点阵识别

函数:addDmOcrDict、dmOcrText、dmFindText 打码点阵识别

触动相关

函数:deviceIsAuth 获取触动精灵授权状态(仅支持 iOS)

函数:getRunningAccess 获取当前脚本运行权限(仅支持 Android)

函数:userPath 获取客户端文件路径

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

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

命令: 强制重启触动服务

Thread 协程

函数:thread.create 创建协程

函数:thread.createSubThread 创建子协程

函数:thread.stop 停止协程队列

函数:thread.wait 阻塞等待当前协程完成

函数:thread.setTimeout 设置协程超时时间

函数:thread.clearTimeout 清除协程超时时间

函数:thread.waitAllThreadExit 协程阻塞等待

浮动窗口

函数:fwShowWnd 显示浮动窗口

函数:fwShowTextView 显示文字视图

函数:fwShowImageView 显示图形视图

函数:fwCloseView 关闭视图

函数:fwCloseWnd 关闭窗口

函数:fwGetWndPos 获取窗口位置

函数:fwShowButton 显示一个按钮

函数:fwGetPressedButton 获取按钮点击事件

完整实例

脚本 UI

showUI

什么是 json

调用示例

用 json 创建界面

全局属性

控件通用属性

界面控件

控件:Label 标签

控件:RadioGroup 单选框

控件:Edit 单行文本框

控件:TextArea 多行文本框

控件:CheckBoxGroup 多选框

控件:ComboBox 下拉框

控件:Image 图片

默认样式

指定控件尺寸与位置

返回值

自定义样式实例代码

webUI(暂不支持 iOS 7 系统)

函数: webview.new 创建 webview

函数: myweb1.show 显示webview

函数: myweb1.set 改变 webview 外观

函数: myweb1.close 关闭 webview

函数: event.register 发送消息,传递参数

完整示例

为触动增加无限可能,Lua扩展库

触动精灵 TSLib 函数扩展库

云打码扩展库

触动精灵云打码

使用方法

插件下载

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

简易 SMTP 邮件发送库

函数:mail.send

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

respring 注销

poweroff 关机

reboot 重启

clearCache 清空缓存

delFile 删除文件

unzip 解压

movefile 移动文件

copyfile 复制文件

newfolder 创建文件夹

触动精灵中"io库"应用

readFile 将指定文件中的内容按行读取

getList 遍历文件

findFile 查找文件

file_exists 检测指定文件是否存在

函数:qrDecode 二维码解析(仅支持 Android)

触动精灵二维码识别库

函数: qr.qrDecode 二维码图片解析(仅支持iOS)

触动精灵ts.so扩展库

触动精灵sz扩展库

附录

iOS 设备分辨率一览表

Lua math 库

已知与触动精灵/帮你玩/小精灵/企业版 iOS 冲突的插件列表

约定的按键编码

电话功能按键

控制类按键

基本类按键

安卓手机如何开启系统悬浮窗权限

设备 SSH 连接工具

相关工具运行库

LuaSQLite

iOS 系统设置参数对照表

按键码表[字母]

按键码表[数字]

按键码表[其他]

按键码表[更多请自行尝试]

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

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

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

- 注释

- 变量与类型

- 运算符

- 条件、循环控制

- 函数定义

- 库函数

- ……

本说明仅供初等文化水平以上的、了解计算机编程基本原理的个体学习与参考,并不适用于零基础的编程入门者学习编程基本知识。严禁用于商业以及非法目的,严禁转载、抄袭、未经许可地引用。

为了便于解释和描述,本说明中采用了一些非专业的描述与形容方法(如:number),敬请理解。因编写校对仓促,如有错误欢迎及时指正,本文中的示例仅供函数参考,不要直接用于脚本中。

重要提示:

Lua 官方手册:http:/http://manual.luaer.cn/

Lua 中文开发手册:http://book.luaer.cn/

Lua 基础简明教程:https://zybuluo.com/lisaisacat/note/636399

触动精灵的脚本开发、存储过程必须使用 UTF-8 文本编码,如果您出现脚本中文无法正常显示与处理,请在您使用的编辑器或 IDE 中设置文本编码为 UTF-8,谢谢。

学习前的准备越狱及 root 常识

在学习脚本开发之前,首先要具备一些关于 iOS 越狱和安卓 root 的知识,以及触动精灵的常用信息

文档链接:https://www.zybuluo.com/lisaisacat/note/324664

看了上面的文档,你可以具备以下知识:

什么样的手机适合用来做脚本开发

拿到一台越狱手机之后应该做什么才能避免白苹果和报错

Cydia 不见了或者已安装界面空白该怎么办

为什么安装插件总是报错呢

Lua 基础简明教程

首先你需要了解 Lua 这门语言的一些基础知识,什么是循环,什么是函数,布尔型和数值型分别是什么意思,才有可能看得懂下面的教程和手册。

文档地址:https://www.zybuluo.com/lisaisacat/note/636399

脚本开发取色技巧

新手在学习使用触动精灵开发脚本的时候,总会进入一些误区,或者会有一些迷惑的点,觉得无从下手,本文总结了一些自己在学习过程中遇到的问题和经验技巧,欢迎大家一起交流分享。

文档链接:https://zybuluo.com/lisaisacat/note/508345

看了上面的文档,你可以具备以下知识:

透明背景图、动图、带动画的界面应该怎么取色

找色和找图哪个更好用

函数封装是什么

脚本报错了怎么办

小白学触动零基础视频教程

如果你没有任何编程基础,可以先看一下零基础教学视频:https://www.zybuluo.com/lisaisacat/note/585252

看了上面的文档,你可以具备以下知识:

deb 插件安装方法

平刷插件 Cydia Eraser

SSH 命令工具 putty

触动精灵的安装使用及常识

抓色器和编辑器的使用及常识

同样的脚本为什么有的手机运行异常

showUI 返回值的调用

showUI 应该怎么写才简洁好用

大漠字库工具的用法

触动精灵开发者指南

由于触动精灵在线文档数量较多,很多人不知道如何查询,现建立此文档做为索引,其中会补充一些软件使用的常用信息。

触动精灵旗下目前有四款软件:触动精灵(iOS/Android)、帮你玩商城(iOS/Android)、小精灵(iOS/Android)、企业版(iOS/Android)。

触动精灵适合开发者和有中控开发能力的工作室使用

小精灵适合有图标和包名自定义需求的开发者和工作室使用

企业版适合有批量控制设备需求的工作室使用

文档地址:https://www.zybuluo.com/miniknife/note/509515

触动产品功能对比

产品名称

自定义图标

录制

调试

运行源码

授权

批量控制

支持平台

开发者平台

触动精灵iOS

×

iOS:36 元/台/年,Android:免费

购买 API 自行开发

iOS/Android

http://dev.touchsprite.com/site/index

触动小精灵

×

×

×

5.5 元/台/月

购买 API 自行开发

iOS/Android

http://app.touchsprite.com/

触动企业版

×

×

×

iOS:46 元/台/年,Android:测试期 0.1 元/台/年

免费

iOS/Android

http://ent.touchsprite.com/

安卓小精灵有免费版,但不能使用网络模块和高级函数库

安卓企业版测试期收费:0.1 元/台/年

如何查看更多文档在文档右侧栏顶部点击文档分类菜单栏按钮,即可查看触动精灵所有在线文档。

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

触动精灵 iOS使用教程: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

触动精灵 Android使用教程:https://www.zybuluo.com/miniknife/note/443534

下载地址:http://www.touchsprite.com/touchsprite

脚本存放路径:/sdcard/TouchSprite/lua

默认资源路径:/sdcard/TouchSprite/res

脚本日志路径:/sdcard/TouchSprite/log

配置文件路径:/sdcard/TouchSprite/config

iOS插件文件路径:/sdcard/TouchSprite/plugin

Android插件文件路径:data/data/com.touchsprite.android/files/plugin

※安卓不同机型路径有差别,请用userPath函数获取路径

注意事项

有些函数不支持低版本触动精灵,请仔细阅读函数说明并尽量保持触动精灵客户端为最新版。

测试版为不稳定版本,为避免不必要的麻烦,请勿大规模安装。

测试版和正式版的 Bundle ID 不同,不能跨源覆盖安装或直接升级,请卸载之后再安装另一个源的版本。

iOS 11 系统的设备,原 TouchSprite 文件夹下新增 plugin_ios11 快捷方式,连接到 usr/bin/tsplugin

如果系统是 iOS 11 则 tsp 自带 so 文件释放到该路径但 lua 文件释放路径保持不变

如果开发者想要手动导入 so 文件,也需要放到 usr/bin/tsplugin 目录下

脚本编辑器:TouchSprite Studio

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

下载地址:http://www.touchsprite.com/tools

使用手册:https://www.zybuluo.com/miniknife/note/123055

视频教程:https://www.zybuluo.com/lisaisacat/note/324664#编辑器与抓色器的使用

抓色器:TSColorPicker

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

下载地址:http://www.touchsprite.com/tools

使用手册:https://www.zybuluo.com/havonz/note/94681

视频教程:https://www.zybuluo.com/lisaisacat/note/324664#编辑器与抓色器的使用

已兼容的模拟器雷电模拟器、猩猩模拟器、网易MUMU模拟器、夜神模拟器、海马玩模拟器、逍遥模拟器、51 模拟器

模拟器使用教程:https://www.zybuluo.com/miniknife/note/443336

从系统兼容和资源占用角度考虑,推荐使用雷电模拟器、夜神模拟器。

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

函数名称:触摸按下、抬起、移动

函数功能:通过按下、抬起、移动动作发送触摸事件。

函数方法

touchDown(index , x , y);

touchMove(index , x, y);

touchUp(index , x , y);

返回值:无

参数

类型

说明

index

number

手指序号(可省略)

x

number

屏幕横坐标

y

number

屏幕纵坐标

脚本实例:

快速划动

touchDown(150, 550); --在坐标 (150, 550)按下mSleep(30);touchMove(150, 600); --移动到坐标 (150, 600),注意一次滑动的坐标间隔不要太大,不宜超过 50 像素mSleep(30);touchUp(150, 600); --在坐标 (150, 600) 抬起连续划动

touchDown(150, 550); --在坐标 (150, 550) 按下for i = 0, 200, 10 do --使用 for 循环从起始点连续横向移动到终止点 touchMove(150 + i, 550); mSleep(10); --延迟endtouchUp(150 + 200, 550); --在坐标 (350, 550) 抬起精准滑动

方法一:

--精准滑动的原理就是通过向滑动方向的垂直线方向移动 1 像素来终止滑动惯性--简单的垂直精准滑动touchDown(200,1000)for i = 0, 500, 50 do touchMove(200, 1000-i) mSleep(10)end--只要横向滑动 1 像素就可以精准滑动--横向滑动 1 像素touchUp(201, 500) mSleep(10)方法二:

--使用 v1.2.7 版本 TSLib 新增的 touch() 函数进行滑动require("TSLib")touch():Step(50):on(200,1000):move(200,500):off()--减少步长也可以进行精准滑动多点触控

touchDown(1, 200, 400); --手指 1 在坐标 (200, 400) 按下touchDown(2, 300, 500); --手指 2 在坐标 (300, 500) 按下mSleep(50);for i = 1, 100, 1 do --使用 for 循环使两只手指同时分离 touchMove(1, 200 - i, 400 - i); touchMove(2, 300 + i, 500 + i); mSleep(10);endtouchUp(1, 200 - 100, 400 - 100); --抬起手指 1touchUp(2, 300 + 100, 500 + 100); --抬起手指 2封装一个点击函数

function click(x, y) touchDown(x, y) mSleep(30) touchMove(x, y) -- 安卓部分机型单点不生效的情况下可以加上此句 touchUp(x, y)endclick(100, 200) --点击坐标 100,200 位置方形渐开线

init(1)mSleep(1000)local x = 1010 --起始坐标 xlocal y = 698 --起始坐标 ylocal v = 30 --两点间距离touchDown(x, y)mSleep(100)for var = 1,20 do j = 0 k = v for _i = 1,2 do for i = 1,10 do x = x + j y = y + k touchMove(x, y) mSleep(20) end j = v k = 0 end v = v * (-1.05)endtouchUp(x, y)圆形渐开线

init(1)mSleep(1000)local x0 = 1010 --起始坐标 xlocal y0 = 698 --起始坐标 ylocal rr = 20 --设置递增半径 local l = 10 --设置点间距 local p = 0 --初始化角度 local r = 30 --设置首圈半径local rn = 10 --设置圈数touchDown(x0, y0)mSleep(100)for var = 1,rn do while p < math.pi * 2 do x = x0 + r * math.cos(p) y = y0 - r * math.sin(p) touchMove(x, y) mSleep(10) p = p + l/r end p = 0 r = r + rr endtouchUp(x0, y0)安卓点击滑动失效处理方法

在部分安卓应用程序中的 HTML5 页面中,出现脚本能够点击,但点击没有后续反应的问题。此问题目前可以通过以下写法来解决:

os.execute("input mouse tap x y"),其中 x,y 为坐标值

os.execute("input mouse swipe x1 y1 x2 y2")--滑动,x1,y1 为滑动初始坐标,x2,y2 为滑动结束坐标

如果以上命令还是不生效可以用下面的 API 方法代替 mouse 进行尝试:

keyboard

joystick

touchnavigation

touchpad

trackball

stylus

dpad

touchscreen

gamepad

举例: os.execute("input keyboard tap 100 100")

注意事项:

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

使用滑动函数时,新手常犯的错误就是两点之间滑动距离过大,请注意touchDown、touchMove 的坐标间隔不宜超过 50 像素。

非多点触控可省略手指 id

新手使用点击、随机点击、直线或角度滑动等相关函数请参考函数扩展库

名词解析:

手指序号,用于多点触控的支持。标记多只手指,来分别控制它们的移动。

屏幕坐标,横坐标为 x,纵坐标为 y,单位为像素。例如,iPhone 4 与 iPhone 4S 的屏幕分辨率 为 640 * 960,则其最大横坐标为 640,最大纵坐标为 960。

for 循环是 Lua 基本语法,属于循环控制。

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

函数名称:获取用户点击坐标

函数功能:调用该函数后,触动精灵将等待用户完成一次或多次屏幕点击,并返回点击的坐标。

函数方法

x,y = catchTouchPoint();

返回值:number x,y

ret = catchTouchPoint(touchCount);

返回值:table类型 ret

返回值

类型

说明

x

number

用户点击屏幕的横坐标

y

number

用户点击屏幕的纵坐标

ret

table

当touchCount参数有效时,将返回一个包含所有点击坐标的table

参数

类型

说明

touchCount

number

所需获取的 点/坐标 个数(需引擎版本 iOS v2.2.4,Android v1.1.9 以上支持)

脚本实例:

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

部分安卓模拟器不支持该函数。

此函数将阻止脚本继续运行, 一直等待用户完成屏幕点击。

此函数获取到的坐标为竖屏坐标,横屏情况请自行转换。

本函数有较小的延迟,连续点击时,请勿点击过快。

在 iOS 引擎版本 iOS v2.2.4,Android v1.1.9 以上中可接收多个点击坐标并以 table 形式返回。

图色类及屏幕相关函数:init 初始化

函数名称:初始化

函数功能:脚本运行前必须调用,以设置设备方向及坐标系。

函数方法

init(rotate);

返回值:无

参数

类型

说明

Rotate

number

必填,屏幕方向,0 - 竖屏,1 - Home 键在右边,2 - Home 键在左边

脚本实例:

init(0) -- iOS 设备以 Home 键在下方时的屏幕左上角为坐标系原点 (0,0),iOS7 以上系统有效;安卓设备以当前屏幕默认截图方向进行初始化init(1); --iOS 设备以当前应用 Home 键在右边初始化,即以 Home 键在右侧时的横屏左上角为屏幕坐标原点 (0,0);安卓设备以屏幕默认截图方向向左旋转 90° 进行初始化init(2); --iOS 设备以当前应用 Home 键在左边初始化,即以 Home 键在左侧时的横屏左上角为屏幕坐标原点 (0,0);安卓设备以屏幕默认截图方向向右旋转 90° 进行初始化

注意事项:

安卓系统不同设备初始的截图方向有所不同,编写脚本前请用截图函数确认设备的默认方向。

此函数可在脚本运行过程中多次调用以改变屏幕方向。

如在脚本中未指定屏幕方向,系统将默认为竖屏或初始方向。

安卓设备根据机型初始方向有区别,需要开发者自行调试,0 - 初始方向,1 - 初始方向向左旋转 90°,2 - 初始方向向右旋转 90°

参考资料:

Bundle ID 的获取方法

1. 在触动精灵客户端的 更多 -> 应用ID查询 中能查看到应用程序的 Bundle ID;

2. iOS 使用 iFile、PP助手等软件可查看应用文件夹下的 Info.plist,其中的 CFBundleIdentifier 即为该应用的 Bundle ID。

3. 使用 frontAppBid 函数,前台运行要获取 Bundle ID 的应用,运行此函数并用 diolag、toast、nLog 函数显示返回值。

函数:getScreenSize 获取屏幕分辨率

函数名称:获取屏幕分辨率,取分辨率

函数功能:用于获取设备屏幕的分辨率,用来判断坐标系的使用。

函数方法

width,height = getScreenSize();

返回值:number width,height

返回值

类型

说明

width

number

获取到的屏幕宽度

height

number

获取到的屏幕高度

脚本实例:

根据分辨率判断脚本是否适配

width, height = getScreenSize();if width == 640 and height == 1136 then --iPhone SE, 5, 5S, iPod touch 5dialog("iPhone SE, 5, 5S, iPod touch 5")elseif width == 640 and height == 960 then --iPhone 4,4S, iPod touch 4dialog("iPhone 4,4S, iPod touch 4")elseif width == 320 and height == 480 then --iPhone 非高分屏dialog("iPhone 非高分屏")elseif width == 768 and height == 1024 then --iPad 1,2, mini 1dialog("iPad 1,2, mini 1")elseif width == 1536 and height == 2048 then --iPad 3,4,5, mini 2dialog("iPad 3,4,5, mini 2")elseif width == 1080 and height == 1920 thendialog("小米 4,华为荣耀 6p 等")elseif width == 720 and height == 1280 thendialog("红米 note2 等")elseif width == 768 and height == 1280 thendialog("魅蓝等")elseif width == 800 and height == 1280 thendialog("三星 N5100 等")elseif width == 480 and height == 800 thendialog("酷派 8017-T00 等")end注意事项:

统一为 iOS 竖屏(Home 键在下方时)、安卓初始方向屏幕的宽度和高度。

部分安卓设备存在无法获取到屏幕分辨率的问题,需要在脚本中判断如果返回值小于 0 则指定一个固定的宽高。

函数:setScreenScale 坐标缩放

函数名称:坐标缩放

函数功能:用于对屏幕坐标进行缩放,可直接影响点击、取色、找色函数中的坐标参数。

支持版本:引擎版本 iOS v2.2.7,Android v1.2.8 以上

函数方法

setScreenScale(flag, width, height);

返回值:无

参数

类型

说明

flag

boolean

true - 打开,false - 关闭

width

number

基准屏幕的宽度

height

number

基准屏幕的高度

脚本实例:

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

当此函数打开时,受影响的函数为点击和单点找色函数:touchDown touchUp touchMove getColor getColorRGB findColorInRegionFuzzy snapshot

多点找色函数不受此函数影响

当两个设备宽高比相差较大时,此函数转换后的效果较差

函数:keepScreen 保持屏幕

函数名称:保持屏幕,保持图像

函数功能:在脚本中保持当前屏幕内容不变,多次调用取色、找色、截图、找图等函数时,直接调用保持的内容。该函数为优化类函数,能够为大量的静态图像处理函数提供性能优化。

函数方法

keepScreen(flag);

返回值:无

参数

类型

说明

flag

boolean

保持开关

脚本实例:

遍历屏幕区块

keepScreen(true); --打开保持屏幕,当参数为 true 时启用屏幕保持,运行到该函数时内存中的屏幕图像保持在这一时刻for k = 1, 640, 10 do for j = 1, 960, 10 do --格式化为十六进制文本 color = string.format("%X", getColor(k, j)); --输出到本地日志 nLog("("..k..", "..j..") Color: "..color.."."); endendkeepScreen(false); --关闭保持屏幕,当参数为 false 时关闭屏幕保持,释放内存中的屏幕图像,以备下一次继续保持。 注意事项:

据不完全统计,与不使用该函数相比,使用此函数会使普通屏上脚本取色速率提升 100 倍,高分屏上脚本取色速率提升 50 倍。在执行大量静态图像操作时,请务必使用该函数优化脚本性能。

该函数一般用于画面变动节奏较慢,但需要根据大量取色、找色来完成计算和操作的脚本中,例如"天天爱消除"、"天天星连萌"这样的游戏。

名词解析:

静态图像处理,指可在某一状态下屏幕内容保持到内存(不影响显示),对其进行进一步的 多次分析。否则,每次使用图像类函数,都将截取一次屏幕内容。

保持开关,逻辑型只有两种属性:true 为真,false 为假。

注意事项:

当使用 keepScreen(true); 时启用屏幕保持,运行到该函数时内存中的屏幕图像保持在这一时刻。

当使用 keepScreen(false); 时关闭屏幕保持,释放内存中的屏幕图像,以备下一次继续保持。

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

函数名称:获取颜色、获取颜色RGB 、取色

函数功能:获取某一点的颜色值(RGB)、颜色 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

number

将获取颜色值的屏幕横坐标

y

number

将获取颜色值的屏幕纵坐标

返回值

类型

说明

color

number

该点的十进制颜色值RGB

color_r, color_g, color_b

number

该点颜色的 RGB 值

脚本实例:

如果某点符合某颜色则点击

color = getColor(100, 100); --获取 (100,100) 的颜色值,赋值给 color 变量if color == 0xffffff then --如果该点的颜色值等于 0xffffff touchDown(100, 100); --那么点击该点 mSleep(30); touchUp(100, 100);end--亦可写作

if getColor(100, 100) == 0xffffff then touchDown(100, 100); mSleep(30); touchUp(100, 100);end如果某点的颜色与某颜色相似则点击

r,g,b = getColorRGB(100,100); --获取(100, 100)的颜色值,赋值给 color 变量if r > 200 and g < 150 then --如果红色强度大于 200,绿色强度小于 150 touchDown(100,100); --那么点击该点 mSleep(30); touchUp(100,100);end封装一个单点模糊比色函数

function isColor(x,y,c,s) --封装函数,函数名 isColor local fl,abs = math.floor,math.abs s = fl(0xff*(100-s)*0.01) local r,g,b = fl(c/0x10000),fl(c%0x10000/0x100),fl(c%0x100) local rr,gg,bb = getColorRGB(x,y) if abs(r-rr)

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

zjing0910z88a名词解析:

参数 s 为模糊度,范围 0 - 100,一般使用 90 即可。

实例中的 table 格式可使用触动精灵抓色器生成。

注意事项:

getColor 与 getColorRGB 的作用是一样的,只不过前者返回单变量,后者返回 R, G, B 三变量。

如直接使用例子中的代码进行测试,请在全部代码之前,加入 2 ~ 3 秒延迟;或者使用循环语句。 因为脚本开始运行时,会出现音量提示遮盖在前台,影响获取颜色。

特别注意,getColor 函数获得的颜色值十六进制文本中,实际顺序为 RGB。

新手找色可使用触动精灵函数扩展库中的比色和多点比色函数,更加简单方便。

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

在你想在设备上截图,iOS 同时按下电源键和 Home 键,安卓为 电源键 和 音量键-即可进行截图(此时屏幕会闪一下)。

使用触动精灵抓色器可方便的获取所需坐标点的颜色信息,推荐使用。

常见颜色表:http://www.114la.com/other/rgb.htm

名词解析

R,G,B值,即代表红(Red)、绿(Green)、蓝(Blue)三个通道的颜色强度。

整型,指的是可以用十、十六、八进制指定的数据类型。使用十六进制符号,必须加上 0x。

赋值是 Lua 基本语法,操作符为"="(一个等号)。

等于是 Lua 基本语法,属于条件控制,操作符为"=="(两个等号)。新手常常将等于写作赋值,从而导致编译出现错误。

函数:findColorInRegionFuzzy 区域模糊找色

函数名称:区域找色、模糊找色、区域模糊找色

函数功能:在指定区域中,寻找符合指定颜色的坐标,支持模糊查找。

函数方法

x, y = findColorInRegionFuzzy( color, degree, x1, y1, x2, y2);

返回值:number x,y

参数

类型

说明

color

number

将要找的十六进制颜色值

degree

number

寻找精度,范围:1 ~ 100,当是 100 时为完全匹配

x1

number

找色区域左上角顶点屏幕横坐标

y1

number

找色区域左上角顶点屏幕纵坐标

x2

number

找色区域右下角顶点屏幕横坐标

y2

number

找色区域右下角顶点屏幕纵坐标

返回值

类型

说明

x,y

number

找到的点坐标,如未找到则返回 -1,-1

脚本实例:

1.精确寻找指定区域中,指定颜色的坐标,并按下

--寻找符合条件的点

x, y = findColorInRegionFuzzy(0x112233, 100, 50, 50, 300, 300); if x ~= -1 and y ~= -1 then --如果在指定区域找到某点符合条件 touchDown(x, y); --那么单击该点 mSleep(30); touchUp(x, y);else --如果找不到符合条件的点 dialog("未找到符合条件的坐标!",0);end2.模糊查找指定区域中,尽可能接近指定颜色的点,并按下

for deg = 100, 1, -1 do --使用 for 循环不断降低精确度 x, y = findColorInRegionFuzzy(0xffffff, deg, 50, 50, 300, 300); if x ~= -1 and y ~= -1 then --如果在指定区域找到某点符合条件 nLog("在模糊度:"..deg.."下找到一个相似的颜色,坐标:"..x..":"..y) touchDown(x, y); --那么单击该点 mSleep(30) touchUp(x, y); break; --并跳出循环 endend注意事项:

未找到则返回 (-1, -1) ,所以找到时 x, y 均不等于 -1,~= 为不等于操作符,是 Lua 基本语法, 属于逻辑控制。

通过不断降低模糊查找精确度的方法在指定区域查找到的不一定是最接近指定颜色的点,该代码应用过程中,建议使用"保持屏幕"减少性能损耗,参见"保持屏幕"一章。

函数:findImageInRegionFuzzy 区域模糊找图

函数名称:区域找图、模糊找图、区域模糊找图

函数功能:在指定区域中,寻找指定的图案,返回其左上角顶点坐标,支持模糊查找。

支持版本:引擎版本 iOS v1.0,Android v2.1.0以上

函数方法

x, y = findImageInRegionFuzzy(picpath, degree, x1, y1, x2, y2, alpha, type);

返回值: x, y

参数

类型

说明

picpath

string

将要寻找的图片文件名(Android 仅支持 png 格式)

degree

number

寻找精度,范围:1 ~ 100,当是 100 时为完全匹配

x1

number

找色区域左上角顶点屏幕横坐标

y1

number

找色区域左上角顶点屏幕纵坐标

x2

number

找色区域右下角顶点屏幕横坐标

y2

number

找色区域右下角顶点屏幕纵坐标

alpha

number

忽略的颜色值(透明色) 若无请填 0

type

number

找图类型,默认不写为 RGB 找图,更多请看注意事项

返回值

类型

说明

x,y

number

找到的图片的左上角顶点坐标,如未找到则返回 -1,-1

脚本实例:

精确寻找指定区域中,指定图片的位置

--寻找符合条件的图片(假设图片的背景颜色为白色)x, y = findImageInRegionFuzzy("test_alpha.png", 90, 0, 0, 320, 480, 0xffffff);if x ~= -1 and y ~= -1 then --如果在指定区域找到某图片符合条件 touchDown(x, y); --那么单击该图片 mSleep(30) touchUp(x, y);else --如果找不到符合条件的图片 dialog("未找到符合条件的坐标!",0);end注意事项:

以下找图几种 type 方式:

type 为空 - RGB找图,适用于静态画面,找图速度快,兼容性一般

type 为 1 - 二值化找图,适用于所有画面,找图速度慢,兼容性好

type 为 2 - 二值化找图,适用于静态画面,找图速度快,兼容性好

Android 仅支持 png 格式图片。

iOS 默认图片路径为 /var/mobile/Media/TouchSprite/res,Android 为 /mnt/sdcard/TouchSprite/res(参数中无需填写完整路径),自建目录请填写绝对路径。

忽略的颜色值指将要寻找的图片的背景颜色,即在屏幕画面上不匹配寻找对象的背景颜色。

若该函数找图不理想可使用findImage 高级区域找图,几种找图方式可配合使用。

参数 type 为 1 需引擎版本 iOS v2.3.6-7 以上支持,type 为 2 需要引擎版本 iOS v2.3.7 以上支持。

函数:findMultiColorInRegionFuzzy 区域多点找色

函数名称:多点找色,区域多点找色

函数功能:在指定区域,根据颜色以及其周边点的颜色,寻找符合条件的点的坐标,支持模糊查找。

函数方法

x, y = findMultiColorInRegionFuzzy(color, posandcolor, degree, x1, y1, x2, y2);

返回值:x,y

参数

类型

说明

color

number

欲寻找的参照点颜色

posandcolor

string

周边点颜色参数

degree

number

寻找精度,范围:1 ~ 100,当是 100 时为完全匹配

x1

number

找色区域左上角顶点屏幕横坐标

y1

number

找色区域左上角顶点屏幕纵坐标

x2

number

找色区域右下角顶点屏幕横坐标

y2

number

找色区域右下角顶点屏幕纵坐标

table

table

高阶用法

高阶用法

参数

类型

说明

orient

number

选填,0 - 8,代表找色方向,支持版本详见注意事项

main

number

选填,参照点的偏色,支持 iOS v2.4.1,Andriod v2.3.5.4 以上版本,例如 main = 0x101010(十六进制)

list

number

选填,周边点的偏色,支持 iOS v2.4.1,Andriod v2.3.5.4 以上版本,例如 list = 0x202020(十六进制)

返回值

类型

说明

x, y

number

返回符合条件的参照点的坐标,如未找到则返回 -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)

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

--多点找色--在屏幕上以左上角坐标 (0,0) 和右下角坐标 (639, 959)确定的区域(即全屏)范围内寻找符合偏移范围和颜色的3个坐标点x, y = findMultiColorInRegionFuzzy(0x181F85, "29|1|0x00BBFE,103|-4| 0x0B6BBE,65|9|0x150972", 100, 0, 0, 639, 959); dialog(x..","..y, 0)那么返回的(x, y)就应该是(268,802)了。即使这个按钮平移了,这个点的坐标变了,也可以寻找到其准确位置。

高阶用法:

多方向找色规则:

orient 不填或 orient = 0 表示包括基准点在内的所有参照点都必须在查找范围之内 ,orient = 1 - 8 表示使用 8 种不同的找色方向。

只要写了 orient 参数,那么找色方向就会根据 init() 设置方向旋转,一直保持以当前设置的屏幕方向左上角为初始点。

orient = 1,左上角到右下角,纵向开始找色,先找到 a 顶点。

orient = 2,左上角到右下角,横向开始找色,先找到 b 顶点。

orient = 3,右上角到左下角,横向开始找色,先找到 c 顶点。

以此类推。

完整演示代码、image、多点找色示例图:找色.zip33.6kB

多方向找色方法:

x,y = findMultiColorInRegionFuzzy( 0x000000, "0|0|0x000000", 95, x1, y1, x2, y2, { orient = 1 })--支持版本:iOS 3.0.0-118,Android 2.3.5 以上偏色用法:

--另外一种偏色模式,引擎版本 iOS v2.4.1,Andriod v2.3.5.4 以上支持--main 为参照点 0xffffff 的偏色,list 为周边点的偏色,如果想对每一个周边点单独偏色,在每一个偏色后面加上偏色值即可,如 "0|0|0x1ac819|0x202020"x, y = findMultiColorInRegionFuzzy(0xffffff,"0|0|0x1ac819,-4|-208|0x18cb76,3|58|0x21cc79", 90, x, y, x0, y0, { main = 0x101010, list = 0x202020 } )--main 及 list 参数暂不支持 Androiddialog(x..","..y, 0)注意事项:

posandcolor 参数中的坐标为相对坐标。

多点找色的代码可直接用触动精灵取色工具生成,其使用方法参见图文教程。

颜色值的十六进制文本中,其顺序为 RGB。

相对于第一个点的坐标,即用这个点的横坐标、纵坐标分别减去第一个点的横坐标、纵坐标,可以为负数。

使用此函数时精度参数设置过低,会导致性能大幅下降。

引擎版本 iOS v2.4.5-9,v3.0.0-118 以上版本,如果 orient = 1 - 8 按方向进行查找,只要目标点在查找范围内,不需要基准点须在查找范围之内。

引擎版本 Android v2.3.5 以上版本,如果 orient = 1 - 8 按方向进行查找,Android v2.3.5.4 以上版本支持 orient = 0。

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

函数名称:高级多点找色,高级区域多点找色

函数功能:在指定区域,根据颜色以及其周边点的颜色,寻找所有符合条件的点的坐标,支持模糊查找。

支持版本:引擎版本 iOS v1.0,Android v1.2.8 以上

函数方法

point = findMultiColorInRegionFuzzyExt(color, posandcolor, degree, x1, y1, x2, y2);

参数

类型

说明

color

number

欲寻找的参照点颜色

posandcolor

string

周边点颜色参数

degree

number

寻找精度,范围:1 ~ 100,当是 100 时为完全匹配

x1

number

找色区域左上角顶点屏幕横坐标

y1

number

找色区域左上角顶点屏幕纵坐标

x2

number

找色区域右下角顶点屏幕横坐标

y2

number

找色区域右下角顶点屏幕纵坐标

table

table

选填,高阶用法,详见 findMultiColorInRegionFuzzy 函数

高阶用法

参数

类型

说明

orient

number

选填,0 - 8,代表找色方向,支持版本详见注意事项

main

number

选填,参照点的偏色,支持 iOS v2.4.1,Andriod v2.3.5.4 以上版本,例如 main = 0x101010(十六进制)

list

number

选填,周边点的偏色,支持 iOS v2.4.1,Andriod v2.3.5.4 以上版本,例如 list = 0x202020(十六进制)

返回值

类型

说明

point

table

以 table 形式返回所有符合条件的参照点的坐标,如未找到则返回的 table 为空

返回的 table 为以下形式:

table = { {x = 100,y = 110}, {x = 200,y = 210}, {x = 300,y = 310}, ...}脚本实例:

基础用法:

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

--另外一种偏色模式,引擎版本 iOS v2.4.1,Andriod v2.3.5.4 以上支持--main 为参照点 0xffffff的偏色,list 为周边点的偏色,如果想对每一个周边点单独偏色,在每一个偏色后面加上偏色值即可,如 "0|0|0x1ac819|0x202020"point = findMultiColorInRegionFuzzyExt(0xffffff,"0|0|0x1ac819,-4|-208|0x18cb76,3|58|0x21cc79", 90, x, y, x0, y0, { main = 0x101010, list = 0x202020 } )if #point ~= 0 then --如返回的 table 不为空(至少找到一个符合条件的点) for var = 1,#point do nLog(point[var].x..":"..point[var].y) endend多点方向用法:

x,y = findMultiColorInRegionFuzzyExt( 0x000000, "0|0|0x000000", 95, x1, y1, x2, y2, { orient = 1 })注意事项:

posandcolor 参数中的坐标为相对坐标。

多点找色的代码可直接用触动精灵取色工具生成,其使用方法参见图文教程。

颜色值的十六进制文本中,其顺序为 RGB。

相对于第一个点的坐标,即用这个点的横坐标、纵坐标分别减去第一个点的横坐标、纵坐标,可以为负数。

使用此函数时精度参数设置过低,会导致性能大幅下降。

引擎版本 iOS v2.4.5-9,v3.0.0-118 以上版本,如果 orient = 1 - 8 按方向进行查找,只要目标点在查找范围内,不需要基准点须在查找范围之内。

引擎版本 Andriod v2.3.5.4 以上版本,如果 orient = 0 - 8 按方向进行查找。

函数:findImage 高级区域找图(仅支持 iOS)

函数名称:区域找图、高级区域找图

函数功能:在指定区域中,寻找指定的图案,返回其左上角顶点坐标。

支持版本:引擎版本 iOS v2.3.0 以上

函数方法

x, y = findImage( picpath, x1, y1, x2, y2, alpha);

返回值:number x, y

参数

类型

说明

picpath

string

将要寻找的图片文件名

x1

number

找色区域左上角顶点屏幕横坐标

y1

number

找色区域左上角顶点屏幕纵坐标

x2

number

找色区域右下角顶点屏幕横坐标

y2

number

找色区域右下角顶点屏幕纵坐标

alpha

number

误差值,此参数值越低找图越严格,默认为 40000000,最低为0,当写0时为完全匹配,此参数可省略

返回值

类型

说明

x,y

number

找到的图片的左上角顶点坐标,如未找到则返回 -1,-1

脚本实例:

1.精确寻找指定区域中,指定图片的位置

--寻找符合条件的图片

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

此函数推荐与 snapshot 截图函数配合使用,成功率较高。

匹配精度建议每次加减 1000000,此参数值越低匹配精度越高

默认图片路径为 /var/mobile/Media/TouchSprite/res(参数中无需填写完整路径),自建目录请填写相对路径。

若该函数找图不理想可使用findimageinregionfuzzy模糊区域找图,几种找图方式可配合使用。

函数:snapshot 截图

函数名称:截图

函数功能:截取屏幕中指定区域的图像并生成指定格式的图片文件

函数方法

snapshot( picname, x1, y1, x2, y2, quality);

返回值:无

参数

类型

说明

picname

string

截图保存的文件名

x1

number

找色区域左上角顶点屏幕横坐标

y1

number

找色区域左上角顶点屏幕纵坐标

x2

number

找色区域右下角顶点屏幕横坐标

y2

number

找色区域右下角顶点屏幕纵坐标

quality

number

仅支持 iOS,当截图格式选为 jpg 时,可用此参数控制图片质量,此参数值为大于 0 且小于等于 1 的值

脚本实例:

iOS 示例

snapshot("test.png", 0, 0, 639, 1135); --以 test 命名进行截图--全屏截图(iPhone 5, 5S),并以当前日期为文件名保存

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

--全屏截图(以小米 4 为例),并以当前日期为文件名保存

current_time = os.date("%Y-%m-%d", os.time()); --以时间戳命名进行截图w,h = getScreenSize();-- 右下角顶点坐标最大为 (宽度最大值-1, 高度最大值-1)snapshot(current_time..".png", 0, 0, w-1, h-1); 注意事项:

Android 系统保存图片支持 png 及 jpg 格式,不可以设置质量;iOS 系统保存图片的格式可为 bmp, jpg, png,因为 png 是 iOS 中最常见的格式,所以推荐选择 png。

截图时,如使用全屏截图,右下角顶点坐标最大为 ((宽度最大值 - 1, 高度最大值 - 1),否则 iOS 系统会出现越界错误,安卓系统截出的图会是纯白色的。

默认图片路径请使用 userPath 函数获取,具体使用方法请参阅 对应章节,自建目录请填写相对路径,文件相同将会被覆盖

本文 iOS 实例中 os.date 与 os.time 为 Lua 基本库函数,请查阅附录 Lua 操作系统函数库。

".." 为字符串连接操作符,可以将字符串变量、常量连接在一起。

本文 iOS 实例中 640 * 1136 为 iPhone 5,5S 等设备的分辨率,实际使用中请根据运行设备替换为对应值。

quality 参数仅在引擎版本高于 iOS v2.0.9 时方可使用。

当引擎版本高于 iOS v2.2.5-1,Android v2.0.5 时,四个坐标参数省略,默认截取全屏图像。

函数:imageOperMerge 图片合并

函数名称:图片合并

函数功能:将几张图片合并生成一张新图片。

支持版本:引擎版本 iOS v2.3.4,Android 2.2.6 以上

函数方法

flag = imageOperMerge(pictb, string path, number type, quality);

返回值:number flag

参数

类型

说明

pictb

table

需合并图片的文件名列表,支持使用绝对路径

path

string

生成新图片的文件名,支持使用绝对路径

type

number

合并类型,0 - 横向合并;1 - 竖向合并

quality

number

当生成图片格式为 jpg 时,可控制图片质量,范围[0 - 1]

返回值

类型

说明

flag

number

0 - 成功;1 - 失败;2 - 失败;3 - 失败

脚本实例:

snapshot("1.png",100,100,200,200) --截取屏幕上左上角坐标为 (100,100),右下角坐标为 (200,200) 区域,宽高皆为 100 像素的图片,图片名为 1.pngsnapshot("2.png",100,200,200,300) --截取屏幕上左上角坐标为 (100,200),右下角坐标为 (200,300) 区域,宽高皆为 100 像素的图片,图片名为 2.pngsnapshot("3.png",100,300,200,400) --截取屏幕上左上角坐标为 (100,300),右下角坐标为 (200,400) 区域,宽高皆为 100 像素的图片,图片名为 3.pngimageOperMerge({"1.png","2.png","3.png"},"4.jpg",0,0.5) --将上面截取的三张图片合成为一张并命名为 4.jpg注意事项:

iOS 系统默认图片路径为 /var/mobile/Media/TouchSprite/res,自建目录请填写相对路径

当脚本要上传到企业版和小精灵平台时,请使用 userPath 函数代替 /res 之前的目录使之自动获取。

开发辅助类函数:dialog 提示框

函数名称:对话框,弹窗,提示框

函数功能:弹出提示信息。

函数方法

dialog(text, time);

返回值:无

参数

类型

说明

text

string

提示信息,将在设备屏幕上以弹窗形式显示

time

number

提示信息显示的时间,不限时间请填 0

脚本实例:

1. 欢迎使用

dialog("欢迎使用触动精灵!", 5); --Android 系统在部分设备上需要在系统设置里开启悬浮窗权限方可正常使用此函数mSleep(1000);dialog("本脚本仅供演示对话框的用法。\n 提示信息可以换行。",0);注意事项:

time 参数时间一般在 2 秒以上,否则出现时间太短看不清楚。

该函数仅供呈现提示信息给用户,不可接收返回值。

该函数所产生的提示窗口显示的时候会影响当前屏幕取色,请在合理的位置使用该函数。

关于转义字符:\r \n 为换行,请查阅 Lua 转义字符表。

在引擎版本 iOS v2.2.4 以上版本中,time 参数可省略,如省略将按 0 处理。

安卓系统在部分设备上需要在系统设置里开启使用此函数方可正常。

函数:toast 提示

函数名称:HUD 提示,吐司提示

函数功能:在屏幕底部以悬浮层形式显示字符串信息

支持版本:引擎版本 iOS v2.2.4 以上

函数方法

toast(text, time);

返回值:无

参数

类型

说明

text

string

提示信息,将在设备屏幕上以 HUD 形式显示

time

number

停留时间(单位:秒),当触动精灵版本高于 v2.3.0 时有效

脚本实例:

1. 欢迎使用

toast("欢迎使用触动精灵!"); mSleep(3000);-- 建议 toast 函数后面添加 3 秒间隔否则可能显示错误toast("本脚本仅供演示toast函数效果。\n 提示信息可以换行。");注意事项:

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

函数:dialogRet 带按钮的对话框

函数名称:带按钮的对话框

函数功能:弹出提示信息,并提供 1 ~ 3 个按钮给用户选择。

函数方法

choice = dialogRet(string text, string cbtn, string btn1, string btn2, number time);

返回值:number choice

参数

类型

说明

Text

string

提示信息

cbtn

string

默认按钮标题,不需要请填 ""

btn1

string

可选按钮 1,不需要请填 "" 或 0

btn2

string

可选按钮 2,不需要请填 "" 或 0

time

number

提示信息显示的时间,不限时间请填 0

返回值

类型

说明

choice

number

返回用户按下按钮的序号 cbtn == 0;btn1 == 1;btn2 == 2

脚本实例:

1. 选择性别(双选)

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

选择性别(三选)

choice = dialogRet("请选择您的性别:", "取消", "男", "女", 0);if choice == 0 then --取消 dialog("您放弃了选择",0); mSleep(1000);elseif choice == 1 then --男 dialog("你好,帅哥",0); mSleep(1000);elseif choice == 2 then --女 dialog("你好,美女",0); mSleep(1000);end

请阅读许可协议

dialogRet("这里是许可协议或广告,强制阅读 30 秒不可消除。", "", "", "", 30);注意事项:

请勿将三个按钮都设置为空,再将 time 参数设置为 0,这样将造成出现无法消失也没有按钮的对话框,造成设备无法进行其它操作,只能重启(已在 2.3.6 版本中修复)。

值得一提的是,cbtn 总是对话框的最右边或者最下面的按钮。

参数中的 0 是数字,不是文本 "0"。

当 time 参数不为 0 并且用户没有选择,超时将返回 3。

函数:dialogInput 参数对话框

函数名称:参数对话框

函数功能:弹出提示信息,并提供 1 ~ 2 个编辑框给用户输入。

支持版本:引擎版本 iOS v2.3.7,Android v2.3.4 以上

函数方法

text_a,text_b = dialogInput(title,format, btn);

返回值: text_a, text_b

参数

类型

说明

title

string

提示标题

format

string

编辑框中浅色的提示文字,如果需要两个编辑框,则将提示文字用 "#" 分割

btn

string

确认按钮标题

返回值

类型

说明

text_a,text_b

string

返回用户输入的文本

脚本实例:

1. 单编辑框 - 输入姓名

text_a = dialogInput("请输入您的姓名", "在这里输入姓名", "确认");mSleep(1000);

多编辑框 - 输入姓名和年龄

::getInfo::--设置跳转标签text_a, text_b = dialogInput("请选择您的姓名和年龄", "在这里输入姓名 #在这里输入年龄", "确认");text_b = tonumber(text_b) --年龄转化成数字类型mSleep(1000);if text_b ~= nil and text_a ~= "" then --均已填写 dialog("你好,"..text_b.." 岁的 "..text_a.." 。",5); mSleep(1000);elseif text_a ~= "" then --只填写了姓名 dialog("你好, "..text_a..",忘记年龄了? 请输入年龄。",5); goto getInfo mSleep(1000);else --均未填写 dialog("请填写您的信息!",5); mSleep(1000); goto getInfo; --返回重新填写end注意事项:

一般来说,使用该函数都要对用户输入的数据进行一定的检查,例如要求非空、长度不得少于。

使用双编辑框时,函数返回的两个字符串顺序与 format 中的顺序相反,请注意。

由于对话框事件需要响应时间,所以建议每次使用对话框,均应使用延迟。

名词解析:

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

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

函数名称:初始化日志、写日志、关闭日志

函数功能:配置日志输出地址与方式、写出或发送日志、关闭日志输出连接。

函数方法

initLog(name, flag);

wLog(name, contents);

closeLog(name);

返回值:无

输出方式

0 - 生成 1 个后缀为 .log的 文件到 log 文件夹下

1 - 生成 1 个以时间戳命名的后缀为 .log 的文件到 log 文件夹下

2 - 异步发送到服务器(仅支持引擎 v1.7.0 及 Android v2.4.1 以上版本)

3 - 同步发送到服务器(仅支持引擎 v1.7.0 及 Android v2.4.1 以上版本)

参数

类型

说明

name

string

日志文件名或服务器地址与端口 不带后缀,自动添加.log

flag

number

可选输出方式

contents

string

日志内容,在该参数中,加入"[DATE]"自动替换为当前可读时间

脚本实例:

1.写到本地日志

initLog("test", 0); --生成 test.log 文件,把 0 换成 1 即生成写入的文件名称加时间.log 的文件,形似 test_1397679553.log 的日志文件 wLog("test","[DATE] Test_1 OK!!!"); --写入日志,日志内容:当前时间 Test_1 OK!!!mSleep(500); --间隔时间 500 毫秒wLog("test","[DATE] Test_2 OK!!!"); --写入日志,日志内容:当前时间 Test_2 OK!!!closeLog("test"); --关闭日志2.发送服务器日志

initLog("192.168.1.1", 2); --初始化日志,并以异步方式发送;把 2 换成 3 即为同步发送wLog("192.168.1.1", "[DATE] Test OK!!!"); --发送日志内容:当前时间 Test_1 OK!!! 到 192.168.1.1(控制端 IP 即电脑 IP)closeLog("192.168.1.1"); --关闭服务器连接3.多日志记录

initLog("test_1", 0); --初始化日志 test_1.loginitLog("test_2", 0); --初始化日志 test_2.logwLog("test_1","[DATE] Test_1 OK!!!"); -- test_1.log 中写入 当前时间 Test_1 OK!!!mSleep(500); --间隔时间 500 毫秒wLog("test_2","[DATE] Test_2 OK!!!"); -- test_2.log 中写入 当前时间 Test_2 OK!!!closeLog("test_1"); --关闭 test_1.log 日志closeLog("test_2"); --关闭 test_2.log 日志注意事项

需要引擎版本 iOS v1.7.0,Android v1.0 及以上版本支持,flag 参数设置为 2 和 3 暂时只支持 iOS 设备,并需要配合触动精灵日志服务端 使用,要求设备与运行服务端的 PC 处于同一网段。

该函数支持多日志记录,即可以定义并初始化多个日志用于分类存放。

此函数一般用于脚本开发阶段,若脚本开发完成,只需注释掉 initLog 即可。

日志的编码为 UTF-8,请使用支持 UTF-8 编码的编辑器查看。

函数:sysLog 系统日志(仅支持 iOS10 以下系统)

函数名称:系统日志

函数功能:输出系统日志 NSLog

函数方法

sysLog(contents);

返回值:无

参数

类型

说明

content

string

需要显示的日志内容

-- 打开命令行 切换到adb文件目录下 输入 adb logcat -s touchsprite sysLog("start")os_type = getOSType()if os_type == "android" then sysLog("Android")else sysLog("iOS")endsysLog("end")注意事项:

该函数将日志输出到系统级日志中,iOS 系统请使用 iTools 或 XCode 查看,Android 系统使用adb工具查看,过滤标识为 touchsprite。

当使用同步消息传送时,脚本需等待日志已经到达服务端才继续执行下面的指令。

当使用异步消息传送时,调用者在发送消息以后可以不用等待响应,可以接着处理其他任务。 即发送日志无需等待发送完成即可继续执行。

注释的操作符形式为 --...... 或 --[[......]] ,可将用于说明的代码写入脚本以便开发时理解。

函数:nLog 远程日志

函数名称:远程日志

函数功能:输出日志到触动精灵 IDE 编辑器(TS Studio)

支持版本:引擎版本 iOS v2.1.6,Android v1.3.0 以

函数方法

nLog(string contents);

返回值:无

参数

类型

说明

content

string

需要显示的日志内容

脚本实例:

for var = 1,50 do nLog("[DATE]"..var);--在编辑器的日志输入界面查看 mSleep(100);end注意事项:

该函数需要脚本编辑器 v1.0.3 以上支持。

此函数仅作为调试用途,由触动精灵脚本编辑器发起的脚本运行将会接收到 nLog 回传信息,其他方式运行的脚本将不会触发 nLog 函数。

使用该函数无需设置日志接收端 IP 地址。

请在编辑器的日志输出面板查看该函数返回的日志信息。

当脚本中频繁使用此函数时,由于日志是异步发送的,如果编辑器接收到的日志内容没有按照顺序显示,是正常现象。此问题可以通过在 nLog 之间插入toast 函数解决。

文件操作函数:unzip 解压(仅支持 Android)函数名称:文件解压

函数功能:文件解压,解压压缩包

支持版本:仅 Android v2.3.5 及其以上版本支持

函数方法:

unzip(zipPath,filePath)

参数说明

参数

类型

说明

参数

类型

说明

zipPath

string

压缩包路径

filePath

string

解压路径

脚本实例:

unzip(userPath() .. "/web.zip",userPath() .. "/res/")函数:zip 压缩(仅支持 Android)函数名称:文件压缩

函数功能:文件压缩

支持版本:仅 Android v2.3.5 及其以上版本支持

函数方法:

zip(zipPath,filePath)

参数说明

参数

类型

说明

zipPath

string

压缩包路径

filePath

string

需要压缩的路,只支持压缩文件夹

脚本实例:

zip("/mnt/sdcard/TouchSprite/web.zip","/mnt/sdcard/TouchSprite/web")脚本控制函数:mSleep 延时

函数名称:等待延迟,延时

函数功能:发送系统等待事件。

函数方法

mSleep(numberinterval);

返回值:无

参数

类型

说明

interval

number

单位为毫秒,脚本暂停执行的时间长度

脚本实例:

1.延迟1秒和1分钟

mSleep(1000); --延迟1秒钟mSleep(60 * 1000) --此函数不适合用于长时间的精确计时,如长时间的精确计时请使用 os.time2.按住 3 秒不松手

touchDown(200, 300); --按下mSleep(3000); --延迟 3 秒touchUp(200, 300); --抬起注意事项:

延迟函数的使用与各类函数的使用息息相关,尤其是触摸类函数。脚本一般是用来模拟人在界面上的操作,因此要考虑人在各种情况下的延迟、界面加载时的响应时间。

延迟间隔不可过短,当 interval <= 50 ms 时,延迟精确度大幅下降,当 interval <= 16 ms 时,实际延迟约在 16 ms左右。

请勿将此函数用于长时间的精确计时。

1 秒 (s) = 1000 毫秒 (ms)。

函数:lua_exit 退出脚本

函数名称:退出脚本、结束函数

函数功能:直接终止脚本。

函数方法

lua_exit();

返回值:无

脚本实例:

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

ret = dialogRet("许可协议\n协议内容", "同意", "不同意", 0, 0);if ret == 0 then --如果按下"同意"按钮 toast("您选择了同意")else toast("您选择了不同意,脚本退出运行") lua_exit(); --否则退出脚本 mSleep(10) mSleep(10) mSleep(10) --lua的机制是调用此函数之后的下一行结束,如果不希望出现此情况可以在调用函数之后加入一行无意义代码。end注意事项:

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

函数:lua_restart 重载脚本

函数名称:重新加载运行脚本

支持版本:iOS 引擎版本 v2.2.1,Android v1.1.9 以上

函数方法

lua_restart();

返回值:无

脚本实例:

dialog("重载脚本", 0)lua_restart()dialog("执行不到这里", 0)注意事项:

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

函数:luaExitIfCall 来电暂停

函数名称:来电暂停

函数功能:设置电话拨入时停止脚本运行的标识。

支持版本:iOS 引擎版本 v1.0,Android v2.0.9 以上

函数方法

luaExitIfCall(flag);

返回值:无

参数

类型

说明

flag

boolean

状态标识 true - 开启来电暂停;false - 关闭来电暂停

脚本实例:

luaExitIfCall(true); --当有电话拨入时,检查来电暂停状态标识,若为 true,则立即终止脚本;若为 false,则继续运行脚本init(0);注意事项:

该函数在脚本中可使用多次,以调整配置。

当有电话拨入时,检查来电暂停状态标识,若为 true,则立即终止脚本;若为 false,则继续运行脚本。

引擎版本 iOS v2.2.4 以上版本将停止改为暂停。

函数:checkScriptAuth 脚本类型和授权

函数名称:脚本类型和授权

函数功能:获取脚本的格式类型、授权状态和脚本 ID

支持版本:iOS 引擎版本 v2.2.6,Android v2.0.3 及以上;帮你玩 iOS v1.0.1 以上

函数方法

tsp = checkScriptAuth();

返回值:table型 tsp

返回值

类型

说明

tsp.type

string

返回当前脚本的类型: lua tsp p4u

tsp.auth

number

返回当前脚本的授权状态: 0 - 未授权;1 - 已授权;2 - 试用中

tsp.id

string

返回当前脚本的 ID(此 ID 唯一,可在开发者平台查看)

脚本实例:

tsp = checkScriptAuth()nLog(tsp.type) --输出脚本类型 lua tsp p4utsp = checkScriptAuth()nLog(tsp.id) --输出 tspid 号,脚本必须为 tsp 否则返回空值tsp = checkScriptAuth()if tsp.auth == 2 then --试用字段 iOS 只支持 v2.4.1,Android v2.2.4 以上版本 dialog("脚本状态:试用中")elseif tsp.auth == 1 then dialog("脚本状态:已激活")else dialog("脚本状态:未激活")end系统相关函数:getNetTime 获取网络时间

函数名称:获取网络时间

函数功能:从互联网上获取时间信息,返回从1970年1月1日到当前状态的秒数。

函数方法

time = getNetTime();

返回值: time

返回值

类型

说明

time

number

返回从 1970年1月1日到当前状态的秒数,如获取失败则返回 0

脚本实例:

获取网络时间 & 格式化网络时间

time = getNetTime(); time_year = os.date("%Y",time) --格式化 time 值获取年份toast(time_year)mSleep(3000)time_M = os.date("%m",time) --格式化 time 值获取月份toast(time_M)mSleep(3000)time_D = os.date("%d",time) --格式化 time 值获取日toast(time_D)mSleep(3000)toast(os.date("%Y年%m月%d日",time)) --连起来可以写成这样mSleep(3000)toast(os.date("%Y年%m月%d日%H点%M分%S秒",time)) --或这样获取网络时间并判断脚本过期

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

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

当无法正确获取的时候该函数返回0。

函数:addContactToAB 添加联系人

函数名称:添加联系人

函数功能:添加联系人到通讯录

支持版本:引擎版本 iOS v2.3.6,Android v2.0.5 以上

函数方法

addContactToAB({lastname, firstname, mobile});

返回值:无

参数

类型

说明

lastname

string

联系人姓

firstname

string

联系人名

mobile

string

联系人电话号码

脚本实例:

addAB = { {lastname="小",firstname="明",mobile="10080"}, {lastname="小",firstname="红",mobile="10010"}, {lastname="小",firstname="白",mobile="10000"}}for _,v in ipairs(addAB) do addContactToAB(v)end脚本实例:添加 100 个号码到手机通讯录

addAB = {}f = 1for k = 1860996268,1860996368 ,1 do addAB[f] = {lastname,firstname,mobile} --通过 f 的值按顺序创建表格 addAB[f].lastname = tostring(k) --生成姓 addAB[f].firstname = tostring(k) --生成名 addAB[f].mobile = tostring(k) --生成电话号码 f = f + 1endfor _,v in ipairs(addAB) do addContactToAB(v) --添加到联系人end注意事项:

批量导入数据量过大的时候,导入过程会比较长。

函数:removeAllContactsFromAB 清空通讯录

函数名称:清空通讯录

函数功能:删除通讯录所有联系人

支持版本:引擎版本 iOS v2.3.6,Android v2.0.5 以上

函数方法

removeAllContactsFromAB();

返回值:无

UTF-8 编码模块说明

本模块提供了对 UTF-8 编码的基础支持。 所有的函数都放在表 utf8 中。

除非另有说明, 当一个函数需要一个字节位置的参数时, 都假定这个位置要么从字节序列的开始计算, 要么从字符串长度加一的位置算。 和字符串库一样,负的索引从字符串末尾计起。

函数:utf8.char 整数序列转换字符串

函数名称:整数序列转换字符串

函数功能:接收零或多个整数, 将每个整数转换成对应的 UTF-8 字节序列,并返回这些序列连接到一起的字符串。

函数方法

str = utf8.char (number_1,number_2...)

参数

类型

说明

number_(*)

number

输入的整数序列

返回值

类型

说明

str

string

整数序列转换对应字符串

函数用例:

str = utf8.char(35302,21160,31934,28789) dialog(str, time)扩展:

utf8.charpattern字符串用于精确匹配到一个 UTF-8 字节序列的模式

详情参照这里:http://www.runoob.com/manual/lua53doc/manual.html#6.4.1

函数:utf8.codes 获取字符编码

函数名称:获取字符编码

函数功能:返回字符串中每个字符的编码

函数方法

for index,code in utf8.codes(str) do

--body

end

参数

类型

说明

str

string

输入的字符串

返回值

类型

说明

index

number

字符位置(按字节数)

code

number

字符编码

函数用例:

str = "触动精灵"for index,code in utf8.codes(str) do dialog(string.format("%s的unicode编码为\\u%0x",index,code),time)end 注意事项:

返回字符位置按字节数计算。

如果处理到一个不合法的字节序列,将抛出一个错误。

函数:utf8.codepoint 获取指定位置字符编码

函数名称:获取指定位置字符编码

函数功能:获取指定位置字符编码,以整数形式返回

函数方法

strcode = utf8.codepoint (str , i , j)

参数

类型

说明

str

string

输入的字符串

i

number

开始位置,可缺省,默认为 1

j

number

结束位置,可缺省,默认为 1

返回值

类型

说明

strcode

number

字符串中指定位置的字符编码

函数用例:

local str = "触动精灵"strcode = utf8.codepoint (str)dialog(strcode, time) 注意事项:

如果处理到一个不合法的字节序列,将抛出一个错误。

函数:utf8.len 统计字符个数

函数名称:统计字符个数

函数功能:统计指定位置的字符个数

函数方法

length = utf8.len (str , i , j)

参数

类型

说明

str

string

输入的字符串

i

number

开始位置,可缺省,默认为1

j

number

结束位置,可缺省,默认为-1

返回值

类型

说明

length

number

字符串中指定位置的字符个数

函数用例:

local str = "触动精灵"length = utf8.len (str)dialog(length, time)注意事项:

如果处理到一个不合法的字节序列, 返回第一个不合法字节的位置。

函数:utf8.offset 获取字符位置

函数名称:获取字符位置

函数功能:返回字符串中的第 n 个字符的开始位置

函数方法

start_num = utf8.offset (str , n , i)

参数

类型

说明

str

string

输入的字符串

n

number

查找的第几个字符

i

number

开始位置,可缺省

返回值

类型

说明

start_num

number

字符串中第n个字符的开始位置

函数用例:

local str = "触动精灵"start_num = utf8.offset (str , 2)dialog(start_num, time)注意事项:

返回字符位置按字节数计算。

n 为负数则取在位置 i 前的字符。 当 n 是非负数时,默认的 i 是 1, 否则默认为字符串的长度加一。

如果处理到一个不合法的字节序列,将抛出一个错误。

文字输入及按键模拟函数:inputText 输入字符串

函数名称:输入字符串

函数功能:向输入框中输入文本

函数方法

inputText(string);

返回值:无

参数

类型

说明

string

string

将输入的文本以及控制字符

脚本实例:

输入欢迎文本并发送

touchDown(150,150); --点击输入框获取焦点(假设输入框坐标已知)mSleep(30)touchUp(150,150);mSleep(1000); --延迟 1 秒以便获取焦点,注意某些应用不获取焦点无法输入for var = 1,15 do --删除输入框中的文字(假设输入框中已存在文字) inputText("\b") --iOS 设备连续输入建议加下延时时间,否则可能因为速度太快导致输入错误 mSleep(20)endinputText("Welcome.#ENTER#"; --在输入框中输入字符串 "Welcome." 并回车;此函数在某些应用中无效,如支付宝、密码输入框等位置,甚至可能会导致目标应用闪退注意事项:

使用该函数前,必须先点击输入框获取焦点(指使当前的输入光标停留在某一输入框中)

控制字符包括 \b、\n、\r、#ENTER#,如果设备系统版本为 iOS 7,\r无法使用,使用\b需安装引擎版本 iOS v1.6.9 及以上

仅在 iOS 7 上可使用"#ENTER#"作为回车,相当于点击虚拟键盘上的 "Done"

需要注意的是,并不是所有输入框都可以使用此功能,如支付宝、密码输入框等位置,甚至可能会导致目标应用闪退

iOS 系统该函数不支持第三方输入法(指百度输入法、搜狗输入法等),请切换到系统内置输入法

安卓系统在使用该函数时,将自动切换至触动精灵输入法,部分机型没有成功安装触动输入法时,请手动安装百度输入法可正常使用

模拟器不能输入的话,需要修改设置,修改教程:http://bbs.touchsprite.com/thread-5203-1-1.html

对于弹出的窗口,需要先初始化再使用该函数,例如 App Store登录窗口(该窗口Bundle ID 为"com.apple.springboard")

iOS 设备连续输入建议加下延时时间,否则可能因为速度太快导致输入错误

函数:switchTSInputMethod 切换到触动/帮你玩输入法(仅支持 Android)

函数名称:切换到触动/帮你玩输入法

函数功能:主动切换到触动/帮你玩输入法,大幅提高多次调用inputText执行效率,解决部分第三方输入法无法使用inputText的问题。

支持版本:触动精灵Android v2.0.8以上

函数方法

switchTSInputMethod(逻辑型 flag);

返回值:无

参数

类型

说明

flag

boolean

保持开关

脚本实例:

-- 需要多次输入的登录模块function login(...) switchTSInputMethod(true); -- 切换到触动/帮你玩输入法 -- 点击输入框获取焦点 touchDown(x, y) mSleep(30) touchUp(x, y) inputText("username") -- 点击输入框获取焦点 touchDown(x, y) mSleep(30) touchUp(x, y) inputText("password") switchTSInputMethod(false); -- 切换到之前的输入法end-- 不需要inputText输入的其他逻辑模块function main(...) login()endmain()注意事项:

点击输入框之前调用switchTSInputMethod(true),结束调用inputText时调用switchTSInputMethod(false),这样不会导致用户手动输入失败或者inputText输入异常。

先调动switchTSInputMethod(true),才可以通过switchTSInputMethod(false)切换回之前的输入法,单纯调用switchTSInputMethod(false)没有效果。

猩猩模拟器不支持切换输入法,不切换输入法也可以正常输入。

函数:getInPutMethod 获取当前输入法包名(仅支持 Android)函数名称:获取当前输入法包名

函数方法 : getInPutMethod();

返回值:string bid

支持版本:触动精灵Android v1.3.0以上

返回值

类型

说明

bid

string

用于切换输入法的包名

脚本实例:

频繁输入字符的脚本

-- 脚本启动,获取输入法包名ipm = getInPutMethod() -- 切换到触动输入法os.execute("settings put secure default_input_method com.touchsprite.android/.core.TSInputMethod") -- 脚本主体-- 结束脚本前切换回之前的输入法os.execute("settings put secure default_input_method "..ipm) 注意事项:

触动输入法包名: "com.touchsprite.android/.core.TSInputMethod"

函数:pressHomeKey 模拟主屏幕按键

函数名称:模拟主屏幕按键,模拟 Home 按键

函数功能:模拟用户按下或抬起主屏幕按键的操作。

支持版本:引擎版本 iOS v1.0, Android v1.3.0 以上

函数方法

pressHomeKey(state);

返回值:无

参数

类型

说明

state

number

iOS 6 及其以下系统 0 - 按下;1 - 抬起;iOS 7只能填 0

脚本实例:

iOS 系统返回主屏幕

--iOS 6系统 和 iOS 7.1及以上系统pressHomeKey(0); --按下 Home 键pressHomeKey(1); --抬起 Home 键--iOS 7 系统pressHomeKey(0); --按下抬起 Home 键一次Android 系统返回主屏幕

pressHomeKey(); --Android 系统不需要填参数,自动点击抬起iOS 系统调出后台

pressHomeKey(0); --按一次 Home 键pressHomeKey(1);mSleep(30); --短暂延迟pressHomeKey(0); --再按一次,在 iOS 7 以上版本中使用双击功能可使用函数 doublePressHomeKeypressHomeKey(1);3.调出 Siri (iPhone 4S 以上,iOS 6 及以下或触动版本高于v2.3.5)

pressHomeKey(0); --按下 Home 键mSleep(3000); --按住不放pressHomeKey(1); --抬起注意事项:

在 iOS 6 系统上,状态标识为 0 时,调用该函数则开始按下 Home 键并按住不放,直到状态标识为 1 时重新调用该函数,抬起 Home 键。

在 iOS 7 系统上,状态标识填写 0,代表按一次 Home 键,即按下并立即抬起 Home 键的操作。

在 iOS 7.1及以上版本中和6系统一致,状态标识为 0 时,调用该函数则开始按下 Home 键并按住不放,直到状态标识为 1 时重新调用该函数,抬起 Home 键。

函数:doublePressHomeKey 双击 HOME 键(仅支持 iOS)

函数名称:双击 HOME 键

函数功能:模拟用户双击 HOME 键的操作。

函数方法

doublePressHomeKey();

返回值:无

脚本实例:

1.双击HOME键打开后台

doublePressHomeKey(); --此函数仅能用于 iOS 7 或以上版本注意事项:

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

此函数仅能用于 iOS 7 或以上版本

函数:keyDown、keyUp 模拟键盘(仅支持 iOS)

函数名称:模拟键盘

函数功能:模拟外接键盘按下、抬起。

支持版本:引擎版本 iOS v2.3.5 以上

函数方法

keyDown(key);

keyUp(key);

返回值:无

参数

类型

说明

key

string

模拟外接键盘的键盘码

脚本实例:

--以下为粘贴示例keyDown("RightGUI") keyDown("v")keyUp("v")keyUp("RightGUI") --以下为输入小写字母keyDown("t")keyUp("t") --以下为输入大写字母keyDown("CapsLock")keyDown("t")keyUp("t")keyUp("CapsLock") --以下为输入数字keyDown("1")keyUp("1") --以下为输入符号keyDown("LeftShift")keyDown("1")keyUp("1")keyUp("LeftShift")

更多键盘码请参看→按键码表

命令: 安卓模拟物理按键(仅支持 Android)注意事项:

当 inputText 函数在某些输入框内无效时可尝试使用此函数输入字符。

推荐使用键名,不同的手机的键值不同会导致此函数无效。。

在安卓某些 HTML 页面,使用 inputText 函数输入无效,可尝试使用模拟物理按键。

具体参数见→约定的按键编码。

实例:

os.execute("input keyevent 键名")--按下 Home 键os.execute("input keyevent KEYCODE_HOME")--按下返回键os.execute("input keyevent KEYCODE_BACK")--按下回车键os.execute("input keyevent KEYCODE_ENTER")--按下菜单键os.execute("input keyevent KEYCODE_MENU") --按下音量加键os.execute("input keyevent KEYCODE_VOLUME_UP")--按下音量减键os.execute("input keyevent KEYCODE_VOLUME_DOWN")--输入10086os.execute("input text \"10086\"") --按拨号键打通os.execute("input keyevent KEYCODE_CALL") 应用相关函数:runApp、closeApp 运行、关闭应用

函数名称:运行、关闭应用

函数功能:打开或关闭一个应用程序。

函数方法

flag = runApp(bid, class);

返回值:state

closeApp( bid, type);

返回值:无

参数

类型

说明

bid

string

应用程序的Bundle ID 或包名

class

string

安卓应用程序的类名(选填)

type

number

iOS 系统:可选关闭类型(选填),0 - 关闭应用进程;1 - 关闭后台应用

返回值

类型

说明

state

number

0 应用启动成功;非 0 应用启动失败(7 应用不存在)

脚本实例:

打开 iOS 内置天气应用,然后退出

r = runApp("com.apple.weather"); --启动天气应用 mSleep(10 * 1000);if r == 0 then closeApp("com.apple.weather"); --退出天气应用,使用此函数后在后台仍可看到应用程序图标属正常现象,实际进程已不在后台else dialog("启动失败",3);end关闭 iOS 所有后台应用

closeApp("*",1)--关闭所有后台应用(2.3.5以上版本有效)注意事项:

runApp函数需要系统响应时间较长,注意做好延迟或判断。

iOS 系统使用 closeApp 函数后在后台仍可看到应用程序图标属正常现象,实际进程已不在后台。

参数 type 仅在引擎版本 iOS v2.3.5 以上版本有效(参数 type 为1时为模拟双击 Home 键,向上滑动退出应用的效果)。

关于 Bundle ID 和包名的获取方法,参见"初始化"一章。

安卓应用类名自行百度,游戏不可以通过类名直接启动指定页面,不是所有应用都可以通过此方法启动指定页面。

请注意,部分手机不支持通过类名跳转指定页面。

函数:isFrontApp 判断前台应用

函数名称:判断前台应用

函数功能:根据应用的 Bundle ID 或包名判断应用是否处于前台。

函数方法

flag = isFrontApp(bid);

返回值:flag

参数

类型

说明

bid

string

待检测的应用程序 Bundle ID 或包名

返回值

类型

说明

flag

number

0 - 不在前台运行;1 - 在前台运行

脚本实例:

监听应用状态

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

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

函数:frontAppBid 获取前台应用

函数名称:获取前台应用

函数功能:获取前台应用的 Bundle ID 或包名,安卓和iOS使用有区别。

iOS函数方法:

bid = frontAppBid();

返回值

类型

说明

bid

string

返回前台应用程序的Bundle ID或包名,若无应用处于前台,则返回空字符串

安卓函数方法:

bid,class = frontAppBid();

返回值

类型

说明

bid

string

返回前台应用程序的包名,若无应用处于前台,则返回空字符串

class

string

返回前台应用程序的包名及类名

脚本实例:

iOS 系统获取前台应用bid

bid = frontAppBid(); dialog(bid);--此方法同样适用于系统应用和越狱插件Android 系统获取前台应用bid

bid,class = frontAppBid(); dialog(bid.."\r\n"..class);--此方法同样适用于系统应用检查指定应用是否开启

bid = frontAppBid();if bid ~= "com.apple.mobilesafari" then dialog("请打开 Safari 再运行该脚本!", 5); mSleep(3000); lua_exit();end注意事项:

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

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

函数名称:获取应用安装路径

函数功能:调用该函数将返回应用程序的安装路径。

支持版本:引擎版本 iOS v2.0.7,Android v1.3.0 以上

函数方法

path = appBundlePath(string bid);

返回值:string path

参数

类型

说明

bid

string

需要获取路径的应用程序的 Bundle ID 或包名

返回值

类型

说明

path

string

目标应用程序的安装路径

脚本实例:

appPath = appBundlePath("com.baidu.map"); --获取"百度地图"安装路径dialog(appPath,0);函数:appDataPath 获取应用数据路径

函数名称:获取应用数据路径

函数功能:调用该函数将返回应用程序的数据路径。

支持版本:引擎版本 iOS v2.0.8、Android v3.0.0 及其以上

函数方法

path = appDataPath(string bid);

返回值:string path

参数

类型

说明

bid

string

需要获取路径的应用程序的 Bundle ID

返回值

类型

说明

path

string

目标应用程序的数据路径

脚本实例:

dataPath = appDataPath("com.baidu.map"); --获取"百度地图"数据路径if dataPath ~= "" then --如果获取到路径 dialog(dataPath,0);end注意事项:

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

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

函数名称:检测应用是否运行

函数功能:检测指定应用 是否在运行中。

支持版本:引擎版本 iOS v2.2.0,Android v1.3.0 以上

函数方法

flag = appIsRunning(string bid);

返回值:number flag

参数

类型

说明

bid

string

目标应用程序的Bundle ID 或包名

返回值

类型

说明

flag

number

0 - 目标应用未运行;1 - 目标应用运行中

脚本实例:

flag = appIsRunning("com.tencent.mqq"); --检测 QQ 是否在运行if flag == 0 then --如果没有运行 runApp("com.tencent.mqq") --运行 QQend注意事项:

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

函数:openURL 打开网络地址

函数名称:打开网址

函数功能:调用系统浏览器,打开一个指定网址。

函数方法

openURL(string url);

返回值:无

参数

类型

说明

url

string

需要打开的目标网址

脚本实例:

调用系统浏览器打开触动精灵官方论坛

openURL("http://www.touchsprite.com");访问 iOS 系统功能页面

openURL("prefs:root=WIFI"); --打开 wifi 界面openURL("prefs:root=LOCATION_SERVICES"); --打开定位服务界面openURL("prefs:root=General&path=VPN"); --打开 VPN 界面注意事项:

默认情况下调用的浏览器为系统默认浏览器。

欲打开的目标网址必须以 http:// 开头,一些特殊协议也是支持的,Android 系统如:sms:, tel: ,iOS 系统如:mailto://, sms://, tel://, ifile://, cydia:// 等等。

函数:ipaInstall、ipaUninstall 安装、卸载应用(仅支持 iOS)

函数名称:安装、卸载应用

函数功能:用于安装或卸载 ipa 类型的应用程序。

支持版本:引擎版本 iOS v2.3.6 以上

函数方法

flag = ipaInstall(string path);

flag = ipaUninstall(string bid);

返回值:number flag

返回值

类型

说明

flag

number

0 - 失败;1 - 成功

参数

类型

说明

path

string

所要安装的ipa文件路径

bid

string

所要卸载的应用程序 Bundle ID

注意事项:

此功能支持在 iOS6 以上版本的系统中使用

ipaUninstall 函数执行成功后将删除文件系统中的 ipa 文件

调用此函数前需确保在目标设备中已安装过 AppSync 插件

函数:install, uninstallApp 安装、卸载应用程序(仅支持 Android)

函数名称:安装、卸载应用程序

函数功能:用于安装或卸载apk类型的应用程序。

支持版本:引擎版本 Android v1.3.0以上

函数方法

flag = install(path);

flag = uninstallApp(bid);

返回值:number flag

返回值

类型

说明

flag

number

0 - 失败;1 - 成功

参数

类型

说明

path

string

所要安装的ipa文件路径

bid

string

所要卸载的应用程序的应用包名

注意事项:

等同于 iOS 的ipaInstall、ipaUninstall函数

函数:getInstalledApps 获取应用列表

函数名称:获取应用列表

函数功能:获取设备上已安装应用的 Bundle ID 或包名 列表。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数方法

list = getInstalledApps();

返回值:table型 list

返回值

类型

说明

list

table

已安装应用的 Bundle ID 或包名列表

脚本实例:

bidList = getInstalledApps(); for k,v in pairs(bidList) do dialog(v)end返回的 table 为以下形式:

table = { "com.touchsprite.android", "com.netease.ddyx.netease", ...}函数:isInstalledApk 查询应用程序是否安装(仅支持 Android)

函数名称:查询应用程序是否安装

函数功能:用于查询设备上指定应用程序是否安装。

支持版本:引擎版本 Android v1.3.0 以上

函数方法

flag = isInstalledApk(pkn);

返回值:flag

返回值

类型

说明

flag

number

0 - 未安装;1 - 已安装

函数:cleanApp 清理应用数据(仅支持 Android)

函数名称:清理应用数据

支持版本:引擎版本 Android v2.1.4以上

函数功能:调用系统方法清理应用数据。

函数方法

cleanApp(bid);

参数

类型

说明

bid

string

应用程序的包名

脚本实例:

cleanApp("com.tencent.mobileqq")--清理QQ数据,cleanApp 函数是调用系统方法,清理之后操作不可逆,请谨慎调用注意事项:

cleanApp 函数是调用系统方法,清理之后操作不可逆,请谨慎调用。

函数:switchApp 切换到指定应用(仅支持 Android)

支持版本:引擎版本 Android v2.3.6.1 以上

函数名称:切换到指定应用

函数功能:切换到指定应用。

函数方法:

flag,msg = switchApp(bid);

参数

类型

选/必填

说明

bid

string

必填

包名,可以使用 frontAppBid 或者 getInstalledApps 函数获取

返回值

类型

说明

flag

boolean

成功返回 true 失败返回 false

msg

string

成功返回 "",失败返回失败原因

函数用例:

flag,msg = switchApp("com.touchsprite.android")if flag then dialog("切换成功")else dialog(msg)end函数:closeAllApp 清理后台应用(仅支持 Android)

支持版本:引擎版本 Android v2.3.6.1 以上

函数名称:清理后台应用

函数功能:清理后台应用。

函数方法:

flag,msg = closeAllApp(bid)

参数

类型

选/必填

说明

bid

string

选填

包名,不写或写空字符串 "" 表示关闭当前运行脚本的触动产品以外的所有应用(非当前运行脚本的触动/帮你玩/企业版/小精灵也会被关闭),写入包名则关闭除当前运行脚本的触动产品和所填包名应用以外的所有应用,多个应用包名用逗号隔开即可,如"com.aaa.aaa,com.bbb.bbb"

函数用例:

closeAllApp("com.touchsprite.android")注意事项

部分应用会出现无法清理成功或者清理成功后自动重启的情况。

清理成功后在后台仍可看到应用程序图标属正常现象,实际进程已不在后台。

为保证手机系统可以正常使用,已过滤系统应用。

函数:getAppInfo 获取指定应用的信息(仅支持 Android)

支持版本:引擎版本 Android v2.3.6.1 以上

函数名称:获取指定应用的信息

函数功能:获取指定应用的信息。

函数方法:

tab = getAppInfo(bid)

参数

类型

选/必填

说明

bid

string

必填

包名,可以使用 frontAppBid 或者 getInstalledApps 函数获取

返回值

类型

说明

tab

table

应用信息

函数用例:

tab = getAppInfo("com.touchsprite.android")local info = "设备信息:\n"for k, v in pairs(tab) do if type(v) == "table" then info = info .. "\n" .. k .. " : " .. table.concat(tab[k],"\n") .."\n\n" else info = info .. k .. " : " .. v .."\n" endenddialog(info)--[[应用信息:versionName --版本号sourceDir --应用 apk 安装路径firstInstallTime --应用安装时间nativeLibraryDir --应用 lib 路径uid --应用 uidlastUpdateTime --应用更新时间dataDir --应用数据路径enabled --应用是否启用versionCode --版本编译数值appName --应用名称signature --签名activitys --应用 Activitys]]系统信息类函数:getDeviceType 获取设备类型

函数名称:获取设备类型

函数功能:获取设备的类型,可使用获取屏幕分辨率代替。

支持版本:引擎版本 iOS v1.0,Android v1.3.0 以上

函数方法

type = getDeviceType();

返回值:type,name

返回值

类型

说明

type

number

设备类型 0 - iPod Touch;1 - iPhone;2 - iPad;3 - 安卓真机;4 - 安卓模拟器

name

string

设备类型为模拟器时返回具体模拟器名称,非模拟器时没有该参数。

模拟器名称

返回值

逍遥模拟器

逍遥

海马玩模拟器

Droid4X

夜神模拟器

nox

猩猩模拟器

x86

猩猩模拟器畅玩版

klte

天天模拟器

ttVM_Hdragon

脚本实例:

根据分辨率判断设备类型

types = getDeviceType(); if types == 0 then dialog("当前设备为 iPod Touch")elseif types == 1 then dialog("当前设备为 iPhone")elseif types == 2 then dialog("当前设备为 iPad")elseif types == 3 then dialog("当前设备为安卓真机")elseif types == 4 then dialog("当前设备为安卓模拟器"..name,5) end函数:getDeviceID 获取触动精灵设备号

函数名称:获取设备号

函数功能:获取设备标识,每台设备的标识都是唯一的。

支持版本:帮你玩平台禁用此函数

函数方法

id = getDeviceID();

返回值:string id

返回值

类型

说明

id

string

触动精灵32位设备号

脚本实例:

获取设备号并输出到日志

id = getDeviceID(); --帮你玩禁用此函数toast("Device ID: "..id);注意事项:

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

帮你玩开发者平台禁用此函数。

函数:getMemoryInfo 获取设备内存信息

函数名称:获取设备内存信息

函数功能:用于获取当前设备的可用内存、总内存。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数方法

str = getMemoryInfo();

返回值:Table型 str

返回值

类型

说明

str.self

number

触动服务内存(仅支持 iOS)

str.free

number

系统空闲内存

str.total

number

系统总内存

脚本实例:

str = getMemoryInfo()dialog("触动服务占用内存 : "..str.self.."MB;剩余 : "..str.free.."MB;总内存 : "..str.total.."MB", 0)--触动服务内存返回值仅支持 iOS 系统函数:getTSVer、getOSVer 获取引擎版本号、获取系统版本号

函数功能:获取引擎版本号、获取系统版本号

函数方法

version = getTSVer();

version = getOSVer();

返回值:version

返回值

类型

说明

version

string

返回的触动精灵引擎版本号或系统版本号如:1.8.5、2.0.6

脚本实例:

1.判断版本是否符合要求

tsver = getTSVer(); --获取触动精灵引擎版本tsint = tonumber(string.sub(tsver, 1, 1)..string.sub(tsver, 3,3)..string.sub(tsver, 5,5));--转化为数字版本号sysver = getOSVer(); --获取系统版本sysint = tonumber(string.sub(sysver, 1, 1)..string.sub(sysver, 3,3)..string.sub(sysver, 5, 5)); --转化为数字版本号if tsint >= 170 and sysint >= 701 then init(0);else dialog("本脚本不支持您的触动精灵引擎版本或系统版本,请尽快升级!", 5); lua_exit();end名词解析:

string.sub 为Lua基本函数,属于字符串处理函数库,详情请参阅相关文档。

tonumber 为 Lua 基本函数,属于类型转换函数库,详情请参阅官方文档。

注意事项:

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

函数:getOSType 获取设备系统

函数名称:获取设备系统

函数功能:获取设备系统类型是 iOS 还是 Android

支持版本:iOS 引擎版本 v2.1.6,Android v1.0 以上

函数方法

os_type = getOSType();

返回值:string os_type

返回值

类型

说明

os_type

string

返回设备的系统类型 iOS、android

脚本实例:

判断系统是否符合要求

os_type = getOSType(); --获取设备系统版本if os_type == "android" then --返回值为纯小写字母 dialog("欢迎使用触动精灵安卓版")else dialog("欢迎使用触动精灵 iOS 版")end注意事项:

返回值为纯小写字母

函数:getTSAccountID 获取触动账号 ID方法名称:获取触动账号 ID(仅支持触动精灵 Android v2.3.6 以上版本)

方法功能:获取触动账号 ID

调用方法

ID = getTSAccountID()

返回值

类型

说明

ID

string

未登录账号使用此函数返回为空,登录账号后会返回触动账号 ID

脚本实例:

ID = getTSAccountID()dialog(ID)函数:batteryStatus 检测电池状态、电量

函数名称:检测电池状态、电量

函数功能:用于判断当前设备充电状态及电量。

支持版本:引擎版本 iOS v2.3.3,Android v2.0.0 以上

函数方法

retTable = batteryStatus();

返回值:Table型 retTable

返回值

类型

说明

retTable.charging

number

0 - 未充电;1 - 充电状态

retTable.level

number

当前设备剩余电量,范围:0 - 100

脚本实例:

t = batteryStatus(); if t.charging == 1 then dialog("正在充电", time)else dialog("未充电", time)endmSleep(1000)dialog("剩余电量"..t.level.."%")注意事项:

此函数在安卓模拟器上显示充电状态为电量100。

函数:getProcess 获取设备进程列表

函数名称:获取设备进程列表

函数功能:用于获取当前设备的所有进程列表并返回一个table。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数方法

idList = getProcess();

返回值: idList

返回值

类型

说明

idList[n].id

number

进程ID

idList[n].name

string

进程名称

脚本实例:

str = getProcess()text = "设备进程列表 总数 : " .. #str .. "\r\n"for _,v in ipairs(str) do text = text .. v.id.." : "..v.name .. "\r\n"enddialog(text)函数:getDeviceAlias 获取设备别名(仅支持 iOS 企业版)

函数名称:获取设备别名

函数功能:用于获取触动精灵企业版的设备别名。

支持版本:企业版引擎版本 iOS v2.3.3 以上

函数方法

ret = getDeviceAlias();

返回值:ret

返回值

类型

说明

ret

string

当前安装过触动精灵企业版的设备别名

注意事项:

此函数仅适用于触动精灵企业版。

函数:getDeviceName 获取设备名称

函数名称:获取设备名称

函数功能:用于获取设备设置中的名称。

支持版本:引擎版本 iOS v2.3.9,Android v2.2.1 以上

函数方法

str = getDeviceName();

返回值:str

返回值

类型

说明

name

string

获取到的设备名

函数:setDeviceName 设置设备名称(仅支持 iOS)

函数名称:设置设备名称

函数功能:用于设置修改设备设置中的名称。

支持版本:引擎版本 iOS v2.3.9 以上

函数方法

setDeviceName(string str);

返回值:无

参数

类型

说明

name

string

要设置的设备名

函数:getIMEI 获取设备 IMEI(仅支持 Android)

函数名称:获取设备 IMEI

函数功能:用于获取设备 IMEI 也就是Android ID

支持版本:引擎版本 Android v2.1.0 以上

函数方法

imei = getIMEI();

返回值:imei

返回值

类型

说明

imei

string

返回设备 IMEI,设备是模拟器时返回 nil

脚本实例:

local imei = getIMEI();if imei == nil and imei == 000000000000000 then dialog("该设备是模拟器或获取 IMEI 失败");else dialog(imei);end函数:getNetworkIP 获取网络 IP(仅支持 Android)

函数名称:获取网络 IP

函数功能:用于获取手机网络 IP

支持版本:引擎版本 Android v2.1.1以上

函数方法

ip = getNetworkIP();

返回值:ip

返回值

类型

说明

ip

string

返回设备网络 IP,不打开 WiFi 会显示异常,暂不支持模拟器。

脚本实例:

-- 不打开 WiFi 会显示异常,暂不支持模拟器ip = getNetworkIP();dialog(ip);函数:getDeviceBrand 获取设备品牌(仅支持 Android)

函数名称:获取设备品牌

函数功能:用于获取设备品牌

支持版本:引擎版本 Android v2.1.1以上

函数方法

brand = getDeviceBrand();

返回值:brand

返回值

类型

说明

brand

string

返回设备品牌

脚本实例:

brand = getDeviceBrand()dialog(brand);函数:getDeviceModel 获取设备型号(仅支持 Android)

函数名称:获取设备型号

函数功能:用于获取设备型号

支持版本:触动精灵Android v2.1.1 以上

函数方法

model = getDeviceModel();

返回值:model

返回值

类型

说明

deviceModel

string

返回设备型号

脚本实例:

model = getDeviceModel()dialog(model);函数:getCPUType 获取 CPU 型号(仅支持 Android)

函数名称:获取CPU型号

函数功能:用于获取CPU型号

支持版本:引擎版本 Android v2.1.1 以上

函数方法

cpu = getCPUType();

返回值:string cpu

返回值

类型

说明

cpu

string

返回设备 CPU 型号

脚本实例:

cpu = getCPUType()dialog(cpu);函数:getUUID 获取 UUID(仅支持 Android)

函数名称:获取 UUID

函数功能:用于获取设备UUID

支持版本:引擎版本 Android v2.1.1以上

函数方法

uuid = getUUID();

返回值:uuid

返回值

类型

说明

uuid

string

返回设备 UUID

脚本实例:

uuid = getUUID()dialog(uuid);函数:getSDCardPath 获取 SD 卡路径(仅支持 Android)

函数名称:获取 SD 卡路径

函数功能:获取设备 SD 卡路径

函数方法

sdPath = getSDCardPath();

返回值:sdPath

返回值

类型

说明

sdPath

string

返回设备 SD 卡路径,无 SD 卡时返回 nil

脚本实例:

local sdPath = getSDCardPath();if sdPath == nil then dialog("该设备没有 SD 卡");else dialog(sdPath);end函数:getDPI 获取屏幕 DPI 和像素密度(仅支持 Android)

函数名称:获取屏幕 DPI 和像素密度

支持版本:引擎版本 Android v2.0.3 以上

函数方法

dpi,density = getDPI();

返回值:dpi,density

返回值

类型

说明

dpi

number

屏幕密度(每寸像素:120/160/240/320)

density

number

屏幕密度(像素比例:0.75/1.0/1.5/2.0)

系统控制函数:setRotationLockEnable 锁定设备方向(仅支持 iOS)

函数名称:设备方向锁定

函数功能:用于设置是否开启手机的锁定方向功能

支持版本:引擎版本 iOS v2.3.9 以上

函数方法

setRotationLockEnable(逻辑型 flag);

返回值:无

参数

类型

说明

flag

boolean

打开方向锁定 - true;关闭方向锁定 - false

脚本实例:

setRotationLockEnable(true); --打开方向锁定setRotationLockEnable(false); --关闭方向锁定函数:setWifiEnable 无线开关

函数名称:无线开关

函数功能:用于设置是否打开无线开关

支持版本:引擎版本 iOS v1.0,Android v1.3.0以上

函数方法

setWifiEnable(flag);

返回值:无

参数

类型

说明

flag

boolean

打开 WiFi - true;关闭 WiFi - false

脚本实例:

setWifiEnable(true); --打开 WifisetWifiEnable(false); --关闭 Wifi函数:setBTEnable 蓝牙开关

函数名称:蓝牙开关

函数功能:用于设置是否打开蓝牙开关

支持版本:引擎版本 iOS v2.1.8,Android v1.3.0 以上

函数方法

setBTEnable(flag);

返回值:无

参数

类型

说明

flag

boolean

打开蓝牙 - true;关闭蓝牙 - false

脚本实例:

setBTEnable(true); --打开蓝牙setBTEnable(false); --关闭蓝牙函数:setAirplaneMode 飞行模式开关

函数名称:飞行模式开关

函数功能:用于设置是否打开飞行模式开关

支持版本:引擎版本 iOS v2.1.8,Android v2.0.2 以上

函数方法

setAirplaneMode(flag);

返回值:无

参数

类型

说明

flag

boolean

打开飞行模式 - true;关闭飞行模式 - false

脚本实例:

setAirplaneMode(true); --打开飞行模式setAirplaneMode(false); --关闭飞行模式函数:getVPNStatus 获取VPN状态

函数名称:获取 VPN 状态

函数功能:用于获取 VPN 当前连接状态并返回一个 table

支持版本:引擎版本 iOS v2.3.6,Android v2.0.5 以上

函数方法

flag = getVPNStatus();

返回值:flag

返回值

类型

说明

flag.active

boolean

true - 打开;false - 关闭

flag.status

string

连接状态本地化字符串,不同语言下字符串不同(仅支持 iOS)

脚本实例:

flag = getVPNStatus()if flag.active then dialog("打开状态"..flag.status)--flag.status 仅支持 iOS 系统else dialog("关闭状态"..flag.status)--flag.status 仅支持 iOS 系统end注意事项:

如系统中没有已经建立好 的VPN 连接,调用此函数将不会产生任何效果。

安卓没有 flag.status 字段。

函数:setVPNEnable VPN 开关(仅支持 iOS)

函数名称:VPN 开关

函数功能:用于设置是否打开系统 VPN 开关

支持版本:引擎版本 iOS v2.3.6 以上

函数方法

setVPNEnable(flag);

返回值:无

参数

类型

说明

flag

boolean

打开VPN默认连接 - true;关闭VPN默认连接 - false

注意事项:

如系统中没有已经建立好的 VPN 连接,调用此函数将不会产生任何效果。

函数:setCellularDataEnable 蜂窝网络开关(仅支持 iOS)

函数名称:蜂窝网络开关

函数功能:用于设置是否打开蜂窝网络开关

支持版本:引擎版本 iOS v2.3.6 以上

函数方法

setCellularDataEnable(flag);

返回值:无

参数

类型

说明

flag

boolean

打开蜂窝网络 - true;关闭蜂窝网络 - false

函数:setAssistiveTouchEnable 小圆点开关(仅支持 iOS)

函数名称:小圆点开关

函数功能:用于设置是否打开小圆点开关

支持版本:iOS 引擎版本 v2.3.9 以上

函数方法

setAssistiveTouchEnable(逻辑型 flag);

返回值:无

参数

类型

说明

flag

boolean

打开小圆点 - true;关闭小圆点 - false

函数:setReduceMotionEnable 减弱动效开关(仅支持 iOS)

函数名称:减弱动效开关

函数功能:用于设置是否打开减弱动画效果开关

支持版本:引擎版本 iOS v2.3.9 以上

函数方法

setReduceMotionEnable(flag);

返回值:无

参数

类型

说明

flag

boolean

打开减弱动画效果 - true;关闭减弱动画效果 - false

注意事项:

打开此开关对找色影响很大,请谨慎使用。

函数:getBacklightLevel 获取屏幕亮度

函数名称:获取屏幕亮度

函数功能:用于获取设备屏幕亮度值

支持版本:引擎版本 iOS v2.3.6,Android v2.0.6 以上

函数方法

light = getBacklightLevel();

返回值:level

返回值

类型

说明

light

number

获取到的屏幕亮度值,范围 0 - 1

函数:setBacklightLevel 设置屏幕亮度

函数名称:设置屏幕亮度

函数功能:用于设置设备屏幕亮度值

支持版本:引擎版本 iOS v2.3.6,Android v2.0.6 以上

函数方法

setBacklightLevel(数值型 light);

返回值:无

参数

类型

说明

light

数值型

要设置的屏幕亮度值,范围 0 - 1

函数:setVolumeLevel 设置设备音量

函数名称:设置设备音量

函数功能:设置设备音量大小

支持版本:引擎版本 iOS v2.3.6,Android v2.0.5 以上

函数方法

setVolumeLevel(vol);

返回值:无

参数

类型

说明

vol

number

要设置的设备音量,范围 0 - 1

注意事项:

此函数将同步改变系统中所有音量。

函数:vibrator 手机振动

函数名称:手机振动,震动

函数功能:使手机振动一次。

函数方法

vibrator();

返回值:无

函数实例:

警报

for var = 1,5 do vibrator(); --振动 mSleep(1000); --延迟 1 秒end注意事项:

频繁调用该函数可能会减少电池寿命,请谨慎使用。

使用此函数需在系统设置里打开震动选项。

函数:playAudio 播放音频

函数名称:播放音频

函数功能:在后台播放指定的声音文件。

函数方法

playAudio(filename);

返回值:无

参数

类型

说明

filename

string

音频文件名,支持 mp3、m4a、m4r、ogg、wav,iOS填写“”停止播放

脚本实例:

playAudio("test.mp3"); --播放 test.mp3mSleep(10000)playAudio(""); --iOS停止播放,Android参考stopAudio函数。注意事项:

音频文件路径请用 userPath 函数获取,自建目录请填写相对路径。

如音频放置在默认资源目录,参数中可直接填写文件名。

函数:stopAudio 停止播放 (仅Android)

函数名称:停止播放

函数功能:在后台停止指定的声音文件。

函数方法

stopAudio();

返回值:无

脚本实例:

playAudio("test.mp3"); --播放 test.mp3mSleep(10000)stopAudio(); --停止播放注意事项:

音频文件路径请用 userPath 函数获取,自建目录请填写相对路径。

如音频放置在默认资源目录,参数中可直接填写文件名。

脚本终止将直接导致音频播放终止,如音频文件较长,可使用 stopAudio 终止播放。

函数:lockDevice 锁定设备

函数名称:锁定设备

函数功能:锁定设备并关闭屏幕。

支持版本:引擎版本 iOS v1.0,Android v2.0.3以上

函数方法

lockDevice();

返回值:无

脚本实例:

结束并锁定设备

lockDevice(); lua_exit();注意事项:

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

函数:deviceIsLock 设备锁定状态

函数名称:设备锁定状态

函数功能:判断当前设备的屏幕锁定状态。

支持版本:引擎版本 iOS v1.0,Android v2.0.2以上

函数方法

flag = deviceIsLock();

返回值

类型

说明

flag

number

0 - 表示设备未锁定;非0 - 表示设备已锁定

脚本实例:

判断设备是否锁定

flag = deviceIsLock(); --如果要在设备自启动时解锁屏幕直接使用 unlockDevice 函数即可if flag == 0 then dialog("未锁定",3);else unlockDevice(); --解锁屏幕end注意事项:

unlockDevice 函数功能是解除当前设备屏幕锁定状态,具体使用方法参照对应章节。

以上实例配合定时启动脚本效果显著,需要注意的是,由于此函数无法在设备启动过程中正确判断,如果使用开机自启动功能时请勿直接复制此段代码,如果要在设备自启动时解锁屏幕直接使用 unlockDevice 函数即可。

安卓模拟器上此函数可能显示异常。

函数:unlockDevice 解锁设备

函数名称:解锁设备

函数功能:解除屏幕锁定状态。

支持版本:引擎版本 iOS v1.0,Android v2.0.3以上

安卓函数方法

unlockDevice();

iOS函数方法

unlockDevice(password);

参数

类型

说明

password

string

解锁密码,支持4位数字密码,多位数字密码和混合密码,仅支持 iOS v2.4.4 及以上版本

脚本实例:

解锁设备

flag = deviceIsLock(); --判断屏幕是否锁定if flag == 0 then dialog("未锁定",3);else unlockDevice(); --解锁屏幕end--开机自启动请勿使用此段代码,直接使用 unlockDevice 函数即可注意事项:

如您的设备设备了锁屏密码,则此函数仅能唤醒屏幕。

以上实例配合定时启动脚本效果显著,需要注意的是,由于此函数无法在设备启动过程中正确判断,如果使用开机自启动功能时请勿直接复制此段代码,如果要在设备自启动时解锁屏幕直接使用 unlockDevice 函数即可。

此函数仅支持 iOS7 以上系统。

iOS 10 及以上系统设备激活屏幕后需要按一下home键可解锁。

密码解锁功能仅支持iOS版触动 v2.4.4 及以上版本

函数:setAutoLockTime 设置锁屏时间

函数名称:设置锁屏时间

函数功能:设置自动锁屏时间

支持版本:引擎版本 iOS v1.0,Android v2.2.1以上

函数方法:

setAutoLockTime(tim)

参数

类型

说明

tim

number

iOS 系统:0到5,0是代表永不锁屏,1~5位锁屏时间,单位为分;安卓系统:单位为毫秒,设置为参数的最小近似值,具体情况根据手机不同结果不同。

脚本实例:

安卓设置锁屏时间

-- 设置无操作一分钟后锁屏setAutoLockTime(60*1000)-- 例如-- A手机系统选项是 1分钟 2分钟 10分钟 30分钟-- B手机系统选项是 1分钟 2分钟 3分钟 5分钟 10分钟 30分钟-- 那么如果设置90*1000(1.5分钟), 则A,B手机都是1分钟后自动锁屏-- 如果设置240*1000(4分钟), 则A手机是2分钟后自动锁屏,B手机是3分钟后自动锁屏函数:resetIDLETimer 重置锁屏计时

函数名称:重置锁屏计时

函数功能:重置系统空闲时间,阻止自动锁屏,保持屏幕常亮。

支持版本:引擎版本 iOS v1.0,Android v2.3.2.7 以上

函数方法

resetIDLETimer();

返回值:无

函数实例:

保持屏幕常亮

while true do mSleep(30 * 1000); --等待 30 秒 resetIDLETimer(); --重置锁屏计时end注意事项:

该函数可能会减少屏幕、电池寿命,请谨慎使用。

while true do ... end为死循环代码,一般不建议这样使用。除非强行终止运行,否则该脚本不会自动停止。

函数:setScreenResolution 修改分辨率(仅支持 iOS)

函数名称:修改分辨率

函数功能:强制更改设备分辨率

支持版本:引擎版本 iOS v2.2.1 以上,帮你玩平台禁用此函数

函数方法

setScreenResolution(string size);

返回值:无

参数

类型

说明

size

string

"640x960" "750x1334" "640x1136" "1125x2001" "1242x2208" "768x1024" "1536x2048" "default"

脚本实例:

setScreenResolution("640x960") --将当前设备分辨率更改为 640*960,开发者平台禁用此函数mSleep(10000)setScreenResolution("default") --恢复当前设备默认分辨率注意事项:

每次打开触动精灵客户端将会自动恢复当前设备的默认分辨率(可在更多中关闭此功能)。

开发者可合理利用此函数进行单设备多分辨率脚本适配开发,使用此函数修改分辨率后在实际应用中运行脚本可能会存在点击坐标偏差。

执行完此函数需要一些时间生效,如在脚本中使用,请在调用此函数后加入适当的延迟。

双击电源键可强制恢复默认分辨率(在脚本运行中或者录制过程中不可用)。

此函数仅支持 iOS8 以上设备 Retina 屏幕的设备(如:iPad2、iPad Mini)。

需要注意的是,如果您的设备是 iPhone6,在系统中将显示模式调整为放大,当前分辨率即为 640x1136,无需再次使用此函数调整分辨率为 640x1136。

不推荐将分辨率改为比本身设备默认更高的分辨率,可能会出现无法恢复默认分辨率的问题。

在iOS9以上版本中请勿使用此函数,会造成一些不可预料的结果。

如您的设备有锁屏密码,请勿使用此函数更改分辨率,会造成无法解锁设备的问题。

开发者平台禁用此函数。

警告

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

函数:clearKeyChain 清除钥匙串(仅支持 iOS)

函数名称:清除钥匙串

函数功能:清除指定应用储存在系统钥匙串中的信息。

函数方法

clearKeyChain(string bid);

返回值:无

参数

类型

说明

bid

string

需要清除的应用程序的 Bundle ID

脚本实例:

清除前台应用的钥匙串

clearKeyChain(frontAppBid());注意事项:

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

名词解析:

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

函数:saveImageToAlbum 图片存入相册

函数名称:图片存入相册

函数功能:将指定路径的图片文件写入系统相册。

支持版本:引擎版本 iOS v2.2.5,Android v2.0.5 以上

函数方法

saveImageToAlbum(path);

返回值:无

参数

类型

说明

path

string

需要写入系统相册的图片路径,支持绝对路径

脚本实例:

saveImageToAlbum(userPath().."/lua/1.png");saveImageToAlbum("2.png");注意事项:

图片的格式支持 bmp, jpg, png。

如不填写绝对路径时,将默认为文件系统 res 目录下的文件。

当脚本要上传到帮你玩、企业版和小精灵平台时,请使用 userPath 函数自动获取路径。

函数:saveVideoToAlbum 视频存入相册

函数名称:视频存入相册

函数功能:将指定路径的视频文件写入系统相册

支持版本:iOS v2.3.9 - 16 ,Android v2.2.3.7 以上

函数方法

saveVideoToAlbum(path);

返回值:无

参数

类型

说明

path

string

需要写入系统相册的视频路径,支持绝对路径

脚本实例:

saveVideoToAlbum(userPath().."/lua/1.mp4");saveVideoToAlbum("2.mp4");注意事项:

视频的格式支持 mp4, avi, mov。

如不填写绝对路径时,将默认为文件系统 res 目录下的文件。

当脚本要上传到帮你玩、企业版和小精灵平台时,请使用 userPath 函数自动获取路径。

如此函数不生效,可以尝试使用下面的方法写入视频

命令: 安卓视频存入相册

安卓系统设备可以使用命令将视频存入相册

更详细的说明请看→这里

示例1

path = userPath().."/res/1.mp4"os.execute("am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file://"..path) 函数:writePasteboard、readPasteboard 读写剪贴板

函数名称:读写剪贴板

函数功能:对系统剪贴板进行读写操作。

函数方法

writePasteboard(string string, number type);

返回值 无

string = readPasteboard();

返回值 string string

返回值、参数

类型

说明

string

string

写入或读出的剪贴板字符串

type

number

当 type 为 1 时,string参数为一个图片路径(仅支持引擎版本 iOS v2.3.6以上)

脚本实例:

从剪贴板中写出到编辑框

string = readPasteboard(); --读出剪贴板内容mSleep(500); --延迟 0.5 秒inputText(string); --写出字符串从文件中读入一行并储存到剪贴板

file = io.open(userPath().."/res/test.txt" ,"r"); --以只读方式打开文件if file then --如果打开成功 writePasteboard(file:read()); --储存到剪贴板else toast("Cannot open: test.txt",0);endfile:close(); --关闭文件iOS 系统:粘贴图片

writePasteboard("1.png",1)keyDown("RightGUI")keyDown("v")keyUp("v")keyUp("RightGUI")注意事项:

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

参数 type 仅支持引擎版本 iOS v2.3.6 以上。

当脚本要上传到帮你玩、企业版和小精灵平台时,请使用 userPath 函数自动获取路径。

函数:connectToWifi 连接 WiFi

函数名称:连接 WiFi

函数功能:自动连接指定 WiFi(暂不支持 iOS10 及其以上系统)

支持版本:引擎版本 iOS v2.4.4、Android v2.4.2 及其以上

注意事项:Android 版本的 type 参数仅支持 0 - 3,参数写为 4 及其以上数字时默认为 0 - 无密码

函数方法

connectToWifi(wifiname,password,type);

返回值:无

参数

类型

说明

wifiname

string

必填,WiFi 名称

password

string

必填,WiFi 密码

type

number

必填,WiFi 加密类型:0 - 无密码,1 - WEP,2 - WPA,3 - WPA2,4 - WPA 企业版,5 - WPA2 企业版,Android 仅支持 0 - 3

脚本实例:

connectToWifi("wifiname","password",1)回调函数函数:beforeUserExit 终止之前运行

函数名称:终止之前运行

函数功能:在用户主动终止脚本运行之前执行

支持版本:引擎版本 iOS v2.2.1,Android v1.1.9 以上

函数方法

beforeUserExit();

返回值:无

脚本实例:

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

function beforeUserExit() dialog("OK",0)endfor var = 1,30 do mSleep(1000) toast(var)end注意事项:

函数名必须为 beforeUserExit 才能够被识别,请勿在函数体中使用死循环,否则会造成脚本无法终止或其他不可预料的问题。

此函数可以被 lua_exit()、音量键停止、远程接口停止 触发。

iOS 设备上此函数必须在获取触动精灵授权后方可生效。

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

函数名称:本地光学字符识别

函数功能:将指定区域的图像转换为其显示出的文字。

函数方法

text = ocrText(x1, y1, x2, y2, language, list, flag);

返回值:text/array

参数

类型

说明

x1, y1

number

欲识别的区域左上角顶点屏幕坐标

x2, y2

number

欲识别的区域右下角顶点屏幕坐标

language

number

语言选择: 0 - 英文/数字; 1 - 中文 (特殊参数请看注意事项)

list

string

识别白名单,设置此参数后,不在白名单中的字符将被忽略

flag

boolean

选填,不填或者 flag=false 识别结果,flag=true 返回坐标,支持引擎 iOS 3.0.0-126 及 Android 以上版本

返回值

类型

说明

text

string

识别结果

array

table

坐标

返回值为 string 脚本实例:

-- 引擎版本 Android v1.3.0 之前的版本 language 参数 10 或 20 是英文识别, 非 10 或 20 是中文识别; -- Android v2.0 以上版本仅支持 0,1 2个参数,0 = 英文/数字,1 = 中文。-- OCR 英文识别,注意本函数仅对标准字体识别尚可,非标准字体请自行制作字库配合触动点阵识别函数效果更佳 recognize = ocrText(20, 120, 200, 140, 0);mSleep(1000); dialog("识别出的字符:"..recognize, 0);whitelist = "0123456789-"a = ocrText(92, 1390, 472, 1464, 10, whitelist, 1)dialog(a)返回 table 坐标脚本实例:

-- 创建一个全分辨率通用的浮动框 用来测试 ocrTextfwShowWnd("wid",0,0,300,300,1)fwShowTextView("wid","textid","abcd1234","center","ffffff","000000",20,0,0,0,300,300,1)mSleep(1000)-- 识别区域x,y,x1,y1 = 0, 100, 300, 300table = ocrText(x,y,x1,y1, 0,true)-- 识别结果text = "识别字符:"..table.text.."\ninfo长度:" .. #table.infofor var= 1, #table.info do text = text .. "\ninfo[" .. var .. "] x:" ..table.info[var].x+x .. " y:"..table.info[var].y+y .. " w:"..table.info[var].w+table.info[var].x+x .. " h:"..table.info[var].h+table.info[var].y+y .. " c:"..table.info[var].c .. " char:"..table.info[var].charenddialog(text)返回 table 坐标:

-- text 表示识别的字符串;-- info 包含一个每个识别符号的信息;-- x 代表相对识别完整图片的位置的左上角 x 坐标;-- y 代表相对识别完整图片的位置的左上角 y 坐标;-- w 代表识别符号的宽度;-- h 代表识别符号的高度;-- c 代表相似度;{ text = "ocr文字" info = { { x = 0, y= 1, w=5, h=10, c = "90.01", char="字符" } …. }}注意事项:

引擎版本 Android v1.3.0 之前的版本 language 参数为 10 或 20 时是英文识别,非 10 或 20 是中文识别

如果英文普通识别不了,可以尝试如下参数(不推荐使用):

0 - 普通识别 灰度二值化

10 - 普通识别 适用于部分存在干扰线背景的文字识别

20 - 适用于部分存在干扰线且深色背景的文字识别

21 - 适用于部分深色背景的文字识别

Android v2.0 以上版本仅支持 0 和1 两个参数,0 = 英文/数字,1 = 中文。

引擎版本 iOS v2.2.7-3,Android v1.3.0 以上中已集成英文字库,直接调用即可。

白名单参数需引擎版本 iOS v2.2.7-3,Android v1.3.0 以上支持。

OCR 中文识别库下载地址:chi_sim.traineddata

OCR 英文数字识别库下载地址:eng.traineddata

如需使用中文字库,iOS 系统请将中文字库文件移至手机目录 /Applications/TouchSprite.app/tessdata,同时支持在 res 目录下 tessdata目录中放置字库文件,但程序会先搜索 /Applications/TouchSprite.app/tessdata中的文件,再到 res 目录下搜索,Android 系统移至/sdcard/TouchSprite/res/tessdata 方可正常使用。

该函数对非正规字体及有干扰的情况下识别效果不佳,推荐用来识别背景色相对单一的英文及数字。

函数:addTSOcrDict、addTSOcrDictEx、tsOcrText、tsFindText 触动点阵识别

函数名称:触动点阵识别

函数功能:加载自定义的触动精灵点阵字库工具生成的点阵字库识别屏幕上的文字。

支持版本:引擎版本 iOS v2.3.9,Android v2.2.1 以上

函数方法

index = addTSOcrDict(dict);

index = addTSOcrDictEx(dict);

返回值:index

ret = tsOcrText(index, x1, y1, x2, y2, "c0,c1",alpha)

返回值:string ret

x, y = tsFindText(index, str, x1 , y1 , x2 , y2 , "c0,c1" , alpha )

返回值:number x y

参数

类型

说明

dict

string

字库名,如:dict.txt 由触动精灵点阵字库工具生成,需放置于触动精灵 res 目录

index

number

字库标识,由 addTSOcrDict 函数返回值生成

x1, y1

number

欲识别的区域左上角顶点屏幕坐标

x2, y2

number

欲识别的区域右下角顶点屏幕坐标

c0, c1

string

偏色范围,由触动精灵点阵字库工具中获取,需要与制作字库时所设值保持一致,多组偏色用#分割

alpha

number

精确度,范围 0 - 100

str

string

想要查找的字符串

返回值

类型

说明

index

number

字库标识,由 addTSOcrDict 函数返回值生成,tsOcrText 第一个参数需要用到此值

ret

string

返回的识别结果

x, y

number

找到的字符串坐标(字符串左上角点),如未找到则返回 -1,-1

脚本实例:

1. 识别屏幕指定区域内的文字

--相同字库只需要加载一次,重复加载会导致内存溢出index = addTSOcrDict("dict.txt")ret = tsOcrText(index,962,19,1068,54,"FFFFFF,000000",90)toast(ret)

在屏幕上查找指定文字的坐标

--相同字库只需要加载一次,重复加载会导致内存溢出index = addTSOcrDict("dict.txt")--在屏幕上找"弓"字的坐标x, y = tsFindText(index,"弓",35, 226, 385, 264,"fffbff,737573#FFFFFF,000000",90) --两组偏色toast(x..","..y)

在屏幕上查找指定文字的坐标(table 格式)

local tab = {"00ffffe03ffffff1fffffff3ffffffefffffffffffe03fdfff001f9e7e001f00fc003e01f800fc01f001f803e003e0078007c00f000f0000000c00000000001fff001fffffe1ffffffe7ffffffefffffffffffffffffff003ffffe003f78fc003e01f8007c03f000f807c001f00f8003e01f0007c03e000f007c003e007000380000006@00$比$547$34$31"}--加载文字点阵字库,相同字库只需要加载一次,重复加载会导致内存溢出local indext = addTSOcrDictEx(tab) local ret = tsOcrText(indext, 0, 0, 640, 1136, "D9762D , 050901", 90)注意事项:

触动精灵字库工具下载地址和使用手册:https://www.zybuluo.com/miniknife/note/629179

本函数为打码点阵识别加强版,突破大漠工具最高识别 11 行像素的限制,更适合高分辨率的移动端脚本开发。

相同字库只需要加载一次,重复加载会导致内存溢出

函数:addDmOcrDict、dmOcrText、dmFindText 打码点阵识别

函数名称:打码点阵识别

函数功能:加载自定义的大漠工具生成的点阵字库识别屏幕上的文字。

支持版本:引擎版本 iOS v2.2.4,Android v1.2.8 以上

函数方法

index = addDmOcrDict(string dict);

index = addDmOcrDictEx( 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

string

字库名,如:dict.txt 由大漠工具生成,需放置于触动精灵 res 目录

index

number

字库标识,由 addDmOcrDict 函数返回值生成

x1, y1

number

欲识别的区域左上角顶点屏幕坐标

x2, y2

number

欲识别的区域右下角顶点屏幕坐标

c0, c1

string

偏色范围,由大漠工具中获取,需要与制作字库时所设值保持一致,多组偏色用#分割

alpha

number

精确度,范围 0 - 100

str

string

想要查找的字符串

返回值

类型

说明

index

number

字库标识,由 addDmOcrDict 函数返回值生成,dmOcrText 第一个参数需要用到此值

ret

string

返回的识别结果

x, y

number

找到的字符串坐标(字符串左上角点),如未找到则返回 -1,-1

脚本实例:

--由于大漠工具的 11 行像素限制,对于较大文字识别效率不高,推荐使用触动字库工具配合触动文字识别函数使用效果更佳--相同字库只需要加载一次,重复加载会导致内存溢出index = addDmOcrDict("dict.txt")ret = dmOcrText(index,962,19,1068,54,"FFFFFF,000000",90)toast(ret)--相同字库只需要加载一次,重复加载会导致内存溢出index = addDmOcrDict("dict.txt")--在屏幕上找"弓"字的坐标x, y = dmFindText(index,"弓",35, 226, 385, 264,"fffbff,737573#FFFFFF,000000",90) --两组偏色toast(x..","..y)注意事项:

该函数完全兼容大漠字库格式,字库由大漠工具生成,由于大漠工具的 11 行像素限制,对于较大文字识别效率不高;

字库文件必须放置于触动精灵的 res 目录,加载字库时无需填写绝对路径;

生成的字库文件格式必须为 UTF-8 格式,字库首尾不能包含空行、空格等;

使用 dmFindText 函数需引擎版本 iOS v2.2.4,Android v1.2.8 以上支持;

触动精灵 iOS V2.2.7-3 以上客户端方可使用 addDmOcrDictEx 函数加载 table 格式字库。

大漠工具下载地址:http://pan.baidu.com/s/1nvybZG9;偏色计算器下载地址:https://pan.baidu.com/s/17AXHso-nBNkBGcW-W0fpCg 密码:qi8o

大漠点阵字库制作使用教程:https://www.zybuluo.com/lisaisacat/note/324664#大漠点阵字库制作和应用

相同字库只需要加载一次,重复加载会导致内存溢出

触动相关函数:deviceIsAuth 获取触动精灵授权状态(仅支持 iOS)

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

函数功能:检测当前设备使用的触动精灵客户端是否已经授权。

支持版本:帮你玩平台禁用此函数

函数方法

auth = deviceIsAuth();

返回值:auth

返回值

类型

说明

auth

number

0 - 当前设备未授权,有单次30分钟的运行限制;1 - 当前设备已授权,无任何限制

脚本实例:

auth = deviceIsAuth(); --帮你玩平台禁用此函数if auth ~= 0 then dialog("您的触动精灵客户端已授权",0)end注意事项:

帮你玩开平台禁用此函数

函数:getRunningAccess 获取当前脚本运行权限(仅支持 Android)

函数名称:获取当前脚本运行权限

函数功能:获取当前脚本运行权限,防止相同设备号脚本同时运行。

支持版本:引擎版本 Android v2.1.6 以上

函数方法

ret = getRunningAccess();

返回值:ret

返回值

类型

说明

ret

number

0表示没有相同设备号设备在运行,1表示有其他相同设备号设备在运行,-1表示频繁请求,-2表示不是tsp脚本,-3表示获取权限失败。

脚本实例:

local t1 = os.time()function MyGetRunningAccess(...) t2 = os.time() -- 每五分钟判断一次 if t2 - t1 >= 5*60 then t1 = os.time() -- 如果返回值为1 则有相同设备号脚本在运行 停止当前脚本 if getRunningAccess() == 1 then lua_exit() end endendwhile (true) do MyGetRunningAccess()end注意事项

5分钟内只允许判断一次,不要频繁调用影响效率

可以直接复制脚本示例代码使用。

函数:userPath 获取客户端文件路径

函数名称:获取客户端文件路径

函数功能:获取触动精灵、帮你玩脚本商城、企业版、小精灵客户端的用户路径。

函数方法

path = userPath();

返回值:path

返回值

类型

说明

path

string

获取触动精灵、帮你玩脚本商城、企业版、小精灵客户端的用户路径

脚本实例:

path = userPath();path = path.."/script/gameCFG.txt" --设置一个在帮你玩客户端中可保存的文件路径注意事项:

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

触动精灵、帮你玩、小精灵的插件目录、日志目录、资源目录都将生成在此路径下,分别对应 plugin、log、res ,如需在脚本中使用以上目录,请在获取到的字符串后自行拼接。

帮你玩脚本商城脚本目录为 /script,其他客户端的脚本目录为 /lua.

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

函数名称:检测触动产品类型

函数功能:用于判断当前运行的触动产品类型。

支持版本:iOS 引擎版本 v2.3.2,Android v2.0.3 以上

函数方法

ret = whoAmI();

返回值:ret

返回值

类型

说明

ret

number

0 - 触动精灵;1 - 帮你玩;2 - 企业版;3 - 小精灵

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

函数名称:显示、隐藏悬浮条

函数功能:控制浮动按钮显示或者隐藏。

支持版本:iOS 引擎版本 v2.2.7,Android v1.3.0 以上(暂不支持企业版)

函数方法

showFloatButton(flag);

返回值:无

参数

类型

说明

flag

boolean

true - 显示悬浮按钮,false - 隐藏悬浮按钮

命令: 强制重启触动服务

以下方法可以强制重启触动服务,不推荐频繁调用。

--重启触动服务function reservice()--帮你玩平台禁用此函数 os.exit();endThread 协程

本类下所有函数都需要引擎版本 iOS v2.3.9,Android v2.3.4 以上支持。

函数:thread.create 创建协程

函数名称:创建协程

函数功能:创建一个协程

支持版本:iOS v2.3.9,Android v2.3.4 以上

函数方法

tid = thread.create(task,back)

返回值:tid

参数

类型

说明

task

funtion

将该函数加入队列

back

table

选填,错误回调,当执行任务时发生错误异常,则会回调这个函数并不再抛出

返回值

类型

说明

tid

number

协程id,id 可用于结束或是等待一个任务

函数实例:

local thread = require('thread')--处理协程的错误local thread_id = thread.create(function() mSleep(1000) --故意制造的错误 --a() --抛出异常 thread.throw("协程抛出异常") return 100end,{ callBack = function() --协程结束会调用,不论是错误、异常、正常结束 dialog("协程结束了", 0) end, errorBack = function(err) --协程错误结束,一般是引用空调用,err是字符串 dialog("协程错误了:"..err,0) end, catchBack = function(exp) --协程异常结束,异常是脚本调用了throw激发的,exp是table,exp.message是异常原因 local ts = require('ts') local cjson = ts.json dialog("协程异常了\n"..cjson.encode(exp),0) end})thread.waitAllThreadExit()--等待所有协程结束,只能用于主线程函数:thread.createSubThread 创建子协程

函数名称:创建子协程

函数功能:在协程中创建一个子协程,关闭协程可自动把里面的子协程全关闭

支持版本:iOS v2.3.9,Android v2.3.4 以上

函数方法

函数方法

tid = thread.createSubThread(task,back)

返回值: tid

参数

类型

说明

task

funtion

将该函数加入队列

back

table

选填,错误回调,当执行任务时发生错误异常,则会回调这个函数并不再抛出

返回值

类型

说明

tid

number

协程id,id 可用于结束或是等待一个任务

函数实例:

--子协程会在协程停止后,自动停止local thread = require('thread')local thread_id = thread.create(function() --创建子协程 local sub_thread_id_1 = thread.createSubThread(function() mSleep(3000) --因为sub thread 1比parent thread运行时间短,所以以下代码会被执行 toast("sub thread 1 over",3) end) local sub_thread_id_2 = thread.createSubThread(function() --创建子协程的子协程 local sub_thread_2_sub_thread_1 = thread.createSubThread(function() mSleep(1000) toast("sub thread 2,sub thread 1 over",3) end) mSleep(6000) --因为sub thread 2比parent thread运行时间长,所以以下代码实际执行不到 toast("sub thread 2 over",3) end) mSleep(4000) toast("parent thread over",3)end)thread.waitAllThreadExit()--等待所有协程结束,只能用于主线程函数:thread.stop 停止协程队列

函数名称:停止协程队列

函数功能:停止一个协程队列,如果协程中有子协程,一并结束

支持版本:iOS v2.3.9,Android v2.3.4 以上

函数用法:

thread.stop(tid)

返回值:无

参数

类型

说明

tid

number

协程id,id 可用于结束或是等待一个任务

函数用例:

local thread = require('thread')local thread_id1 = thread.create(function() for i=1,10 do toast("协程1:".. i) mSleep(1200) endend)local thread_id2 = thread.create(function() for i=1,10 do toast("协程2:".. i) mSleep(2000) endend)mSleep(5000)thread.stop(thread_id1)--关闭协程1thread.waitAllThreadExit()--等待所有协程结束,只能用于主线程函数:thread.wait 阻塞等待当前协程完成

函数名称:阻塞等待当前协程完成

函数功能:阻塞并等待当前协程完成

支持版本:iOS v2.3.9,Android v2.3.4 以上

函数用法

ok,ret = thread.wait(tid)

返回值:逻辑型 ok,表格型 ret

参数

类型

说明

tid

number

协程ID

back

table

选填,错误回调,当执行任务时发生错误异常,则会回调这个函数并不再抛出

返回值

类型

说明

ok

boolean

成功返回true,失败返回false

ret

table

正确无返回,错误返回错误信息

函数用例:

local thread = require('thread')local thread_id = thread.create(function() mSleep(1000) return 100end)local ok,ret = thread.wait(thread_id)if ok then --正常结束,ret是协程函数的返回值,这里ret=100 toast("wait ok,ret is "..ret)else --这里不会被执行 local ts = require('ts') local cjson = ts.json toast("wait thread fail:"..cjson.encode(ret))end函数:thread.setTimeout 设置协程超时时间

函数名称:设置协程超时时间

函数功能:设置协程超时时间,结束协程

支持版本:iOS v2.3.9,Android v2.3.4 以上

函数用法

thread.setTimeout(timeout,thread_id)

返回值:无

参数

类型

说明

timeout

number

超时时间

thread_id

number

协程ID,如果在协程内,参数省略

函数:thread.clearTimeout 清除协程超时时间

函数名称:清除协程超时时间

函数功能:清除协程超时时间

支持版本:iOS v2.3.9,Android v2.3.4 以上

函数用法

thread.clearTimeout(thread_id)

返回值:无

参数

类型

说明

thread_id

number

协程 ID,如果在协程内,参数省略

函数用例:

thread = require("thread")local thread_id = thread.create(function() thread.setTimeout(2000) mSleep(1000) toast("thread step 1") mSleep(2000) toast("thread step 2") mSleep(3000) --设置有超时,执行不到这了,会调用catchBack toast("thread over")end,{ callBack = function() --协程结束会调用,不论是错误、异常、正常结束 -- toast("我结束了") end, catchBack = function(exp) --协程异常结束,异常是脚本调用了throw激发的,exp是table,exp.message是异常原因 local ts = require('ts') local cjson = ts.json toast("我异常了"..cjson.encode(exp)) end})mSleep(1000)thread.clearTimeout(thread_id)mSleep(2000)thread.setTimeout(1000,thread_id)--等待所有协程结束thread.waitAllThreadExit()函数:thread.waitAllThreadExit 协程阻塞等待

函数名称:协程阻塞等待

函数功能:阻塞等待所有协程结束,只能在主线程中使用

支持版本:iOS v2.3.9,Android v2.3.4 以上

函数方法

thread.waitAllThreadExit()

注意事项:

因为主线程结束了协程会全部结束,所以使用该函数可以等待协程都结束再退出

浮动窗口函数功能:创建一个可控制浮动窗口并显示动态内容。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数:fwShowWnd 显示浮动窗口

函数功能:显示浮动窗口载体,用于加载视图。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数方法

fwShowWnd(wid, x1,y1,x2,y2,type);

返回值:无

参数

类型

说明

wid

string

用于指定创建窗口的ID

x1,y1

number

窗口左上角顶点坐标

x2,y2

number

窗口右下角顶点坐标

type

number

1 - 窗口可移动;0 - 窗口不可移动

脚本实例:

fwShowWnd("wid",0,0,200,200,1) --显示一个可移动的窗口并指定窗口ID为 wid注意事项:

1.可同时创建多个浮动窗口。

2.此为浮动窗口初始化函数,创建浮动窗口必须调用此函数

函数:fwShowTextView 显示文字视图

函数功能:显示自定义的文字内容。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数方法

fwShowTextView(wid, vid, text, align, textcolor, backgroundcolor, size, type,x1,y1, x2,y2, alpha);

返回值:无

参数

类型

说明

wid

string

用于指定窗口载体的ID

vid

string

用于指定一个文字视图ID

text

string

需要显示的文字内容

align

string

对齐方式,left - 左对齐;right - 右对齐;cente - 居中

textcolor

string

文字颜色16进制值,填空字符串默认为黑色

backgroundcolor

string

视图背景色16进制值,填空字符串默认为透明

size

number

文字大小,填 0 默认值为15

type

number

文字类型,0-标准;1-粗体

x1,y1

number

窗口左上角顶点坐标

x2,y2

number

窗口右下角顶点坐标

alpha

number

选填参数,背景色透明度 0 - 1,默认为1

脚本实例:

fwShowWnd("wid",0,0,200,100,1)fwShowTextView("wid","textid","这是一个文本视图","center","FF0000","FFDAB9",20,0,0,0,200,100,0.5)--显示一个文字视图mSleep(500)注意事项:

如需要刷新文本内容,重新调用函数即可。

视图坐标相对于窗口顶点 (0,0)。

透明度只针对背景颜色,文字不受影响。

函数:fwShowImageView 显示图形视图

函数功能:显示图片,用以填充选定范围。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数方法

fwShowImageView(wid, vid, picpath, x1,y1, x2,y2, alpha);

返回值:无

参数

类型

说明

wid

string

用于指定窗口载体的ID

vid

string

用于指定一个图形视图ID

picpath

string

需要显示的图片的路径,支持绝对路径、网络地址

x1,y1

number

窗口左上角顶点坐标

x2,y2

number

窗口右下角顶点坐标

alpha

number

选填参数,透明度 0 - 1,默认为1

脚本实例:

fwShowWnd("wid",0,0,200,100,1)snapshot("1.png",400,400,600,500)fwShowImageView("wid","picid","1.png",0,100,200,200) --显示一个图片视图mSleep(500)注意事项:

如需要刷新图形,重新调用函数即可。

视图坐标相对于窗口顶点 (0,0)。

函数:fwCloseView 关闭视图

函数功能:关闭已经创建的视图。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数方法

fwCloseView(string wid, string vid);

返回值:无

参数

类型

说明

wid

string

需要关闭的窗口载体的ID

vid

string

需要关闭的视图ID

脚本实例:

fwCloseView("wid","textid") --关闭文字视图注意事项:

如需要关闭所有视图,直接使用 fwCloseWnd 函数关闭窗口即可。

函数:fwCloseWnd 关闭窗口

函数功能:关闭已经创建的窗口载体。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数方法

fwCloseWnd(string wid);

返回值:无

参数

类型

说明

wid

string

需要关闭的窗口载体的ID

脚本实例:

fwCloseWnd("wid") --关闭窗口注意事项:

当使用此函数关闭窗口时,所有此窗口内的视图会同时关闭。

函数:fwGetWndPos 获取窗口位置

函数功能:获取已创建窗口的位置。

支持版本:引擎版本 iOS v2.3.5,Android v2.0.3 以上

函数方法

wndTab = fwGetWndPos(string wid);

返回值:wndTab

参数

类型

说明

wid

string

需要关闭的窗口载体的ID

返回值

类型

说明

wndTab.ret

number

0 - 失败;1 - 成功

wndTab.x,wndTab.y

number

窗口左上角定点坐标

wndTab.x1,wndTab.y1

number

窗口右下角定点坐标

脚本实例:

wndTab = fwGetWndPos("wid")dialog("窗口获取状态:"..wndTab.ret.."\n".."左上角坐标:"..wndTab.x..","..wndTab.y.."\n".."右下角坐标:"..wndTab.x1..","..wndTab.y1, 2)注意事项:

如果该窗口不存在,会返回 0。

函数:fwShowButton 显示一个按钮

函数功能:定义并显示一个按钮,用于创建点击事件。

支持版本:引擎版本 iOS v2.3.7,Android v2.1.1 以上

函数方法

fwShowButton(wid, vid, text, textcolor, bgcolor, image, size, x1, y1, x2,y2);

返回值:无

参数

类型

说明

wid

string

用于指定窗口载体的ID

vid

string

用于指定一个按钮ID

text

string

需要显示的文字内容

textcolor

string

文字颜色16进制值,填空字符串默认为黑色

bgcolor

string

视图背景色16进制值,填空字符串默认为透明

image

string

需要显示的图片路径,支持绝对路径

size

number

文字大小,填 0 默认值为13

x1,y1

number

窗口左上角顶点坐标

x2,y2

number

窗口右下角顶点坐标

函数:fwGetPressedButton 获取按钮点击事件

函数功能:用于获取点击按钮事件。

支持版本:引擎版本 iOS v2.3.7,Android v2.1.1 以上

函数方法

vid = fwGetPressedButton();

返回值:点击则返回显示按钮的ID

返回值

类型

说明

vid

string

返回显示按钮的ID

脚本实例:

local num = 0fwShowWnd("wid",100,100,500,500,1)fwShowTextView("wid","id1","点击:" .. num,"center","FF0000","FFDAB9",15,0,0,0,200,100)fwShowTextView("wid","id2","闪","center","FFFFFF","0000FF",15,0,300,0,400,100)fwShowWnd("wida",300,300,500,500,1)fwShowButton("wida","vid","点我","FFFFFF","FF0000","",15,0,0,100,100)while (true) do local vid = fwGetPressedButton() if vid == "vid" then num = num + 1 fwShowTextView("wid","id1","点击:" .. num,"center","FF0000","FFDAB9",15,0,0,0,200,100) if num%2 == 0 then fwShowTextView("wid","id2","闪","center","FFFFFF","0000FF",15,0,300,0,400,100) else fwCloseView("wid","id2") end endend注意事项:

不能拖动按钮控件,只能拖动非按钮控件或主控件

完整实例init(0)toast("创建一个可移动的窗口")fwShowWnd("wid",0,0,200,200,1) --创建一个可移动的窗口mSleep(2000)toast("加载文字")fwShowTextView("wid","id1","这是一个文本视图","center","FF0000","FFDAB9",15,0,0,0,200,100,0.5)mSleep(2000)toast("加载一个截图")snapshot("1.png",400,400,600,500)fwShowImageView("wid","id2","1.png",0,100,200,200)mSleep(2000)toast("随便移动窗口,5 秒后继续")mSleep(5000)tab=fwGetWndPos("wid")dialog("窗口获取状态:"..tab.ret.."\n".."左上角坐标:"..tab.x..","..tab.y.."\n".."右下角坐标:"..tab.x1..","..tab.y1, 2)mSleep(2000)toast("关闭文字视图")fwCloseView("wid","id1") --关闭文字视图mSleep(2000)toast("关闭窗口")fwCloseWnd("wid")脚本 UI简介:

UI即User Interface,在触动上指界面的样式,通过各种控件和样式组合,可以实现设置页面,信息展示等等丰富的功能。触动精灵提供三种方式供开发者方便、快捷的编写UI:

showUI显示一个json自定义界面

WebView(网络视图)加载显示网页

使用TSLib扩展库中的便捷UI函数

showUI

函数名称:配置界面,脚本 UI

函数功能:显示一个自定义的界面,用来接收用户相关的自定义配置。

函数方法

ret, input_1, input_2, ... = showUI(string);

返回值:number ret, string input_(*)

参数

类型

说明

ui_json

string

自定义界面json格式字符串调用时字符串需经过压缩与转义

返回值

类型

说明

ret

number

1 - 确认输入;0 - 取消输入

input_(*)

string

返回用户输入的多项数据

什么是 jsonjson 就是一串字符串,在该函数中,我们用它来创建界面上的一系列会使用特定的符号标注的元素:

{} 双括号表示对象

[] 中括号表示数组

"" 双引号内是属性或值

: 冒号表示后者是前者的值

所以 {"name": "Michael"} 可以理解为是一个包含 name 为 Michael 的对象,而 [{"name": "Michael"},{"name": "Jerry"}] 就表示包含两个对象的数组。

当然了,你也可以使用 {"name":["Michael","Jerry"]} 来简化上面一部分,这是一个拥有 name 数组的对象。

不管是键或string的值都要用双引号引起来,所以上面的代码就是 {"name":"json"}。

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

--[[ret, input_1, input_2, ... = showUI("");]]ret, input_1, input_2, input_3 = showUI("{\"style\":".."\"default\",\"views\":[{\"type\":\"Label\",\"text\":".."\"settings\",\"size\":25,\"align\":\"center\",\"color\":".."\"0,0,255\"},{\"type\":\"RadioGroup\",\"list\":".."\"option1,option2,option3,option4,option5,option6,option7\",".."\"select\":\"1\"},{\"type\":\"Edit\",\"prompt\":\"Test\",".."\"text\":\"Custom Text\",\"size\":15,\"align\":\"left\",".."\"color\":\"255,0,0\"},{\"type\":\"CheckBoxGroup\",\"list\":".."\"option1,option2,option3,option4,option5,option6,option7\",".."\"select\":\"3@5\"}]}");json 在线校验格式化、压缩转义工具:http://www.bejson.com/

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

w,h = getScreenSize();--此段代码仅供演示用,不可复制粘贴直接运行MyJsonString = [[{ "style": "default", "width": ]]..w..[[, "height": ]]..h..[[, "config": "save_111.dat", "timer": 10, "views": [ { "type": "Label", "text": "设置", "size": 25, "align": "center", "color": "0,0,255" }, { "type": "RadioGroup", "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7", "select": "1" }, { "type": "Edit", "prompt": "测试三下", "text": "默认值", "size": 15, "align": "left", "color": "255,0,0" }, { "type": "CheckBoxGroup", "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7", "select": "3@5" } ]}]]ret, input1, input2, input3 = showUI(MyJsonString);在上面的例子中可以看到"width"和"height"的值我们使用了变量 w,h 这两个变量具体数值由 getScreenSize() 函数提供,这样我们实现了UI界面自动适应屏幕大小,需要在UI中使用动态数据的时候我们还可以使用table的方式来进行构造,这样使用变量的时候可以更加顺手,例如:

local ts = require("ts")local cjson = ts.jsonlocal w,h = getScreenSize();MyTable = { ["style"] = "default", ["width"] = w, ["height"] = h, ["config"] = "save_001.dat", ["timer"] = 10, views = { { ["type"] = "Label", ["text"] = "设置", ["size"] = 25, ["align"] = "center", ["color"] = "0,0,255", }, { ["type"] = "RadioGroup", --单选框,input1 ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",--7个单选项,序号从0开始,即选项1编号为0,选项2编号为1,依此类推 ["select"] = "1", --默认选择选项2 }, { ["type"] = "Edit", --输入框,input2 ["prompt"] = "请输入一个数字",--编辑框中无任何内容时显示的底色文本 ["text"] = "默认值", --界面载入时已经存在于编辑框中的文本 }, { ["type"] = "CheckBoxGroup", --多选框,input3 ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",--7个多选项 ["select"] = "3@5", --默认选择选项3和选项5 }, { ["type"] = "ComboBox", --下拉框,input4 ["list"] = "选项1,选项2,选项3,选项4,选项5,选项6,选项7",--7个下拉选项,序号从0开始,即选项1编号为0,选项2编号为1,依此类推 ["select"] = "1", --默认选择选项2 }, }}local MyJsonString = cjson.encode(MyTable);ret, input1, input2, input3, input4 = showUI(MyJsonString);--返回值ret, input1, input2, input3, input4

以上实例中将table转为JSON需要借助 ts 扩展库实现。

最下面返回值的数量应与代码中的非标签空间总数数量保持一致,否则会造成后面的非标签控件返回值无效。

更多用法可以参考这里:一个包含所有控件的UI实例

用 json 创建界面上面是调用的例子,但是我们首先我们要设计一个界面,并生成一段json字符串,再进行压缩转义。

我们先看上图界面示例json原来的样子(非脚本代码,不可直接引用),再作解释:

{--此示例仅供演示作用,不可复制粘贴直接运行"style": "default", "config": "save_111.dat", "width": 400,"height": 120, "bg": "a.png", "timer": 10, "cancelname": "取消", "okname": "开始","views": [{"type": "Label","text": "设置","size": 25, "align": "center","color": "0,0,255"},{"type": "RadioGroup","list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7","select": "1"},{"type": "Edit","prompt": "测试三下","text": "默认值","size": 15, "align": "left","color": "255,0,0"},{"type": "CheckBoxGroup","list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7","select": "3@5"},{ "type": "ComboBox", "list": "选项1,选项2,选项3,选项4,选项5,选项6,选项7", "select": "1"},{"type": "Image","src": "http://www.baidu.com/img/bdlogo.png"}]}创建一个界面,需要包含 style 与 views 两个主键。

style 表示界面样式,views 数组则包含了界面上的控件。

全局属性

参数

类型

说明

style 样式

string

指定界面样式default为默认样式,所有控件自动排列,每个控件占据一行。 custom为自定义样式,当界面样式被指定为这种,则必须指定每个控件的 rect 属性以调整控件的尺寸以及位置

width 宽度

number

界面的宽度(像素 pixels),不得低于 400

height 高度

number

界面的高度(像素 pixels),不得低于 120

bg 背景图片

string

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

okname 确认

string

指定底部右侧确认按钮上显示的文字

cancelname 取消

string

指定底部左侧取消按钮上显示的文字

title 标题

string

用于指定UI顶部标题栏文字仅 iOS v2.2.5,Android v1.2.4 以上版本支持

titles 多页标题

string

用于指定UI顶部标题栏文字在多页模式下可以设置多个标题对应多个页面,以逗号分隔仅 iOS v2.3.2,Android v2.2.7以上版本支持

pagetype 多页模式

number

当指定该属性值为 multi 时,UI可分页显示,左右滑动进行翻页,如不指定该属性,将使用默认的单页模式仅 iOS v2.2.5,Android v2.1.5以上版本支持

selpage 多页模式默认停留

number

多页模式下指定默认停留的页面仅引擎版本 iOS V2.2.7 及以上版本支持

orient 方向

number

指定 UI 界面显示方向0-Home键在设备下方1-Home键在设备右侧2-Home键在设备左侧仅 iOS v2.2.5以上版本支持

btnbkcolor 底部按钮背景色

string

使用 RGB 十进制数值,以英文半角逗号分割仅 iOS v2.3.5 以上版本支持

bgcolor 界面背景色

string

使用 RGB 十进制数值,以英文半角逗号分割仅 iOS v2.3.5 以上版本支持

pagenumtype 分页指示样式

string

dot - 小圆点number - 数字default - 不显示仅 iOS v2.3.5 ,Android v1.3.0 以上版本支持

config 配置保存文件名

string

保存配置到该文件

timer 自动确认时间

number

倒计时完成自动开始

rettype 指定返回值类型

string

default - 默认模式,保持旧版格式,可使用此属性兼容旧版UIarray - 数组模式,将所有控件返回值按添加顺序放入一个table中并返回table - table模式,将所有控件返回值以 key,values 形式的table返回,key为控件id属性所指定的值仅 iOS v2.2.6,Android v1.2.7 及以上版本支持

注意事项:

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

如果配置文件已存在,调用该界面会自动载入该文件中的配置,如果更新了UI代码后必须要删除旧的配置文件才会正常显示。

使用 timer 属性必须要设定 config 属性,第一次存储配置文件不存在时,此属性不生效,当配置文件存在时,此属性会在生成UI上进行倒计时。

在脚本UI界面点击闹钟标志则取消倒计时功能。

控件通用属性

参数

功能

类型

说明

width

控件宽度

number

选填,默认为 showUI 宽度,当 showUI 全局属性 style 为 default 时,如需将多个控件放入同一行显示,可用此属性调整控件宽度。仅 iOS v2.2.6,Android v1.2.4 及以上版本支持

nowrap

指定下一个控件是否换行

number

选填,当此属性为 1 时,将指定下一个控件不换行,用于将多个控件放入一行显示。不写控件宽度下个插件会在屏幕外显示。仅 iOS v2.2.6,Android v1.2.5 及以上版本支持

id

控件 ID

string

选填,为控件指定 ID,可以理解为控件的名称,在返回类型为table时将作为返回 table 中的 key

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

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

参数

功能

类型

说明

size

字体大小

number

选填,如果不指定该属性,则默认值为 15

text

标题

string

必填,一般来用显示说明文字或者标题,该控件没有任何返回值,只用作显示

align

对齐方式

string

选填,默认左对齐。可取值为:左对齐 left,右对齐 right,居中 center

color

字体颜色

string

选填,默认黑色。使用RGB十进制数值,以英文半角逗号分割

注意事项:

标签可支持多行显示,在字符串中插入 \n 可以进行换行,例如:\"测试\n测试 1\n测试 2\"(安卓系统 \n 需写成 \r\n)

文字颜色尽量选择和背景区别较大、在电子设备屏幕上看起来不刺眼的颜色,具体可参考配色网。

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

参数

功能

类型

说明

list

可选项标题

string

必填,多个可选项之间用英文半角逗号分割

select

默认选中项编号

string

必填,只允许填写一个,序号从 0 开始,与可选项标题中的顺序保持一致

images

在可选项上显示图片

string

选填,此属性可单独使用也可以和 list 属性同时使用,多个图片资源用英文半角逗号分割

scale

选项图片缩放

number

当images属性有效时可用此属性设置图片资源缩放比例,范围 0 - 1

countperline

单行控件显示数量

number

选填,Android 默认 1 行显示 1 个,iOS 控件总宽度超过屏幕宽度则堆积在一起,引擎版本支持 iOS v3.00-157 及 Android v2.3.6 及其以上版本,仅支持 TSLib 函数库 v1.2.4 及其以上版本

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

参数

功能

类型

说明

prompt

提示文本

string

必填,控件类型,输入框

text

默认内容

string

选填,无,提示文字

size

字体大小

number

选填,如果不指定该属性,则默认值为 15

align

对齐方式

string

选填,默认左对齐。可取值:左对齐 left,右对齐 right,居中 center

color

字体颜色

string

选填,默认黑色。使用 RGB 十进制数值,以英文半角逗号分割

kbtype

键盘类型

string

选填,设置获取焦点时弹出的键盘类型,number ascii

控件:TextArea 多行文本框仅支持 iOS v2.4.5-3 以上版本及 Android v2.3.3.2 以上版本

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

参数

功能

类型

说明

prompt

提示文本

string

选填,无,提示文字(仅支持 Android)

text

默认内容

string

选填,无,提示文字

size

字体大小

number

选填,如果不指定该属性,则默认值为 15

align

对齐方式

string

选填,默认左对齐。可取值:左对齐 left,右对齐 right,居中 center

color

字体颜色

string

选填,默认黑色。使用 RGB 十进制数值,以英文半角逗号分割

height

高度

number

选填,支持 iOS v2.4.5-3 以上版本,Android 根据内容自行修改的

kbtype

键盘类型

string

选填,设置获取焦点时弹出的键盘类型,number ascii

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

参数

功能

类型

说明

list

可选项标题

string

必填,多个可选项之间用英文半角逗号分割

select

默认选中项编号

string

必填,允许填写一个或多个,填写多个时以 @ 分割。序号从 0 开始,与可选项标题中的顺序保持一致

images

在可选项上显示图片

string

选填,此属性可单独使用也可以和list属性同时使用,多个图片资源用英文半角逗号分割

scale

选项图片缩放

string

当images属性有效时可用此属性设置图片资源缩放比例,范围 0 - 1

countperline

单行控件显示数量

number

选填,Android 默认 1 行显示 1 个,iOS 控件总宽度超过屏幕宽度则堆积在一起,引擎版本支持 iOS v3.00-157 及 Android v2.3.6 及其以上版本,仅支持 TSLib 函数库 v1.2.4 及其以上版本

控件:ComboBox 下拉框一共有五种属性:

可选项标题 list、默认选中项编号 select、两个ComboBox控件建立数据关联时的下级选项 data、两个ComboBox控件建立数据关联时的上级数据源名称 source、两个ComboBox控件建立数据关联时的下级数据源名称 dataSource

参数

功能

类型

说明

list

可选项标题

string

必填,多个可选项之间用英文半角逗号分割

select

默认选中项编号

string

必填,只允许填写一个,序号从 0 开始,与可选项标题中的顺序保持一致

data

两个ComboBox控件建立数据关联时的下级选项

string

选填

source

两个ComboBox控件建立数据关联时的上级数据源名称

string

选填

dataSource

两个ComboBox控件建立数据关联时的下级数据源名称

string

选填

注意事项:

默认选中项编号 select 只允许填写一个,序号从 0 开始(此控件需引擎版本 iOS v2.1.3 以上支持)。

上一级的必须要有data数据给下级使用,而且list里面逗号分割的个数必须要和data里面#号分割的个数保持一致,上一级的source 和下一级的 dataSource 要保持一致

使用了dataSource 就不可以使用list(data、source、dataSource属性需引擎版本 iOS v2.1.8,Android v1.2.4 以上版本支持)

控件:Image 图片放置一个图片到 UI 上,属性:插入图片的路径 src、对齐方式 align、缩放比例 scale、宽度 width

参数

功能

类型

说明

src

插入图片的路径

string

必填,可以是本地路径或者网络路径

align

对齐方式

string

选填,在 default 模式下设置 image 控件的对齐方式 left center right

scale

缩放比例

number

选填,在 default 模式下设置 image 控件的缩放比例,范围 0 - 1

width

宽度

number

选填,在 default 模式下设置 image 控件的宽度

注意事项:

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

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

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

{"type": "Edit", "size": 15, "align": "left","prompt": "提示文字","text": "默认文字","color": "255,0,0","rect": "0,0,100,40"}

参数

类型

说明

尺寸与位置 rect

文本型

必填,该属性适用于全部五种控件,将控件的左上角顶点横坐标、纵坐标,控件宽度、高度分别以英文半角逗号分割。

注意事项:

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

返回值除了标签 Label,其余四种控件均存在文本型返回值,按照定义时的顺序依次返回给 input_1, input_2, input_3, ...。

单选框返回当前选中项的编号(从 0 开始);

编辑框返回其中的内容;

多选框返回当前选中项的编号(从 0 开始),多个选项以 @ 分割。如:3@5 表示多选框组编号为 3 和 5 的两个选项已被选中。

别忘记,该函数的第一个返回值为整数型 ret,用户单击右下角的“确认”时返回 1,单击左下角的“取消”时返回 0。

通过设置全局属性 rettype 可指定返回值类型适应不同的需求,具体用法参看全局属性介绍部分(此属性需引擎版本 iOS v2.2.6,Android v1.2.7 以上版本支持)。

如果关于返回值调用还是不明白,可以看一下视频教程。

当然你也可以看一下触动精灵官方提供的UI库,非常简洁方便。

自定义样式实例代码local ts = require("ts")local cjson = ts.jsonw,h = getScreenSize();MyTable = { ["style"] = "default", -- 选填,默认样式,控件排列类型 ["rettype"] = "table", -- 选填,旧版,shoui返回值格式 ["width"] = w, -- 选填,安卓默认全屏,iOS默认,showui宽度 ["height"] = h, -- 选填,安卓默认全屏,iOS默认,shoWui高度 ["config"] = "showuiTest.txt", -- 选填,无,配置文件保存文件 ["timer"] = 99, -- 选填,无,自动执行倒计时 ["orient"] = 0, -- 选填,竖屏,显示方向(仅支持iOS) ["pagetype"]= "multi", -- 选填,单页,单页/多页 (多页显示时必填,否则无法正确显示showui) ["title"] = "触动精灵脚本UI演示",-- 选填,脚本配置,showUI标题 ["titles"] = "第一页,第二页,第三页", -- 选填,无,多页howui标题(尽在多页下有效) ["cancelname"] = "取消", -- 选填,取消,左下角按钮名称 ["okname"] = "开始", -- 选填,确认,右下角按钮名称 ["selpage"] = 1, -- 选填, 无,多页模式下指定默认停留的页面 ["btnbkcolor"] = "255,255,255", -- 选填,255,255,255,底部按钮背景色(仅支持iOS) ["bgcolor"] = "255,255,255", -- 选填,255,255,255,界面背景色(仅支持iOS) ["pagenumtype"] = "number", -- 选填,无,分页指示样式 pages = { { { ["type"] = "Label", ["text"] = "点击右上角闹钟关闭倒计时↗", ["size"] = 20, ["align"] = "center", ["color"] = "255,0,0", }, { ["type"] = "Label", -- 必填,控件类型,标签 ["text"] = "第一页设置", -- 选填,无,显示内容(内容为空,仍然占用一行) ["size"] = 25, -- 选填,15,字号 ["align"] = "center", -- 选填,居左,对齐样式 ["color"] = "0,0,0", -- 选填 ,0,0,0,字体颜色 }, { ["type"] = "Label", ["align"] = "center", ["text"] = "单选框-RadioGroup", ["size"] = 20, }, { ["type"] = "RadioGroup", -- 必填,控件类型,单选框 ["id"] = "rg", -- 选填,无,控件ID,以table格式返回返回值时必填,否则无法获取返回值 ["list"] = "小学,初中,高中,大学", -- 必填,无,单选框内容 ["select"] = "1", -- 选填,0,默认选中项id ["images"] = "showui_test_a.png,showui_test_b.png,showui_test_c.png,showui_test_d.png", -- 选填,无, 单选框选项显示图片 ["scale"] = "0.4", -- 选填,1,图片缩放比例 }, { ["type"] = "Label", ["align"] = "center", ["text"] = "输入框-Edit", ["size"] = 20, }, { ["type"] = "Edit", -- 必填,控件类型,输入框 ["id"] = "edit", -- 选填,无,控件ID 以table格式返回返回值时必填,否则无法获取返回值 ["prompt"] = "年", -- 选填,无,提示文字 ["text"] = "1989", -- 选填,无,默认文字 ["kbtype"] = "number", -- 选填,标准键盘,键盘类型 ["color"] = "0,0,0", -- 选填,黑色,字体颜色 ["size"] = 15, -- 选填,15,字体大小 ["align"] = "center", -- 选填,居左,对齐方式 }, { ["type"] = "Label", ["align"] = "center", ["text"] = "单级下拉框-ComboBox", ["size"] = 20, }, { ["type"] = "ComboBox", -- 必填,控件类型,下拉框 ["id"] = "cb1", -- 选填,无,控件ID以table格式返回返回值时必填,否则无法获取返回值 ["list"] = "鼠,牛,虎,兔,龙,蛇,马,羊,猴,鸡,狗,猪", -- 必填,无,下拉框内容 ["select"] = "1", -- 选填,0,默认选中项id }, { ["type"] = "Label", ["text"] = "二级下拉框-ComboBox", ["size"] = 20, }, { ["type"] = "ComboBox", -- 必填,控件类型,下拉框 ["id"] = "cb2", -- 选填,无,控件ID 以table格式返回返回值时必填,否则无法获取返回值 ["list"] = "北京,上海,广州,深圳",-- 必填,无,下拉框内容 ["select"] = "0", -- 选填,0,默认选中项id ["data"] = "北京1,北京2,北京3,北京4#".. "上海1,上海2,上海3,上海4#".. "广州1,广州2,广州3,广州4#".. "深圳1,深圳2,深圳3,深圳4", --必填,无,下拉框子选项内容 ["source"] = "这里必须一致" -- 必填,无,主选项下拉框控件 source 属性必须与子选项下拉框的dataSource属性一致 }, { ["type"] = "ComboBox", -- 必填,控件类型,下拉框 ["id"] = "cb3", -- 选填,无控件 ID,以 table 格式返回返回值时必填,否则无法获取返回值 ["select"] = "0", -- 选填,无,子选项下拉框默认选中项 ["dataSource"] = "这里必须一致" --必填,无,主选项下拉框控件 source 属性必须与子选项下拉框的 dataSource 属性一致 }, },{ { ["type"] = "Label", ["text"] = "第二页设置", ["size"] = 25, ["align"] = "center", ["color"] = "0,0,0", }, { ["type"] = "Label", ["align"] = "center", ["text"] = "多行文本框-TextArea", ["size"] = 20, }, { ["type"] = "TextArea", -- 必填,控件类型,输入框 ["id"] = "ta", -- 选填,无,控件ID 以 table格式返回返回值时必填,否则无法获取返回值 ["text"] = "定制脚本担保人员:\r\n".. "2885869964\r\n".. "触动精灵脚本交易群\r\n".. "384123108\r\n".. "官方工作人员都是使用288开头的企业QQ\r\n".. "交易需谨慎,谨防上当受骗!", -- 选填,无,默认文字 ["prompt"] = "我是hint", -- 选填,无,提示文字 ["size"] = 15, -- 选填,15,字体大小 ["align"] = "center", -- 选填,居左,对齐方式 ["height"] = 250, -- 选填,75,空间高度(仅支持 iOS) ["color"] = "255,0,0", -- 选填,黑色,字体颜色 ["kbtype"] = "number", -- 选填,标准键盘,键盘类型 }, { ["type"] = "Label", ["align"] = "center", ["text"] = "多选框-CheckBoxGroup", ["size"] = 20, }, { ["type"] = "CheckBoxGroup", --必填,控件类型,单选框 ["id"] = "cbg", -- 选填,无,控件 ID 以 table 格式返回返回值时必填,否则无法获取返回值 ["list"] = "电影,读书,跑步,吃饭,".. "运动,睡觉,旅行,打豆豆,听歌,电影", -- 必填,无 ,单选框内容 ["select"] = "3@5@7", -- 选填,0,默认选中项 id ["images"] = "showui_test_a.png,showui_test_b.png,".. "showui_test_c.png,showui_test_d.png,showui_test_e.png,".. "showui_test_f.png,showui_test_g.png,showui_test_h.png,".. "showui_test_i.png,showui_test_j.png", -- 选填,无,单选框选项显示图片 ["scale"] = "0.3", -- 选填,1,图片缩放比例 }, },{ { ["type"] = "Label", ["text"] = "第三页设置", ["size"] = 25, ["align"] = "center", ["color"] = "0,0,0", }, { ["type"] = "Label", ["align"] = "center", ["text"] = "图片-Image", ["size"] = 20, }, { ["type"] = "Image", -- 必填,控件类型,图片 ["src"] = "http://mrw.so/4wbrDw", --必填,无,图片路径(可填写资源目录下相对路径,绝对路径,网址) ["scale"] = 0.4, -- 选填,无,图片缩放比例 }, { ["type"] = "Image", ["src"] = "http://mrw.so/4wbrDw", ["scale"] = 0.6, -- 选填,无,图片缩放比例 ["align"] = "left" -- 选填,居左,对齐方式 }, { ["type"] = "Image", ["src"] = "http://mrw.so/4wbrDw", ["scale"] = 0.8, -- 选填,无,图片缩放比例 ["align"] = "center" -- 选填,居左,对齐方式 }, { ["type"] = "Image", ["src"] = "http://mrw.so/4wbrDw", ["scale"] = 1, -- 选填,无,图片缩放比例 ["align"] = "right" -- 选填,居左,对齐方式 }, } } }local MyJsonString = cjson.encode(MyTable);UIret,values = showUI(MyJsonString)if UIret == 1 then local rg = values.rg local edit = values.edit local cb1 = values.cb1 local cb2 = values.cb2 local cb3 = values.cb3 local ta = values.ta local cbg = values.cbg dialog("单选:"..rg..",\r\n单行输入框:"..edit..",\r\n一级下拉框:"..cb1..",\r\n二级下拉框主选项:"..cb2..",\r\n二级下拉框子选项:"..cb3..",\r\n多行文本框:"..ta..",\r\n多选框:"..cbg..",")end

以上实例需引擎版本iOS v2.2.6,Android v1.2.7 以上版本支持。

实例中所使用的图片资源包下载地址:https://pan.baidu.com/s/1c4liZ88,将图片包中的图片文件解压后放入 /User/Media/TouchSprite/res 目录中,运行实例即可看到效果。

实例在 iPhone6S iOS9.0.2 上调试通过,如在其他设备上使用,需自行调整部分参数以适配不同的分辨率。

效果图

文本框、单选框和下拉框多行文本框和多选框图片

名词解析

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本 格式,易于人阅读和编写,同时也易于机器解析和生成。

JSON 中冒号后的值可以是字符串、数字、也可以是另一个数组或对象。

转义即取消某些特定的、在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义,如三种引号 " ' ` 、美元符号 $ 等等。当我们在被引号“括起来”的文本中,想表示出一个引号,就需要转义,如:dialog("\"",5);

注意事项:

如果您的系统为 iOS 9 以上版本,并且设备是 iPad,由于一些特殊原因,锁定横屏的时候弹出的UI界面可能无法正常操作,如出现此问题,请将设备改为锁定竖屏。

需要注意的是,所有控件的属性值必须按照规则来赋值,错误的赋值类型会导致一些不可预料的结果。

为了方便开发者使用,触动精灵提供了封装好的便携 UI 供大家使用,说明文档:https://www.zybuluo.com/miniknife/note/293935

在部分安卓设备上需要在系统设置里开启悬浮窗权限方可正常使用 showUI

webUI(暂不支持 iOS 7 系统)

本类下所有函数都需要引擎版本 iOS v2.3.9,Android v2.3.4 以上支持。

在使用此类函数前必须插入以下代码:

local webview = require('webview')函数: webview.new 创建 webview

函数名称:创建 webview

函数功能:创建一个 webview

支持版本:引擎版本 iOS v2.3.9,Android v2.3.4 以上

函数方法:

local myweb1,err = webview.new(webview_name,{originx,originy,height,width,cornerRadius,orient,root,index,html})

参数

类型

说明

webview_name

string

webview 的名字,可以通过不同的名字同时创建多个 webview

originx

number

左上角 x 点坐标缺省为 0

originy

number

左上角 y 点坐标缺省为 0

height

number

高度,缺省为全屏

width

number

宽度,缺省为全屏

cornerRadius

number

圆角,缺省为 0

orient

number

webview 方向,0-3,和 init 方向一致,缺省为 0

root

string

webview 在文件系统里个根路径,缺省 userPath().."/res"

index

string

webview 的入口文件名,缺省 index.html,如果设置了 html, 这个参数就无效了

html

string

主文件的 html

返回值

类型

说明

myweb1

table

创建webview成功返回一个table,失败返回false

err

string

创建webview失败,err返回错误信息

函数用例:见完整例子

函数: myweb1.show 显示webview

函数名称:显示 webview

函数功能:显示一个webview

支持版本:引擎版本 iOS v2.3.9,Android v2.3.4 以上

函数方法:

myweb1.show()

返回值:无

函数用例:见完整例子

注意事项:

myweb1 为创建 webview 返回的 id

函数: myweb1.set 改变 webview 外观

函数名称:改变 webview 外观

函数功能:动态改变webview的外观

支持版本:引擎版本 iOS v2.3.9,Android v2.3.4以上

函数方法:

myweb1.set({originx,originy,height,width,cornerRadius,orient})

返回值:无

参数

类型

说明

webview_name

string

webview 的名字,可以通过不同的名字同时创建多个 webview

originx

number

左上角 x 点坐标缺省为 0

originy

number

左上角 x 点坐标缺省为 0

height

number

高度,缺省全屏

width

number

宽度,缺省全屏

cornerRadius

number

圆角,缺省为 0

orient

number

webview 方向,0-3,和 init 方向一致,缺省为 0

函数用例:见完整例子

注意事项:

myweb1 为创建 webview 返回的对象

函数: myweb1.close 关闭 webview

函数名称:关闭 webview

函数功能:关闭一个 webview

支持版本:引擎版本 iOS v2.3.9,Android v2.3.4以上

函数方法:

myweb1.close()

返回值:无

函数用例:见完整例子

注意事项:

myweb1 为创建 webview 返回的对象

函数: event.register 发送消息,传递参数

函数名称:发送消息,传递参数

函数功能:发送 post 到/set_event

支持版本:引擎版本 iOS v2.3.9,Android v2.3.4以上

函数方法:

event.register(event,func)

参数

类型

说明

event

string

事件名称

func

funtion

执行的命令

函数用例:见完整例子

注意事项:

myweb1 为创建 webview 返回的 id

完整示例示例代码一

local html = [[ 数据提交简单示例


输入框-普通

输入框-数字

输入框-多行


]]local thread = require('thread')local event = require('event')--创建webviewlocal showui_view,err = require('webview').new("myshowui", {html=html})assert(showui_view,err)event.register("showUI_commit",function(value) local ts = require('ts') local cjson = ts.json toast(cjson.encode(value),5) showui_view.close()end)event.register("showUI_cancel",function(value) showui_view.close()end)showui_view.show()thread.waitAllThreadExit()示例代码二

local html = [[ Hello 触动精灵 ShowUI

]]local thread = require('thread')local event = require('event')local ts = require('ts')local cjson = ts.json--创建webviewlocal showui_view,err = require('webview').new("myshowui", {html=html})assert(showui_view,err)event.register("showUI_commit",function(value) toast(cjson.encode(value),10) showui_view.close() end)event.register("showUI_cancel",function(value) showui_view.close() end)showui_view.show()thread.waitAllThreadExit()为触动增加无限可能,Lua扩展库友友们是不是感觉触动精灵提供的插件调用起来不方便,触动内置的功能十分有限?你需要什么?

文件系统操作(新建、删除、建立符号链接)……

文件格式解析(zip, rar, plist, deb)……

网络操作(http, https, ftp, sftp, ftps, udp, smtp, imap)……

图像处理(png, bmp, jpg, tiff)……

问题:有没有更加好用的 Lua 原生扩展方式呢?

答案:有!而且 Lua 扩展有很多!

Lua 的扩展(add-on)基本上来自于这两个网站:

http://luaforge.net/projects

https://rocks.moonscript.org

熟悉跨平台编译的开发者当然可以试试自己编译这当中的插件给 iOS 使用。

如果有 C 语言、Objective-C、C++ 开发能力的,当然也可以自己编写 Lua 原生扩展,还能使用 iOS 的 SDK。

用 Objective-C 给 Lua 编写扩展并在 iOS 平台上运行

关于如何编写 Lua 扩展,参见 Lua 官方文档,这里并不作介绍,以下实例及说明由 i82 提供。

mt.m:

#include #include #include "lua.h"#include "lualib.h"#include "lauxlib.h"#import #import #import /* 库 open 函数的前置声明 */int luaopen_mt(lua_State *L);/* Function mt_get_device_name * @return string device name */static int mt_get_device_name(lua_State *L){ NSString *name = [[UIDevice currentDevice] name]; const char * name_str = [name UTF8String]; lua_pushstring(L, name_str); return 1;}//注册函数库static const luaL_Reg mt_lib[] = { {"device_name", mt_get_device_name}, //获取设备名称 {NULL, NULL}};int luaopen_mt(lua_State *L){ luaL_newlib(L, mt_lib); return 1;}单个源文件的编译与连接命令(将 gcc 换成 g++ 可使用 Objective-C++ 语法):

xcrun -sdk iphoneos gcc -arch armv7 -arch armv7s -arch arm64 -miphoneos-version-min=4.3 -O3 -std=c99 -I/opt/theos/include/ -c -o mt.o mt.mxcrun -sdk iphoneos gcc -arch armv7 -arch armv7s -arch arm64 -miphoneos-version-min=4.3 -O3 -framework Foundation -framework UIKit -bundle -undefined dynamic_lookup -o mt.so mt.o得到的 mt.so 即可在 Lua 中引用了:

local mt = require "mt"print(mt.device_name())触动精灵 TSLib 函数扩展库为了进一步降低脚本开发者门槛,触动精灵单独开发了 TSLib 函数扩展库,提供了一系列实用函数供开发者使用。

函数库开发手册:https://www.zybuluo.com/miniknife/note/293935

函数扩展库下载

函数:TSVersions 获取扩展库版本号

点击滑动类

函数:tap 触摸点击屏幕

函数:randomTap 随机点击屏幕

函数:moveTo 直线滑动

函数:moveTowards 角度直线滑动

函数:moveZoomOut 两点缩小

函数:moveZoomIn 两点放大

函数:moveCircleCenter 圆心弧度滑动

颜色判断类

函数:intToRgb 颜色转RGB

函数:rgbToInt RGB转颜色

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

函数:multiColor 多点颜色判断

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

函数:findMultiColorInRegionFuzzyByTable 点阵找色

开发调试类

函数:log 日志记录

文件操作类

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

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

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

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

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

函数:delFile 删除文件

应用信息类

函数:getAppName 获取应用名称

函数:getUserApp 获取用户安装非越狱应用

数据操作类

函数:strSplit 分割字符串

函数:httpGet get获取网页数据

函数:httpPost post提交数据

函数:inputStr 输入字符串

函数:getStrNum 获取字符串个数

函数:getRndNum 获取随机数

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

函数:deepCopyTable 复制表

系统判断类

函数:getRender 获取屏幕的render值

函数:isDay 判断日期

clear 清理类模块

函数:clearAllPhotos 清空相册

函数:clearAllKeyChains 清空所有应用钥匙串信息

函数:clearIDFAV 清理 IDFAV

函数:clearPasteboard 清除剪贴板

函数:clearCookies 清除浏览器Cookies

showUI 脚本配置界面

函数:checkTable 检查UItable

函数:getMode 获取 UI 模式

函数:neosUI 显示UI

便捷UI

函数:单选框 创建UI

函数:UILabel 文本标签

函数:UIRadio 单选框

函数:UIEdit 编辑框

函数:UICheck 多选框

函数:UICombo 下拉框

函数:UIComboRlt 联动下拉框

函数:UIComboRlts 联动关联框

函数:UIImage 图片框

函数:UIShow 显示UI

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

需要注意的是,帮你玩平台不能使用此函数库,小精灵平台要使用打码库请勾选网络插类型。

使用说明:https://www.zybuluo.com/miniknife/note/293935#ocr 云打码扩展库

注意事项:

触动苹果安卓,扩展库 v1.1.5以上版本支持,区别于官方打码

触动小精灵使用此打码库需要勾选 网络插件 类型

如果函数返回false都为网络错误超时

扩展库支持如下打码平台:

http://www.chaorendama.com/ --QQ 超人

触动精灵云打码

"本地光学字符识别" 简称本地 OCR 由于特征库、性能的限制,识别速度慢、识别率也比较

差。触动精灵提供云打码扩展库来解决这一问题。该扩展库支持如下打码平台:

http://www.hyocr.com/ --火眼

使用方法

下载扩展库,iOS将 cloudOcr.so 插件放入脚本 /lua 目录或插件/pluign 目录,Android将插件放入/data/data/com.touchsprite.android/目录下,在脚本开头插入 local ocr = require "cloudOcr" 即可。

安卓设备找不到该目录时需要使用第三方文件管理器,推荐re文件管理器

安装触动精灵 2.0 以上版本,在 更多- 插件中在线安装,在脚本开头插入 local ocr = require "cloudOcr" 即可。

企业版1.3.6及以上版本已内置本插件,无需额外下载

企业版用户如果不能正常使用本插件,建议使用基础扩展库的云打码 → ocr 云打码扩展库

插件下载

iOS v1.1.6 更新时间(2018-03-20):cloudOcr.so

Android 真机 v1.1.6 更新时间(2018-03-20):cloudOcr.so

模拟器 v1.1.6 更新时间(2018-03-20):cloudOcr.so

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

函数名称:云端打码、自动纠错、获取扩展库版本号

函数功能:云端打码、打码自动纠错、获取云打码扩展库版本号

函数方法:

ret = ocr.cloudOcrText(op);

返回值:返回一个 table

参数

类型

说明

platform

string

平台类型,火眼 - hyocr,建议使用 ocr 云打码扩展库

x1,y1

number

识别区域左上角顶点坐标

x2,y2

number

识别区域右下角顶点坐标

type

string

打码类型,可在对应平台官网查询

username

string

打码平台用户名,需用户去相应平台自行注册

password

string

打码平台密码,需用户去相应平台自行注册

length

number

打码长度(可选参数),默认为 0

timeout

number

超时时间(可选参数),默认为 10 秒

scale

number

缩放比例(可选参数),默认为 100,即不进行缩放

beizhu

string

备注(可选参数),默认为空

返回值

类型

说明

ret.success

boolean

true 打码成功,false 失败

ret.text

string

返回的识别结果,在 success == true 时存在

ret.message

string

消息,在 success == fasle 时,返回错误原因

ret.id

table

打码标识,在 success == true 时存在,用于打码自动纠错

脚本实例:

local ocr = require "cloudOcr";local op = {--必填参数["platform"]="hyocr", --平台类型,具体参数参照参数表["x1"]=1848, --需要识别区域左上角坐标["y1"]=473,["x2"]=2029, --需要识别区域右下角坐标["y2"]=561,["type"]="52", --打码类型,可在对应平台官网查询["username"]="user", --打码平台账号["password"]="password", --打码平台密码--选填参数["length"]=4, --打码长度["timeout"]=30, --超时时间["scale"]=50, --缩放比例,范围10 - 200,在某些待识别区域过大的时候可设置此参数};local ret = ocr.cloudOcrText(op);if ret.success thendialog(ret.text,0)elsedialog(ret.message,0)end--自动纠错local ocr = require "cloudOcr"; --载入扩展库local ret = ocr.cloudOcrText(op); --进行远程识别if ret.success thenret_1 = ocr.cloudOcrReportError(ret.id); --自动纠错,ret.id从ocr.cloudOcrText返回值中获取endlocal ocr = require "cloudOcr";local ver = ocr.version(); --获取扩展库版本号注意事项:

最新云打码可在触动精灵 iOS v2.0 以上版本插件管理中下载安装,更加简单的方法 →建议使用 ocr 云打码扩展库。

打码函数传入的参数为 table 类型,使用时请参照参数表中详细说明。

如您使用火眼答题平台,用户名参数可以为空,密码串需要用户注册登陆后可以在火眼平台的后台查看到。。

帮你玩、小精灵使用此插件需自行将插件打包到脚本压缩包内或导入手机对应目录。

简易 SMTP 邮件发送库函数:mail.send

函数功能:发送邮件

函数方法

a = mail.send("send@gmail.com", "receive@gmail.com", "Hello", "This is a test mail.", "smtp.gmail.com", "send@gmail.com", "*")

返回值:true 发送成功,其它字符串为失败原因

参数

类型

说明

参数 1

string

发送者邮件地址

参数 2

string

接收者邮件地址

参数 3

string

邮件主题

参数 4

string

邮件正文

参数 5

string

SMTP 服务器

参数 6

string

SMTP 鉴定用户名

参数 7

string

SMTP 鉴定密码

脚本实例:

local mail = require "mail"a = mail.send("i.82@82flex.com", "357722984@qq.com", "Hello", "This is a test mail.", "smtp.mxhichina.com", "i.82@82flex.com", "***")if a == true then --发送成功 dialog("Succeed!", 0)else dialog(a, 0)end注意事项:

扩展库下载地址:https://pan.baidu.com/s/1ggR16Kz 密码:h2is, 下载后将 mail.so 放入 /var/mobile/Media/TouchSprite/plugin 即可在脚本中引用。

iOS 11 系统的设备,原 TouchSprite 文件夹下新增 plugin_ios11 快捷方式,连接到 usr/bin/tsplugin

如果系统是 iOS 11 则 tsp 自带 so 文件释放到该路径但 lua 文件释放路径保持不变

如果开发者想要手动导入 so 文件,也需要放到 usr/bin/tsplugin 目录下

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

Lua 配合 os.execute 命令,可以使用触动精灵对 iOS 设备进行注销、关机、重启、清空缓存、解压、移动、复制、删除文件、创建文件夹等系统操作

帮你玩平台禁用此函数。

respring 注销--注销function respring()--帮你玩平台禁用此函数 os.execute("killall -9 SpringBoard");endpoweroff 关机--关机function poweroff()--帮你玩平台禁用此函数 os.execute("halt");endreboot 重启--重启function reboot()--帮你玩平台禁用此函数 os.execute("reboot");endclearCache 清空缓存--清空缓存function clearCache()--帮你玩平台禁用此函数 os.execute("su mobile -c uicache");enddelFile 删除文件--删除文件function delFile(path)--帮你玩平台禁用此函数 os.execute("rm -rf "..path);end参数说明

参数

说明

path

要删除文件的路径,支持*通配符

脚本实例:

如要删除1.lua的文件,则输入:

delFile("/var/mobile/Media/TouchSprite/lua/1.lua");unzip 解压--解压zip文件function unzip(path,to)--帮你玩平台禁用此函数 os.execute("unzip "..path.." -d "..to);end参数说明

参数

说明

path

为待解压文件的路径

to

要解压到的文件夹路径,默认不覆盖

脚本实例:

如要解压名为 1.zip 的文件,则输入:

unzip("/var/mobile/Media/TouchSprite/lua/1.zip","/var/mobile/Media/TouchSprite/lua/");movefile 移动文件--移动文件function movefile(path,to)--帮你玩平台禁用此函数 os.execute("mv "..path.." "..to);end参数说明

参数

说明

path

待移动文件的路径,支持*通配符

to

要移动到的文件路径,注意先判断是否有重名文件或文件夹

脚本实例:

如要移动1.txt到lua/1.lua,则输入:

movefile("/var/mobile/Media/TouchSprite/lua/1.txt","/var/mobile/Media/TouchSprite/lua/1.lua");copyfile 复制文件--复制文件function copyfile(path,to) os.execute("cp -rf "..path.." "..to);end参数说明

参数

说明

path

待复制文件的路径,支持*通配符

to

要复制到的文件路径,注意先判断是否有重名文件或文件夹。

脚本实例:

如要复制res/1.txt到lua/1.txt,则输入:

copyfile("/var/mobile/Media/TouchSprite/res/1.txt","/var/mobile/Media/TouchSprite/lua/1.txt");newfolder 创建文件夹--创建文件夹function newfolder(path)--帮你玩平台禁用此函数 os.execute("mkdir "..path);end参数说明

参数

说明

path

要创建文件夹的路径

脚本实例:

如要创建test文件夹,则输入:

newfolder("/var/mobile/Media/TouchSprite/lua/test");触动精灵中"io库"应用readFile 将指定文件中的内容按行读取-将指定文件中的内容按行读取function readFile(path) local file = io.open(path,"r"); if file then local _list = {}; for l in file:lines() do table.insert(_list,l) end file:close(); return _list endendlist = readFile(userPath().."/lua/main.lua");参数说明

参数

说明

返回值

path

要读取文件的路径

table

getList 遍历文件--遍历文件function getList(path) local a = io.popen("ls "..path); local f = {}; for l in a:lines() do table.insert(f,l) end a:close() return fend参数说明

参数

说明

返回值

path

要列举文件的文件夹的路径

table

脚本实例:

如要列举触动精灵lua文件夹下所有的脚本文件,则输入:

list = getList("/User/Media/TouchSprite/lua/");findFile 查找文件--查找文件function findFile(path) local a = io.popen("find "..path.." -prune"); local f = {}; for l in a:lines() do table.insert(f,l) end a:close() return fend参数说明

参数

说明

返回值

path

要查找文件的路径,支持*通配符

table

脚本实例:

如要查找后缀为.lua的文件,则输入:

file = findFile("/User/Media/TouchSprite/lua/*.lua");file_exists 检测指定文件是否存在--检测指定文件是否存在function file_exists(file_name) local f = io.open(file_name, "r") return f ~= nil and f:close()end参数说明

参数

说明

返回值

path

要查找文件的路径

true/false

脚本实例:

if file_exists("/User/Media/TouchSprite/lua/1.lua") then dialog("文件存在",0)else dialog("文件不存在",0)end函数:qrDecode 二维码解析(仅支持 Android)函数名称:qrDecode

函数功能:将二维码图片解析为字符串,仅支持 Android v2.3.5.3 以上版本

函数方法:

str =qrDecode(path)

参数

类型

说明

path

string

解析二维码图片的路径,支持 jpg,png 等格式

返回值

类型

说明

str

string

解析二维码得到的字符串

脚本实例:

str =qrDecode(userPath().."/res/1.png") --"1.jpg"(如只填文件名,默认为图片在触动 res 目录下)dialog(str,0)注意:

并不是所有二维码都可以解析,推荐使用

触动精灵二维码识别库

使用说明

本扩展提供二维码识别的功能,以方便开发者可广泛适用于各类二维码

仅iOS平台可以使用

暂不支持微信面对面红包二维码的识别

扩展库下载

v1.0.2 更新时间:2018-08-20 仅支持 iOS11 及其以下系统

tsqr.so

v1.0.3 更新时间:2019-03-08 仅支持 iOS12 及其以上系统

tsqr.so

函数: qr.qrDecode 二维码图片解析(仅支持iOS)函数名称:qr.qrDecode

函数功能:将二维码图片解析为字符串,需要1.2.1及以上版本

函数方法:

str = qr.qrDecode(path)

参数

类型

说明

path

string

解析二维码图片的路径,支持jpg,png等格式

返回值

类型

说明

str

string

解析二维码得到的字符串

脚本实例:

local qr = require("tsqr")str = qr.qrDecode(userPath().."/res/1.png") --"1.jpg"(如只填文件名,默认为图片在触动res目录下)dialog(str,0)触动精灵ts.so扩展库

本扩展库封装了大部分开发过程中需要的功能,适合有一定基础的开发者研究使用,使用得当可以以此开发出功能十分强大的脚本。

函数库开发手册地址:https://www.zybuluo.com/miniknife/note/671299

函数扩展库下载

说明:此扩展库通用于 iOS/Android 平台。

JSON 模块

FTP 模块

设备信息模块

字符串处理模块

HTTP 模块

HTTPS 模块

Socket 模块

PLIST 文件操作

SMTP 发送邮件

获取设备网络类型

Ping 测试网络连接情况

获取毫秒级时间戳

下载文件

二维码图片生成

简单数据存储

数据库操作

文件管理

触动精灵sz扩展库为了进一步降低脚本开发者门槛,触动精灵iOS 2.x 以上版本集成了苏泽的扩展库,提供了一系列实用函数供开发者使用。

扩展库开发手册地址:https://www.zybuluo.com/miniknife/note/962878

附录iOS 设备分辨率一览表

设备

标准模式分辨率(px)

放大模式分辨率(px)

iPhone4(S)/iPod Touch4G

640x960

-

iPhone 5(S/C)/SE/iPod Touch5G(6G)

640x1136

-

iPhone 6(S)/7/8

750x1334

640x1136

iPhone 6 P/6SP/7P/8P

1242x2208

1125x2001

iPhone X

1125x2436

-

iPad 1/2/mini

768x1024

-

TheNewiPad/iPad 4/Air/Air2

1536x2048

-

iPad mini 2/mini 3/mini 4

1536x2048

-

iPad Pro

2048×2732

-

注意事项:

触动引擎使用的是逻辑分辨率而不是物理分辨率

Lua math 库

函数名

描述

示例

结果

pi

圆周率

math.pi

3.1415926535898

abs

取绝对值

math.abs(-2012)

2012

ceil

向上取整

math.ceil(9.1)

10

floor

向下取整

math.floor(9.9)

9

max

取参数最大值

math.max(2,4,6,8)

8

min

取参数最小值

math.min(2,4,6,8)

2

pow

计算x的y次幂

math.pow(2,16)

65536

sqrt

开平方

math.sqrt(65536)

256

modf

取整数和小数部分

math.modf(20.12)

20 0.12

randomseed

设随机数种子

math.randomseed(os.time())

random

取随机数

math.random(5,90)

5 ~ 90

rad

角度转弧度

math.rad(180)

3.1415926535898

deg

弧度转角度

math.deg(math.pi)

180

exp

e的x次方

math.exp(4)

54.598150033144

log

计算x的自然对数

math.log(54.598150033144)

4

log10

计算10为底,x的对数

math.log10(1000)

3

frexp

将参数拆成 x * (2 ^ y) 的形式

math.frexp(160)

0.625 8

ldexp

计算x * (2 ^ y)

math.ldexp(0.625,8)

160

sin

正弦

math.sin(math.rad(30))

0.5

cos

余弦

math.cos(math.rad(60))

0.5

tan

正切

math.tan(math.rad(45))

1

asin

反正弦

math.deg(math.asin(0.5))

30

acos

反余弦

math.deg(math.acos(0.5))

60

atan

反正切

math.deg(math.atan(1))

45

已知与触动精灵/帮你玩/小精灵/企业版 iOS 冲突的插件列表如果您安装了以下插件导致触动精灵服务使用异常,请在Cydia 中卸载该插件后重新安装客户端。

冲突插件

导致问题

Stashing(内存修正插件)

会导致帮你玩无法注册和登录账号,提示文件获取失败

StatusHUD2 插件

会导致脚本showUI无法弹

PS/易天行(伪装地理位置插件)

会导致点击失效或服务无法启动

CCSettings(修改美化控制中心插件)

会导致脚本showUI无法弹出

协奏助手

会导致点击失效

按键精灵iOS

会导致UI弹出后点击【取消】【确定】无反应

xxplugin - coc/cok(xxplugin 系列插件)

会导致点击失效或服务无法启动

XY苹果助手

会导致点击失效或服务无法启动

约定的按键编码电话功能按键

键名

描述

键值

KEYCODE_HOME

按键Home

3

KEYCODE_BACK

返回键

4

KEYCODE_CALL

拨号键

5

KEYCODE_ENDCALL

挂机键

6

KEYCODE_VOLUME_UP

音量增加键

24

KEYCODE_VOLUME_DOWN

音量减小键

25

KEYCODE_POWER

电源键

26

KEYCODE_CAMERA

拍照键

27

KEYCODE_FOCUS

拍照对焦键

80

KEYCODE_MENU

菜单键

82

KEYCODE_NOTIFICATION

通知键

83

KEYCODE_SEARCH

搜索键

84

KEYCODE_MUTE

话筒静音键

91

KEYCODE_VOLUME_MUTE

扬声器静音键

164

控制类按键

键名

描述

键值

KEYCODE_DPAD_UP

导航键 向上

19

KEYCODE_DPAD_DOWN

导航键 向下

20

KEYCODE_DPAD_LEFT

导航键 向左

21

KEYCODE_DPAD_RIGHT

导航键 向右

22

KEYCODE_DPAD_CENTER

导航键 确定键

23

KEYCODE_TAB

Tab键

61

KEYCODE_ENTER

回车键

66

KEYCODE_DEL

退格键

67

KEYCODE_PAGE_UP

向上翻页键

92

KEYCODE_PAGE_DOWN

向下翻页键

93

KEYCODE_ESCAPE

ESC键

111

KEYCODE_FORWARD_DEL

删除键

112

KEYCODE_CAPS_LOCK

大写锁定键

115

KEYCODE_SCROLL_LOCK

滚动锁定键

116

KEYCODE_BREAK

Break/Pause键

121

KEYCODE_MOVE_HOME

光标移动到开始键

122

KEYCODE_MOVE_END

光标移动到末尾键

123

KEYCODE_INSERT

插入键

124

KEYCODE_NUM_LOCK

小键盘锁

143

KEYCODE_ZOOM_IN

放大键

168

KEYCODE_ZOOM_OUT

缩小键

169

基本类按键

键名

描述

键值

KEYCODE_0

按键'0'

7

KEYCODE_1

按键'1'

8

KEYCODE_2

按键'2'

9

KEYCODE_3

按键'3'

10

KEYCODE_4

按键'4'

11

KEYCODE_5

按键'5'

12

KEYCODE_6

按键'6'

13

KEYCODE_7

按键'7'

14

KEYCODE_8

按键'8'

15

KEYCODE_9

按键'9'

16

KEYCODE_A

按键'A'

29

KEYCODE_B

按键'B'

30

KEYCODE_C

按键'C'

31

KEYCODE_D

按键'D'

32

KEYCODE_E

按键'E'

33

KEYCODE_F

按键'F'

34

KEYCODE_G

按键'G'

35

KEYCODE_H

按键'H'

36

KEYCODE_I

按键'I'

37

KEYCODE_J

按键'J'

38

KEYCODE_K

按键'K'

39

KEYCODE_L

按键'L'

40

KEYCODE_M

按键'M'

41

KEYCODE_N

按键'N'

42

KEYCODE_O

按键'O'

43

KEYCODE_P

按键'P'

44

KEYCODE_Q

按键'Q'

45

KEYCODE_R

按键'R'

46

KEYCODE_S

按键'S'

47

KEYCODE_T

按键'T'

48

KEYCODE_U

按键'U'

49

KEYCODE_V

按键'V'

50

KEYCODE_W

按键'W'

51

KEYCODE_X

按键'X'

52

KEYCODE_Y

按键'Y'

53

KEYCODE_Z

按键'Z'

54

安卓手机如何开启系统悬浮窗权限小米

设置 - (界面底部)其他应用管理 - 触动精灵 - 应用详情界面上滑 - (底部)权限管理 - 悬浮窗管理 - (弹出的底部菜单)选择允许

安全中心 - 授权管理 - 应用权限管理 - 小精灵名称 - 显示悬浮窗 - 开启

华为

设置 - 全部设置 - 隐私和安全- 通知管理 - 悬浮窗管理 - 小精灵名称 - 打开开关

-手机管家 - 悬浮窗管理 - 小精灵名称 - 开启悬浮窗

魅族魅蓝

设置 - (左侧栏)应用管理 - 小精灵名称 - 权限管理- 弹框消息一览 - 点击右侧按钮 - 按钮为绿色时为打开状态

-安全中心 - 授权管理 - 小精灵名称 - 悬浮窗 - 开启

OPPO

安全中心 - 权限隐私 - 应用权限管理 - 悬浮窗管理 - 小精灵名称 - 打开开关

乐视

管家 - 权限管理 - 应用权限管理 - 权限管理 - 小精灵名称 - 显示悬浮窗 - 开启

锤子坚果

安全中心 - 应用程序权限管理 - 其他 - 桌面悬浮窗 - 小精灵名称 - 打开开关

默认开启悬浮窗权限的手机

三星

vivo

酷派

金立

设备 SSH 连接工具

WinSCP

简体中文语言包

Putty

相关工具运行库

VCredist 2010

NET Framework 4

LuaSQLite

http://lua.sqlite.org/index.cgi/doc/tip/doc/lsqlite3.wiki

iOS 系统设置参数对照表

参数

说明

prefs:root=WIFI

WIFI

prefs:root=INTERNET_TETHERING

个人热点

prefs:root=MOBILE_DATA_SETTINGS_ID

蜂窝设置

prefs:root=Privacy

隐私

prefs:root=General&path

通用

prefs:root=LOCATION_SERVICES

定位服务

prefs:root=VPN

VPN

prefs:root=General&path=About

关于

prefs:root=General&path=ACCESSIBILITY

辅助功能

prefs:root=AIRPLANE_MODE

飞行模式

prefs:root=General&path=AUTOLOCK

自动锁屏时间

prefs:root=General&path=USAGE

用量

prefs:root=Brightness

亮度

prefs:root=General&path=Bluetooth

蓝牙

prefs:root=General&path=DATE_AND_TIME

日期和时间

prefs:root=FACETIME

Facetime设置

prefs:root=General&path=Keyboard

键盘设置

prefs:root=CASTLE

Icloud

prefs:root=CASTLE&path=STORAGE_AND_BACKUP

备份

prefs:root=General&path=INTERNATIONAL

语言与地区设置

prefs:root=ACCOUNT_SETTINGS

账户设置

prefs:root=MUSIC

音乐

prefs:root=MUSIC&path=EQ

EQ均衡器

prefs:root=

设置

prefs:root=NOTES

备忘录

prefs:root=NOTIFICATIONS_ID

通知

prefs:root=Phone

电话设置

prefs:root=Photos

照片与相机设置

prefs:root=General&path=Reset

还原

prefs:root=Sounds&path=Ringtone

铃声设置

prefs:root=Safari

Safari

prefs:root=Sounds

声音

prefs:root=General&path=SOFTWARE_UPDATE_LINK

系统更新

prefs:root=STORE

STORE设置

prefs:root=VIDEO

视频设置

prefs:root=Wallpaper

壁纸设置

按键码表[字母]

按键码

说明

"a"

a or A

"b"

b or B

"c"

c or C

"d"

d or D

"e"

e or E

"f"

f or F

"g"

g or G

"h"

h or H

"i"

i or I

"j"

j or J

"k"

k or K

"l"

l or L

"m"

m or M

"n"

n or N

"o"

o or O

"p"

p or P

"q"

q or Q

"r"

r or R

"s"

s or S

"t"

t or T

"u"

u or U

"v"

v or V

"w"

w or W

"x"

x or X

"y"

y or Y

"z"

z or Z

按键码表[数字]

按键码

说明

"0"

1 or !

"1"

2 or @

"2"

3 or #

"3"

4 or $

"4"

5 or %

"5"

6 or ^

"6"

7 or &

"7"

8 or *

"8"

9 or (

"9"

0 or )

按键码表[其他]

按键码

说明

"Hyphen"

- or _

"EqualSign"

= or +

"OpenBracket"

[ or {

"CloseBracket"

] or }

"Backslash"

\ or l

"NonUSPound"

Non-US # or _

"Semicolon"

; or :

"Quote"

' or "

"GraveAccentAndTilde"

Grave Accent and Tilde

"Comma"

, or <

"Period"

. or >

"Slash"

/ or ?

按键码表[更多请自行尝试]"ReturnOrEnter" /* Return (Enter) */"Escape" /* Escape */"DeleteOrBackspace" /* Delete (Backspace) */"Tab" /* Tab */"Spacebar" /* Spacebar */"CapsLock" /* Caps Lock */"F1" /* F1 */"F2" /* F2 */"F3" /* F3 */"F4" /* F4 */"F5" /* F5 */"F6" /* F6 */"F7" /* F7 */"F8" /* F8 */"F9" /* F9 */"F10" /* F10 */"F11" /* F11 */"F12" /* F12 */"PrintScreen" /* Print Screen */"ScrollLock" /* Scroll Lock */"Pause" /* Pause */"Insert" /* Insert */"Home" /* Home */"PageUp" /* Page Up */"DeleteForward" /* Delete Forward */"End" /* End */"PageDown", /* Page Down */"RightArrow" /* Right Arrow */"LeftArrow" /* Left Arrow */"DownArrow" /* Down Arrow */"UpArrow" /* Up Arrow */"KeypadNumLock" /* Keypad NumLock or Clear */"KeypadSlash" /* Keypad / */"KeypadAsterisk" /* Keypad * */"KeypadHyphen" /* Keypad - */"KeypadPlus" /* Keypad + */"KeypadEnter" /* Keypad Enter */"Keypad1" /* Keypad 1 or End */"Keypad2" /* Keypad 2 or Down Arrow */"Keypad3" /* Keypad 3 or Page Down */"Keypad4" /* Keypad 4 or Left Arrow */"Keypad5" /* Keypad 5 */"Keypad6" /* Keypad 6 or Right Arrow */"Keypad7" /* Keypad 7 or Home */"Keypad8" /* Keypad 8 or Up Arrow */"Keypad9" /* Keypad 9 or Page Up */"Keypad0" /* Keypad 0 or Insert */"KeypadPeriod" /* Keypad . or Delete */"NonUSBackslash" /* Non-US \ or | */"Application" /* Application */"Power" /* Power */"EqualSign" /* Keypad = */"F13" /* F13 */"F14" /* F14 */"F15" /* F15 */"F16" /* F16 */"F17" /* F17 */"F18" /* F18 */"F19" /* F19 */"F20" /* F20 */"F21" /* F21 */"F22" /* F22 */"F23" /* F23 */"F24" /* F24 */"Execute" /* Execute */"Help" /* Help */"Menu" /* Menu */"Select" /* Select */"Stop" /* Stop */"Again" /* Again */"Undo" /* Undo */"Cut" /* Cut */"Copy" /* Copy */"Paste" /* Paste */"Find" /* Find */"Mute" /* Mute */"VolumeUp" /* Volume Up */"VolumeDown" /* Volume Down */"LockingCapsLock" /* Locking Caps Lock */"LockingNumLock" /* Locking Num Lock */"LockingScrollLock" /* Locking Scroll Lock */"Comma" /* Keypad Comma */"EqualSignAS400", /* Keypad Equal Sign for AS/400 */"International1", /* International1 */"International2", /* International2 */"International3", /* International3 */"International4", /* International4 */"International5", /* International5 */"International6", /* International6 */"International7", /* International7 */"International8", /* International8 */"International9", /* International9 */"LANG1" /* LANG1 */"LANG2" /* LANG2 */"LANG3" /* LANG3 */"LANG4" /* LANG4 */"LANG5" /* LANG5 */"LANG6" /* LANG6 */"LANG7" /* LANG7 */"LANG8" /* LANG8 */"LANG9" /* LANG9 */"AlternateErase" /* AlternateErase */"SysReqOrAttention" /* SysReq/Attention */"Cancel" /* Cancel */"Clear" /* Clear */"Prior" /* Prior */"Return" /* Return */"Separator" /* Separator */"Out" /* Out */"Oper" /* Oper */"ClearOrAgain" /* Clear/Again */"CrSelOrProps" /* CrSel/Props */"ExSel" /* ExSel */"LeftControl" /* Left Control */"LeftShift" /* Left Shift */"LeftAlt" /* Left Alt */"LeftGUI" /* Left GUI */"RightControl" /* Right Control */"RightShift" /* Right Shift */"RightAlt" /* Right Alt */"RightGUI" /* Right GUI */"ErrorRollOver", /* ErrorRollOver */"POSTFail", /* POSTFail */"ErrorUndefined", /* ErrorUndefined */

如何将oracle view v$sql的内容保存更长时间?
如何挖矿:新手指南与实用技巧全解析