基於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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM