首页/电脑软件/ 【触摸精灵LUA脚本】基本语法、自带函数

【触摸精灵LUA脚本】基本语法、自带函数

作者:神奇   分类:电脑软件   时间:2015-08-14 12:30:08  标签:


    LUA保留字:

       If (如果)

       Then(那么)

       Do(做)

       And(和)

       For(计数)

       until(除非)

       while(当)

       Not(如果没有)

       Or(或者)

       Else(否则)

       End(结束)

       Function(函数)

       break 跳出

       elseif 另外如果

       false 假

       in 遍历

       local 私有变量

       nil 无效值

       repeat  直到满足

       return  返回

       true 真

       判定跳出死循环就可以用os.difftime() 


    一、基本语法:

    function main()  --主程序入口,“--”在这里是注释符
    
                           --这里写程序流程
    
    end                  --主程序结束

    二、软件自带函数:

    2.2.1 logDebug()
    
    输出调试信息到系统日志
    
        参数
            参数1:调试信息(string)
        返回值
            无
        示例
    
            logDebug("hello"); -- 输出"hello"到系统日志
                      
    
    2.2.2 mSleep()
    
    进行毫秒级别延迟
    
        参数
            参数1:毫秒数(number)
        返回值
            无
        示例
    
            mSleep(1000); -- 延迟1秒
                      
    
    2.2.3 notifyMessage()
    
    以文字提示框的方式通知用户
    
        参数
            参数1:提示文字(string)
        返回值
            无
        示例
    
            notifyMessage("hello"); -- 在屏幕上显示"hello"
                      
    
    2.2.4 notifyVibrate()
    
    以震动方式通知用户
    
        参数
            参数1:毫秒数(number)
        返回值
            无
        示例
    
            notifyVibrate(1000); -- 让设备震动1秒
                      
    
    2.2.5 notifyVoice()
    
    以播放音频的方式通知用户
    
        参数
            参数1:音频路径(string)
        返回值
            无
        示例
    
            notifyVoice("/mnt/sdcard/a.mp3"); -- 播放路径为"/mnt/sdcard/a.mp3"的音频
                      
    
    2.2.6 touchDown()
    
    发送手指按下事件
    
        参数
            参数1:手指ID, 范围0~128, 用于标识一个手指,在后续的touchMove()和touchUp()中需要使用(number)
            参数2:X坐标 (number)
            参数3:Y坐标 (number)
        返回值
            无
        示例
    
            touchDown(0, 100, 100); -- ID为0的手指在坐标为(100, 100)的点按下
            touchUp(0);             -- ID为0的手指抬起
                      
    
    2.2.7 touchMove()
    
    发送手指移动事件
    
        参数
            参数1:touchDown()时传入的手指ID(number)
            参数2:X坐标 (number)
            参数3:Y坐标 (number)
        返回值
            无
        示例
    
            touchDown(0, 100, 100); -- ID为0的手指在坐标为(100, 100)的点按下
            touchMove(0, 200, 100); -- ID为0的手指滑动到坐标为(200, 100)的点
            touchUp(0);             -- ID为0的手指抬起
                      
    
    2.2.8 touchUp()
    
    发送手指抬起事件
    
        参数
            参数1:touchDown()时传入的手指ID(number)
        返回值
            无
        示例
    
            touchDown(0, 100, 100); -- ID为0的手指在坐标为(100, 100)的点按下
            touchUp(0);             -- ID为0的手指抬起
                      
    
    2.2.9 getScreenResolution()
    
    获取当前屏幕分辨率
    
        参数
            无
        返回值
            返回1:宽度(number)
            返回2:高度(number)
        示例
    
            w, h = getScreenResolution();                  -- 将屏幕宽度和高度分别保存在变量w、h中
            notifyMessage(string.format("%d,%d\n", w, h)); -- 将宽度和高度用提示框显示到屏幕上
                      
    
    2.2.10 getScreenColorBits()
    
    获取当前屏幕色彩位数
    
        参数
            无
        返回值
            返回1:色彩位数(number)
        示例
    
            c = getScreenColorBits();                -- 将屏幕色彩位数保存在变量c中
            notifyMessage(string.format("%d\n", c)); -- 将色彩位数用提示框显示到屏幕上
                      
    
    2.2.11 getColor()
    
    获取指定像素的颜色
    
        参数
            参数1:X坐标 (number)
            参数2:Y坐标 (number)
        返回值
            返回1:色彩位数(number)
        示例
    
            c = getColor(100, 100);         -- 将坐标为(100,100)的点的颜色保存在变量c中
            if c == 0x0000ff then           -- 如果该点颜色为0x0000ff(纯蓝色)
                touchDown(0, 100, 100);     -- 那么点击该坐标
                touchUp(0);
            end
                      
    
    2.2.11 getColorRGB()
    
    获取指定像素颜色的R、G、B三个值
    
        参数
            参数1:X坐标 (number)
            参数2:Y坐标 (number)
        返回值
            返回1:R(number)
            返回2:G(number)
            返回3:B(number)
        示例
    
            r, g, b = getColorRGB(100, 100);              -- 将坐标为(100,100)的点的颜色的R、G、B分别保存在变量r、g、b中
            if r == 0x00 and b == 0x00 and g == 0xff then -- 如果该点颜色为0x0000ff(纯蓝色)
                touchDown(0, 100, 100);                   -- 那么点击该坐标
                touchUp(0);
            end
                      
    
    2.2.12 findColor()
    
    全屏找色
    
        参数
            参数1:要找的颜色(number)
        返回值
            返回1:X坐标,如果没找到返回-1(number)
            返回2:Y坐标,如果没找到返回-1(number)
        示例
    
            x, y = findColor(0x0000ff); -- 在全屏范围找到第一个颜色为0x0000ff的点,将其坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then -- 如果找到了
                touchDown(0, x, y);     -- 点击那个点
                touchUp(0);
            end
                      
    
    2.2.13 findColorFuzzy()
    
    全屏模糊找色
    
        参数
            参数1:要找的颜色(number)
            参数2:精确度 (number)
        返回值
            返回1:X坐标,如果没找到返回-1(number)
            返回2:Y坐标,如果没找到返回-1(number)
        示例
    
            x, y = findColorFuzzy(0x0000ff, 90); -- 在全屏范围找到第一个颜色为0x0000ff的点,精确度为90%,将其坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then          -- 如果找到了
                touchDown(0, x, y);              -- 点击那个点
                touchUp(0);
            end
                      
    
    2.2.14 findColorInRegion()
    
    区域找色
    
        参数
            参数1:要找的颜色 (number)
            参数2:区域左上角X坐标(number)
            参数3:区域左上角Y坐标(number)
            参数4:区域右下角X坐标(number)
            参数5:区域右下角Y坐标(number)
        返回值
            返回1:X坐标,如果没找到返回-1(number)
            返回2:Y坐标,如果没找到返回-1(number)
        示例
    
            x, y = findColorInRegion(0x0000ff, 100, 100, 200, 200); -- 在区域[(100,100)(200,200)]范围找到第一个颜色为0x0000ff的点,将其坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then                             -- 如果找到了
                touchDown(0, x, y);                                 -- 点击那个点
                touchUp(0);
            end
                      
    
    2.2.15 findColorInRegionFuzzy()
    
    区域模糊找色
    
        参数
            参数1:要找的颜色 (number)
            参数2:精确度 (number)
            参数3:区域左上角X坐标(number)
            参数4:区域左上角Y坐标(number)
            参数5:区域右下角X坐标(number)
            参数6:区域右下角Y坐标(number)
        返回值
            返回1:X坐标,如果没找到返回-1(number)
            返回2:Y坐标,如果没找到返回-1(number)
        示例
    
            x, y = findColorInRegionFuzzy(0x0000ff, 90, 100, 100, 200, 200); -- 在区域[(100,100)(200,200)]范围找到第一个颜色为0x0000ff的点,精确度为90%,将其坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then                                      -- 如果找到了
                touchDown(0, x, y);                                          -- 点击那个点
                touchUp(0);
            end
                      
    
    2.2.16 findImage()
    
    全屏找图
    
        参数
            参数1:要找的图片的路径,只支持BMP格式(string)
            参数2:(可选)指定图片中透明颜色(number)
        返回值
            返回1:X坐标,如果没找到返回-1(number)
            返回2:Y坐标,如果没找到返回-1(number)
        示例
    
            x, y = findImage("/mnt/sdcard/a.bmp"); -- 在全屏范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,将其左上角坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then            -- 如果找到了
                touchDown(0, x, y);                -- 点击那个点
                touchUp(0);
            end
    
            x, y = findImage("/mnt/sdcard/a.bmp", 0xffffff); -- 在全屏范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,忽略图片中颜色为0xffffff(黑色)的点,将其左上角坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then                      -- 如果找到了
                touchDown(0, x, y);                          -- 点击那个点
                touchUp(0);
            end
                      
    
    2.2.17 findImageFuzzy()
    
    全屏模糊找图
    
        参数
            参数1:要找的图片的路径,只支持BMP格式(string)
            参数2:精确度 (number)
            参数3:(可选)指定图片中透明颜色(number)
        返回值
            返回1:X坐标,如果没找到返回-1(number)
            返回2:Y坐标,如果没找到返回-1(number)
        示例
    
            x, y = findImageFuzzy("/mnt/sdcard/a.bmp", 90); -- 在全屏范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,精确度为90,将其左上角坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then                     -- 如果找到了
                touchDown(0, x, y);                         -- 点击那个点
                touchUp(0);
            end
    
            x, y = findImageFuzzy("/mnt/sdcard/a.bmp", 90, 0xffffff); -- 在全屏范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,精确度为90,忽略图片中颜色为0xffffff(黑色)的点,将其左上角坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then                               -- 如果找到了
                touchDown(0, x, y);                                   -- 点击那个点
                touchUp(0);
            end
                      
    
    2.2.18 findImageInRegion()
    
    区域找图
    
        参数
            参数1:要找的图片的路径,只支持BMP格式(string)
            参数2:区域左上角X坐标(number)
            参数3:区域左上角Y坐标(number)
            参数4:区域右下角X坐标(number)
            参数5:区域右下角Y坐标(number)
            参数6:(可选)指定图片中透明颜色(number)
        返回值
            返回1:X坐标,如果没找到返回-1(number)
            返回2:Y坐标,如果没找到返回-1(number)
        示例
    
            x, y = findImageInRegion("/mnt/sdcard/a.bmp", 100, 100, 200, 200); -- 在区域[(100,100)(200,200)]范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,将其左上角坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then                                        -- 如果找到了
                touchDown(0, x, y);                                            -- 点击那个点
                touchUp(0);
            end
    
            x, y = findImageInRegion("/mnt/sdcard/a.bmp", 100, 100, 200, 200, 0xffffff); -- 在区域[(100,100)(200,200)]范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,忽略图片中颜色为0xffffff(黑色)的点,将其左上角坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then                                                  -- 如果找到了
                touchDown(0, x, y);                                                      -- 点击那个点
                touchUp(0);
            end
                      
    
    2.2.19 findImageInRegionFuzzy()
    
    区域模糊找图
    
        参数
            参数1:要找的图片的路径,只支持BMP格式(string)
            参数2:精确度 (number)
            参数3:区域左上角X坐标(number)
            参数4:区域左上角Y坐标(number)
            参数5:区域右下角X坐标(number)
            参数6:区域右下角Y坐标(number)
            参数7:(可选)指定图片中透明颜色(number)
        返回值
            返回1:X坐标,如果没找到返回-1(number)
            返回2:Y坐标,如果没找到返回-1(number)
        示例
    
            x, y = findImageInRegionFuzzy("/mnt/sdcard/a.bmp", 90, 100, 100, 200, 200); -- 在区域[(100,100)(200,200)]范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,精确度为90,将其左上角坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then                                                 -- 如果找到了
                touchDown(0, x, y);                                                     -- 点击那个点
                touchUp(0);
            end
    
            x, y = findImageInRegionFuzzy("/mnt/sdcard/a.bmp", 90, 100, 100, 200, 200, 0xffffff); -- 在区域[(100,100)(200,200)]范围找到第一个路径为"/mnt/sdcar/a.bmp"的图片,精确度为90,忽略图片中颜色为0xffffff(黑色)的点,将其左上角坐标保存到变量x和y中
            if x ~= -1 and y ~= -1 then                                                           -- 如果找到了
                touchDown(0, x, y);                                                               -- 点击那个点
                touchUp(0);
            end
                      
    
    2.2.20 keepScreen()
    
    开启/关闭屏幕保持。当开启屏幕保持时,后续的找图、找色等函数不会重新获取屏幕图像,而是使用开启屏幕保持之前的屏幕图像;当关闭屏幕保持时,后续的找图、找色等函数会每次都重新获取屏幕图像。适当使用此函数可以优化脚本运行效率
    
        参数
            参数1:是否启用屏幕保持(boolean)
        返回值
            无
        示例
    
            keepScreen(true);                                                         -- 开启屏幕保持
            if getColor(100, 100) == 0x000000 or getColor(200, 200) == 0x000000 then  -- 进行2次取色,由于启用了屏幕保持,这2次取色不会重新获取2次屏幕图像,这样可以提高性能
                notifyMessage("yes");                                                 -- 如果(100,100)和(200,200)坐标有一个颜色为黑色,输出"yes"
            else                                                                      -- 否则
                notifyMessage("no");                                                  -- 输出"no"
            end
            keepScreen(false);                                                        -- 关闭屏幕保持
                    
    
    2.2.21 snapshotScreen()
    
    全屏截图
    
        参数
            参数1:保存截图的路径(string)
        返回值
            无
        示例
    
            snapshotScreen("/mnt/sdcard/a.bmp"); -- 将全屏截图保存到路径为"/mnt/sdcard/a.bmp"的图片中
                    
    
    2.2.22 snapshotRegion()
    
    区域截图
    
        参数
            参数1:保存截图的路径(string)
            参数2:区域左上角X坐标(number)
            参数3:区域左上角Y坐标(number)
            参数4:区域右下角X坐标(number)
            参数5:区域右下角Y坐标(number)
        返回值
            无
        示例
    
            snapshotRegion("/mnt/sdcard/a.bmp", 100, 100, 200, 200); -- 将区域[(100,100)(200,200)]的截图保存到路径为/mnt/sdcard/a.bmp的图片中
                    
    
    2.2.23 getDeviceID()
    
    获取设备串号
    
        参数
            无
        返回值
            设备串号
        示例
    
            deviceID = getDeviceID(); -- 将设备ID保存到deviceID变量中
                    
    
    2.2.24 getNetTime()
    
    获取网络时间
    
        参数
            无
        返回值
            网络时间, 该时间与lua的os.time()函数一样,返回的是UTC时间1970年1月1日0时0分0秒到现在流逝的秒数,可以配合os.date()转换成方便阅读的格式。返回-1表示不能连接网络时间服务器
        示例
    
            time = getNetTime();
            if time ~= -1 then
                tt = os.date("*t", time);
                if tt.year > 2014 and tt.month > 2 and tt.day > 15 and tt.hour > 12 and tt.sec > 30 then
                    notifyMessage("当前时间超过了2013年2月15日12点30分");
                end
            else
                notifyMessage("请连接网络");
            end
                    
    
    2.2.25 rotateScreen()
    
    旋转屏幕的坐标体系, 后续的找图、找色、截图、触摸动作都会使用新的坐标体系。
    
        参数
            0: 保持原本的坐标体系。对于IOS设备来说,此时HOME键在下方时的屏幕左上角为原点。
            90: 坐标系统向右转90度。对于IOS设备来说,此时HOME键在右方时的屏幕左上角为原点
            -90: 坐标系统向左转90度。对于IOS设备来说,此时HOME键在左方时的屏幕左上角为原点
            180: 坐标系统倒立。对于IOS设备来说,此时HOME键在下方时的屏幕左上角为原点
        返回值
            无
        示例
    
            rotateScreen(90);         -- 旋转坐标体系向右90度,大多数横屏游戏使用此坐标体系.
            touchDown(0, 100, 100);   -- 发送触摸动作,此时点击的点使用新的坐标体系.
            touchUp(0);
                    
    (此部分摘自触摸精灵手册)
    
    三、论坛中发现的一个比较好用的原创找色函数:


    --H.R制作,H.R LUA脚本教学群:165488683
    
    --参数说明:一个主色值,相似度及查找范围,这个和一般找色没差别
            --W,H这两个参数为主色找到后找辅色的范围,W表示主色前后的距离,H表示主色上下的距离,这样找辅色的区域总大小是2W*2H  
    --ARG用来存放辅助色的数组,我也不知道什么原因,触摸使用可变参数总是报错,不得于只有使用一个数组来做参数,这样我们的辅助色数量也是可变的,只是在调用的时候,得用{}把色值包起来。如:{0xDBEEFA,0xDCEFFC,0xDDEEFB,0x1295E9,0xff0000}。
    
    --返回值说明:返回三个参数,分别是成功标志,找到是TRUE,找不到是FALSE,主色值坐标,找到就是有效点坐标点,找不到返回-1.
    
    function mutifindcolor(zhusezhi,xsd,x1,y1,x2,y2,w,h,arg)
    cgbj=0;
    repeat
            xz,yz=findColorInRegionFuzzy(zhusezhi,xsd,x1,y1,x2,y2);
            if xz>0 then
                    for i,v in pairs(arg) do
                            local xf,yf=findColorInRegionFuzzy(arg[i],xsd,xz-w,yz-h,xz+w,yz+h);
                            if xf>0 then
                                    cgbj=1;
                                    else
                                    cgbj=0;
                                    break;
                            end
                    end
                    if cgbj==1 then
                            return true,xz,yz;
                    end
                    xtmp,ytmp=xz+1,yz;
                    repeat
                    xz1,yz1=findColorInRegionFuzzy(zhusezhi,xsd,xtmp,ytmp,x2,ytmp);
                      if xz1>0 then
                        for i,v in pairs(arg) do
                                local xf,yf=findColorInRegionFuzzy(arg[i],xsd,xz1-w,yz1-h,xz1+w,yz1+h);
                                if xf>0 then
                                        cgbj=1;
                                        else
                                        cgbj=0;
                                        break;
                                end
                        end
                        if cgbj==1 then
                               return true,xz1,yz1;
                        end
                        xtmp=xz1+1;                        
                      end
                    until xz1<0
                    y1=yz+1;
            end
    until xz<0
    return false,-1,-1;
    end
    --使用范例
    function main()
    f,x,y=mutifindcolor(0xDBEEFB,85,700,0,1023,590,10,10,{0xDBEEFA,0xDCEFFC,0xDDEEFB,0x1295E9,0xff0000});
            if f then    --如果找到,则点击
                    click(x,y);
            else
               notifyMessage("没找到!");
               mSleep(2000);
            end
    end
    --点击子程序(执行一次点击)
    function click(x,y)
            touchDown(0, x, y);
            mSleep(90);
            touchUp(0);        
    end
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

评论:

发表评论:

code