zoukankan      html  css  js  c++  java
  • 基于Lua语言的触动精灵脚本开发

    工具下载

    官网地址

    连接模拟器

    studio连接

    首先要先下载ADB模拟器连接IDE,注意,这里一定要用官网提供的ADB,安卓开发的adb不行!!!

    下载好之后,打开studio,输入Access Key按照下面步骤执行

    如果出现以下这种情况重复执行上面步骤

    第一步,先进入到下载的目录下执行 adb connect 127.0.0.1:7555

    运行完用adb devices查看是否连接,如果出现offline要断开重连,断开语句adb disconnect 127.0.0.1:7555

    第二步,执行显示nLog日志.bat,然后执行执行连接编辑器.bat(相当于执行./adb.exe forward tcp:50005 tcp:50005)

    第三步,安卓端运行触动精灵

    上面的这些步骤可以用下面两行代码替换,如果取色器不能截图,换一个模拟器。

    常用模拟器端口号

    注意:mumu模拟器默认为横屏,可以通过设置屏幕为720*1080来实现竖屏

    查看官网连接模拟器

    在设备一栏中新增127.0.0.1,然后右击连接

    连接成功标示

    这里注意把虚拟机时间设为网络同步。

    拾色器

    连接好Studio后,连接拾色器,输入127.0.0.1:50005,注意这里一定要为50005!!!连接成功后窗口消失。点击抓图即可。

    颜色比对常用api

    拾色器快捷键

    常用快捷键

    • `(数字1左边那个键)
      取一点颜色到剪贴板,取色后直接可以粘贴,默认情况下,该操作不会有可视化表现
    • 数字键(1 2 3 4 5 6 7 8 9 0)
      多点取色到剪贴板,以上十个数字键分别取 10 点色,取色之后直接 Ctrl + V 即可把取好的点色粘贴到脚本中
    • Shift + (1 2 3 4 5 6 7 8 9 0)
      清除相应位置的点色信息(会重置剪贴板中的内容)
    • 方向键(↑ ↓ ← →)
      移动鼠标指针定位 1 个像素
    • Shift + 光标键(↑ ↓ ← →)
      移动鼠标指针定位 10 个像素
    • Ctrl + 光标键(↑ ↓ ← →)
      移动鼠标指针定位 100 个像素
    • 回车键
      取色到剪贴板的第一个空白位置(如果没有空白位置则不会取色)
    • Ctrl + 鼠标左键-点击
      与上一条 回车键 功能一样
    • -
      缩小视图
    • =
      放大视图
    • R
      刷新列表中的已有坐标的颜色并使用简易标签于图像上标出相应的位置
    • W
      把取色列表重新写入剪贴板

    其他快捷键

    模拟点击事件

    用取色器获取某个点的坐标,模拟点击按钮,代码如下

    init(0)  --初始化(0,0)坐标
    mSleep(3*1000)  --睡眠三秒,防止坐标没初始化好
    --[[模拟点击事件]]--
    touchDown(1080,582)  -- 点下某个像素点
    mSleep(20)  -- 睡眠20ms
    touchUp(1080,582)   --  从像素点上抬起抬起

    智能找色脚本

    用到findMultiColorInRegionFuzzy方法,即区域多点找色

     游戏:萌犬变变变

    首先用颜色拾取器将箱子的三个点取下来(相当于识别物体),然后按住shift框选识别区域。点击生成脚本,复制最后一栏。

    代码如下

    init(0)  -- 启动初始坐标
    mSleep(3*1000)   -- 睡眠三秒防止没有初始化成功
    while (true) do  -- 无限执行
        --[[刚才颜色拾取器生成的脚本,返回的是第一个值的坐标]]--
        x,y = findMultiColorInRegionFuzzy( 0xbd8c5a, "-29|-47|0xbd8c5a,-51|-2|0x000000", 90, 34, 196, 668, 1042) 
        if(x~= -1 and y~= -1)  -- 根据多点颜色区域模糊查色返回的结果
        then
            touchDown(x, y)   -- 点击事件
            mSleep(20)
            touchUp(x, y)
        end
    end

    TSLib库

    这个是触动精灵自己的,用法要看官方文档

    首先在最上面加载TSLib库

    require("TSLib")

    封装一些通用函数

    -- 根据坐标点击
    function click(x,y)
        if(x~= -1 and y~= -1)  -- 根据多点颜色区域模糊查色返回的结果
        then
            touchDown(x, y)   -- 点击事件
            mSleep(20)
            touchUp(x, y)
        end
        mSleep(5*1000)
    end
    -- 打印坐标,调试用
    function showClick(x,y)
        dialog('返回视屏坐标x'..x..','..y)
    end

    multiColor

    多点比色,用来判断界面

    require "TSLib"--使用本函数库必须在脚本开头引用并将文件放到设备 lua 目录下
    --全部坐标点和颜色一致时返回 true,== true 可省略不写
    --判断是否为某个界面
    if multiColor({{75, 1026, 0x9b9b9b},{214,1028,0x9b9b9b},{341,1038,0xff3031},{357,1037,0xfff6f6},{507,1028,0x9b9b9b},{642,1032,0x9b9b9b}},80,false) == true then
            x,y = findMultiColorInRegionFuzzy( 0x191f25, "1|0|0x191f25,2|0|0x191f25,3|0|0x191f25", 90, 22, 190, 690, 958) --  查找指定区域内黑色的文字
         --showClick(x,y); 调用封装的函数,显示坐标轴
         click(x,y) --点击进入视屏
         mSleep(3*1000) --观看3分钟
         click(40,74); --点击返回
         touch():on(354,646):move(348,414):off()
         mSleep(5*1000)
    end

    便捷UI

    便捷UI文档 

    信息提示脚本

    官网文档

    信息提示脚本主要用于调试用,注意手机要开启悬浮框权限

    dialog

    阻塞式信息,会阻塞脚本,慎用

    toast

    异步信息,建议用这个,toast显示几秒,后面要用mSleep等待几秒,不然下面取色取到toast可能会出问题

    逐行获取文本文件数据

    逐行读取文本代码如下

    for line in io.lines("main.lua") do
       print(line)
    end

    控制台输出指定文件的数据 

    --获取文件路径,serPath为触动精灵所在目录
    local file = userPath().."/res/密令.txt"  
        if file then 
            for line in io.lines(file) do  -- 遍历文件里的内容
                inputText(line)  -- 输出到控制台
                mSleep(2000)
            end
            dialog("输入完毕", 1)
            lua_exit()  -- 退出lua程序
        end    

    防锁屏

    判断屏幕是否为锁定状态 

    代码如下

    flag = deviceIsLock();      --如果要在设备自启动时解锁屏幕直接使用 unlockDevice 函数即可
    if flag == 0 then
        dialog("未锁定",3);
    else
        unlockDevice(); --解锁屏幕
    end

    主屏幕按键

    API

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

    报错友善提示

    function main(...)
        error("这是一个错误演示!",2)  -- 手动抛出一个异常
        return 0
    end
    
    neo,errmsg = pcall(main)   -- 保护模式调用,第一个参数为是否返回异常,第二个参数为返回的异常信息
    if neo then   -- 如果不返回异常
        dialog(errmsg, time)  
    else 
        --返回异常时弹出友善提示框
        user_Choosen = dialogRet('很抱歉辅助出现异常,是否将错误信息写入剪切板以回报开发者!',"积极回报","残忍拒绝" ,"",0)   
        if user_Choosen == 0  then   -- 如果点击确定
            writePasteboard(errmsg)  -- 复制到粘贴板
            dialog('错误信息已经写入剪切板!',5)  -- 提示用户
        end
    end

    调用Http发送数据

    local url = string.format("http://www.***com:9002/pubApi/uLogin?uName=%s&pWord=%s", account, password)  -- 生成url
    local code, header, body = http.get(url, 10)  --发送请求,10秒超时.code、header、body不解释
    if code == 200 then  -- 如果返回为200时
        if body == "False" then 
            return false
        end
        return true
    end
  • 相关阅读:
    Python基础
    SQL脚本
    PDF技术之-jasperreports的使用
    redis缓存和mysql数据库如何保证数据一致性
    理解MySQL的乐观锁,悲观锁与MVCC
    intellj idea创建maven项目一直处于加载的解决问题
    Linux目录详解,软件应该安装到哪个目录
    总结
    总结
    总结
  • 原文地址:https://www.cnblogs.com/aeolian/p/10420180.html
Copyright © 2011-2022 走看看