Android 台灣中文網

標題: 觸摸精靈基礎腳本編寫 [打印本頁]

作者: dick52014    時間: 2015-9-23 15:42
標題: 觸摸精靈基礎腳本編寫
本帖最後由 dick52014 於 2017-8-10 10:20 編輯

觸摸精靈基礎腳本編寫
我是服務業,所以用一些上班下班空閒時間自己研究,會的不多,但是還可以寫出一些基本腳本,給要試著寫簡單腳本掛機的玩家參考,覺得好幫忙評個分喲!

首先說錄製,錄製來掛網的腳本最容易出錯,也最容易寫,相信大家都試過了,三不五時就停住,亂點,如果沒基礎寫腳本又要錄製來掛,就在會因為網路延遲的地方多等幾秒,一定要多幾秒,因為你掛網就是用你不能玩,或是想休息讓他自己玩的時間,所以跑多少算多少,不要為了多跑幾次而卡住,到頭來只有開螢幕浪費電而已。

有些人手機連錄製也會亂點
記得到設定裡面
螢幕測試點一次
下面圖像引擎優化
裡面兼容性打勾
這樣就可以了

要有效率掛網至少來學個基本腳本怎麼寫
第一最多用的就判別座標出現顏色就點,
比如說螢幕中間(如200,300)座標出現,灰色((確定)框框邊緣顏色之類的),就去點擊他。
首先你先用錄製腳本去找你要找顏色的點
然後再放到取色腳本


DESCRIPTION="颜色获取";

--实用屏幕参数
SCREEN_RESOLUTION="480x800";
SCREEN_COLOR_BITS=32;

x1=           108     ;     --座標1
y1=           199       ;

x2=        101     ;     --坐标2
y2=        132       ;

x3=        293       ;     --坐标3
y3=        824      ;

x4=        170       ;     --坐标4
y4=        812       ;

function log(txt)
date = os.date("%m/%d/%Y-%H:%M:%S");
file = io.open("/mnt/sdcard/Touchelper/cooler.txt","a");
file:write(date.."
"..txt.."
");
file:write("
");
file:close();
end

function main()
m1= getColor(x1, y1);
m2= getColor(x2, y2);
m3= getColor(x3, y3);
m4= getColor(x4, y4);

log("坐标1:("..x1..","..y1..")HEX:"..string.format("0x%06x", m1).."
".."坐标2:("..x2..","..y2..")HEX:"..string.format("0x%06x",m2).."
".. "坐标3:("..x3..","..y3..")HEX:"..string.format("0x%06x", m3).."
".."坐标4:("..x4..","..y4..")HEX:"..string.format("0x%06x",m4) );

for i=1,3 do
notifyMessage("坐标1:("..x1..","..y1..")HEX:"..string.format("0x%06x", m1).."
".."坐标2:("..x2..","..y2..")HEX:"..string.format("0x%06x",m2).."
".. "坐标3:("..x3..","..y3..")HEX:"..string.format("0x%06x", m3).."
".."坐标4:("..x4..","..y4..")HEX:"..string.format("0x%06x",m4));
end
mSleep(3000);
end

你要找的顏色座標輸入到座標1~4都可以
這個腳本可以一次抓四個座標顏色
然後儲存
在到你要抓顏色的畫面播放
就會顯示出顏色代碼
如果來不及記下了可以到

mnt/sdcard/Touchelper/cooler.txt
這裡看
有了座標跟顏色代碼
就可以用
A等於(200,300)
如果A等於(剛剛抓的顏色代碼)
就點擊(你要點的地方)
A = getColor(200, 300)
  
if A == 剛剛抓的顏色代碼

then   
        
        mSleep(500);
        touchDown(你要點的地方);
        mSleep(100);
        touchUp(0);
        mSleep(15000);
end

大概這樣
也有進階一點就是
如果A出現剛剛抓的顏色
就點擊你要的地方1
如果沒有出現剛剛顏色
就點擊你要的地方2
腳本則變成
A = getColor(你要找顏色的座標)
--轉珠  
if A == 你要的顏色

then   
        
        mSleep(500);
        touchDown(你要點的地方座標1);
        mSleep(100);
        touchUp(0);
        mSleep(15000);
        else   
        mSleep(500);
        touchDown(你要點的地方座標2);
        mSleep(100);
        touchUp(0);
        mSleep(15000);
        end
注意如果腳本中多一個if
則結尾要多一個end
範例腳本
gg = getColor(357, 182)
  
if gg == 0x9c4d08

then   
        
        mSleep(500);
        touchDown(0,101,132);
        mSleep(100);
        touchUp(0);
        mSleep(15000);
end

再來就是找圖語法
找圖的話觸摸精靈基本上都要用.bmp的格式
才能抓的到
而且最好手機抓大圖的時候就直接用腳本抓bmp
附上腳本

DESCRIPTION="。";

-- 适用屏幕参数
SCREEN_RESOLUTION="720x1280";
SCREEN_COLOR_BITS=32;

-- 主入口
function main()
mSleep(3000);
    snapshotScreen(string.format("/mnt/sdcard/%s.bmp", os.time()));
end
執行後抓當前螢幕圖片bmp格式存至內建sdcard空間
然後再切割你要的地方下來
中間不要轉換過格式,比較不會出錯
然後腳本的部分
,,,
以下是區域模糊找圖
在區域左上(36、509)到區域右下(409、1778)中找圖片精準度80
x, y = findImageInRegionFuzzy("/mnt/sdcard/圖片名稱.bmp", 80, 36, 509, 409, 1778); -- 將找到的圖片的左上角坐標保存在x和y中,如果没找到,x和y的值為-1
if x ~= -1 and y ~= -1   --如果x.y 不等於負一(就是有找到的意思,因為有找到就會有座標了)

then   
        mSleep(700);
        touchDown(0, x+5, y+10);   -- 則點擊找到的x加5,y加10的地方(因為找到圖片是左上角,有時剛好是要點的邊緣,點了沒反應所以加往右下一點的地方)
        mSleep(100);
        touchUp(0);
        mSleep(500);
end



x, y = findImage("/mnt/sdcard/你要的圖片.bmp");全螢幕找圖
x, y = findImageFuzzy("/mnt/sdcard/你要的圖片.bmp", 80);全螢幕模糊找圖精準度80
x, y = findImageInRegion("/mnt/sdcard/你要的圖片.bmp", 左上x, 左上y, 右下x, 右下y);區域找圖
以上觸摸精靈裡面也有用法跟第一個範例差不多

施放buff方法
RPG類遊戲常常有需要施放buff

function addBuffer1() -- 循環檢測和補充buffer1
while true do -- 主循環
if getColor(100, 100) ~= 0x000000 then -- 如果没有buffer1
touchDown(0, 100, 100); -- 施放buffer1
touchUp(0);
end
mSleep(500);
coroutine.yield(); -- 回原本循環
end
end

function addBuffer2() -- 循環檢測和施放buffer2
while true do -- 主循環
if getColor(200, 200) ~= 0x000000 then -- 如果没有buffer2
touchDown(0, 200, 200); -- 施放buffer2
touchUp(0);
end
mSleep(500);
coroutine.yield(); -- 回原本循環
end
end
function main()
co1 = coroutine.create(addBuffer1);
co2 = coroutine.create(addBuffer2);
while true do
coroutine.resume(co1);
coroutine.resume(co2);
end
end
裡面座標色碼,在找色找圖腳本都有
套用上去而已

開啟或關閉app指令
appRun("要開啟的app");
appKill("要關閉的app");
括號中是要輸入app名稱
但不是中文名稱喔
我是用es檔案瀏覽器
然後到sdcard/android/data
然後找你要開啟app的那個資料夾
複製他的名稱
輸入到空格就可以了
不懂可以先提問
日後會陸續補充上來

補充內容 (2016-7-5 14:24):
有個區域抓圖示範影片
https://youtu.be/YC1JQ6XOYjk

補充內容 (2016-7-5 14:28):
找圖路徑
一般建議直接放內建SDCARD
路徑設 mnt/sdcard/檔案名稱.bmp
任何手機都通用
作者: opwolf    時間: 2015-9-24 10:12
非常用心的文章~完全考量使用者立場~

能有這樣的立場與想法 確實難得 大家也以此榜樣勉勵之



作者: boy810512    時間: 2016-8-21 04:46
這段語法我放進去一直錯誤,請問有寫錯嗎?
log("坐标1:("..x1..","..y1..")HEX:"..string.format("0x%06x", m1).."
".."坐标2:("..x2..","..y2..")HEX:"..string.format("0x%06x",m2).."
".. "坐标3:("..x3..","..y3..")HEX:"..string.format("0x%06x", m3).."
".."坐标4:("..x4..","..y4..")HEX:"..string.format("0x%06x",m4) );

for i=1,3 do
notifyMessage("坐标1:("..x1..","..y1..")HEX:"..string.format("0x%06x", m1).."
".."坐标2:("..x2..","..y2..")HEX:"..string.format("0x%06x",m2).."
".. "坐标3:("..x3..","..y3..")HEX:"..string.format("0x%06x", m3).."
".."坐标4:("..x4..","..y4..")HEX:"..string.format("0x%06x",m4));
end

作者: ChangMichael    時間: 2016-8-30 08:16
讚一個,貼代碼的時候可以利用快速工具列上面的<>把code放裡面會比較整齊,方便觀看。
  1. -- 主入口
  2. function main()
  3. mSleep(3000);
  4.     snapshotScreen(string.format("/mnt/sdcard/%s.bmp", os.time()));
  5. end
複製代碼

作者: liuedd    時間: 2017-5-18 19:03
最近在研究寫腳本,很有幫助
作者: @@@@____    時間: 2017-7-23 08:59
語法沒理解 也沒辦法看懂                                          




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1