|
heavencanceller10032 發表於 Oct 4, 2016 10:28:05 GMT
只是個簡單的刷素材/練等工具而已 如配合使用修改版 效果更是贊!! 注意: 官方條約有說不可使用任何自動化工具, 如要使用後果請自行承擔!YT: 功能: 一般關卡、曜日多人單人皆可打 有需要選擇難度再調難度,否則設定"N/A"就行 自己慢慢實驗各項功能摟~ 載點: MediaFire解壓縮後執行app.lua那個檔案 ps. 定位會花一段蠻長的時間, 有的機器會接近2分鐘 只要左上角有back 右上角有home 的畫面就可以進行定位 另外關於AnkuLua有幾點希望能改進一下 1.截圖跟輸出速度真的很慢 一個click卡了快0.5秒 要短時間依序快速點指定的座標幾乎做不到 2.加入非同步的比對 截圖速度跟比較速度慢而且無法提升的話 至少弄一個非同步的比較 把OpenCV的執行丟到另一個Thread 讓lua可以繼續執行 等比較結果出來之後再呼叫一個lua的callback 主要是同時要點擊跟比較的時候很有用 要不是AnkuLua主程式有混淆不好加功能 否則我都想自己patch一下 ex: funtion loop() local data = nil local isRet = false Region(X, Y, Xplus, Yplus):existsAsync('abc.png', 0, function(ret) data = ret isRet = true end) -- non-blocking 直接跑下去 而非卡到結果出來 -- do something can't be block -- ...
if isRet then -- polling的方式檢查 isRet = false -- do something when result send back -- ... end end 3. getColor()說明文件不夠清楚 這個函數在設定Settings:setCompareDimension()之後 輸入的座標不是絕對座標, 會有一個縮放係數,建議補一下文件 這個坑害我花了不少時間debug
|
|
|
AnkuLua 發表於 Oct 5, 2016 11:32:30 GMT
|
|
|
heavencanceller10032 發表於 Oct 6, 2016 4:29:15 GMT
謝謝 getColor()用這段code測試的 local ScreenSizeX = getRealScreenSize():getX() local CompareDimension = ScreenSizeX * 0.5 -- 用 resize tool之類的測出來 local R = CompareDimension / ScreenSizeX local x, y = 100, 100 -- 螢幕上的絕對座標
local r, g, b = getColor(Location(x, y)) -- 正確的位置 print('r, g, b = '..r..', '..g..', '..b) print('------------')
Settings:setCompareDimension(true, CompareDimension)
local r, g, b = getColor(Location(x, y)) -- 錯誤的位置 print('r, g, b = '..r..', '..g..', '..b)
local r, g, b = getColor(Location(x * R, y * R)) -- 正確的位置 print('r, g, b = '..r..', '..g..', '..b) 因為個人習慣自己計算絕對座標去比對&點擊 只要想辦法得到偏移跟縮放倍率 就可以自動換算出螢幕上的絕對位置 剩下的程式完全不需要修改 之前設定過scriptDimention() 不知道它是怎換算成絕對座標 試了半天通通都是錯誤的 就乾脆不用它 只是沒想到setCompareDimension()也會影響到getColor()就是 Media Projection的部份 在RemixOS 3.0上面一直出現"Media Projection screenshot fail"無法使用 沒有去trace原因 Daemon剛剛測了一下 從43秒變成17秒 速度是快了不少 補一下自己弄的Linux/Mac安裝script 可能要自己加一下多個裝置的選擇部份 #!/bin/bash
ADB=adb
daemonFile="daemon/"
PS=`$ADB shell "ps" | grep "ama_daemon"` CPU=`$ADB shell getprop ro.product.cpu.abi | tr -d '\r'` SDK=`$ADB shell getprop ro.build.version.sdk | tr -d '\r'`
if [[ $PS == *"ama_daemon"* ]]; then PID=`echo $PS | tr -s ' '| cut -d' ' -f2` echo "kill old daemon...pid = $PID" $ADB shell "kill -9 $PID" fi
if [[ $CPU == *"x86"* ]]; then daemonFile="${daemonFile}x86/" else daemonFile="${daemonFile}armeabi-v7a/" fi daemonFile="${daemonFile}ama_daemon"
if [[ "$SDK" -ge 21 ]]; then daemonFile="${daemonFile}_pie" fi
echo $daemonFile
$ADB push $daemonFile "/data/local/tmp/ama_daemon" $ADB shell "/system/bin/chmod 0777 /data/local/tmp/ama_daemon" $ADB shell "nohup /data/local/tmp/ama_daemon /data/local/tmp/ama_daemon.log 2>/dev/null 1>/dev/null &" sleep 3
LOG=`$ADB shell "cat /data/local/tmp/ama_daemon.log"` if [[ $LOG == *"error"* ]]; then echo "Daemon installation fails." echo "Please re-install, or please reboot your device then re-install." echo "We are sorry to cause any inconvience." echo "Please email the device model and Android version to ankulua@gmail.com" echo "It will help us to improve." echo "===========================" echo $LOG exit -1 else echo "Daemon installation complete." fi
補充: 有root的情況下可以直接從AnkuLua啟動Daemon而不需要adb 用root權限執行"su shell"就是adb的權限了 接下來就跟一般Daemon操作方法一樣 希望之後的版本可以加進去一下
|
|
|
AnkuLua 發表於 Oct 6, 2016 12:03:32 GMT
首先,AnkuLua 就是設計使用者不必做這些繁雜的運算 一切都是AnkuLua 內部依照compareDimension 和scriptDimension 做轉換 因此,compareDimension 和 scriptDimension 一般情形下都不應該依照跑腳本的裝置重新改過 這樣一定是災難一場 compareDimension 就只有拿來做圖形比對時決定畫面截圖要縮放多少再做比較 詳請可以參考 腳本優化 ankulua-tw.boards.net/thread/23/scriptDimension 則是其他腳本地方關於 Region, Location, targetOffset 等用到 取個例子 setScriptDimension(true, 1280) click(Location(100, 200)) 在寬度 1280 的裝置,實際點擊的是 (100, 200) 在寬度 640 的裝置,實際點擊的是 (50, 100) 在寬度 2560的裝置,實際點擊的是 (200, 400) getColor() 會隨compareDimension 而變應該是AnkuLua的問題,會發生在compareDimension 和 scriptDimension 不同時 下一版改正,不知您是否願意幫忙測試
感謝您 Linux/Mac 的Daemon 安裝檔
root 直接安裝daemon 的部分,我們會研究
感謝您的貢獻
|
|
|
heavencanceller10032 發表於 Oct 6, 2016 15:13:56 GMT
應該說在不同解析度的裝置上 除了"倍率"以外常常還會有一個"偏移"存在 (計算一點都不煩雜, script的輸入座標*縮放倍率 + 偏移座標 = 裝置上的實際座標) 可是AnkuLua的api並沒有提供到"偏移"的解決方案 反而會因為只有"倍率"造成更麻煩的問題(連偏移都要乘上係數去處理) 以格林筆記來說好了 遊戲畫面一定是16:9 其他的解析度(16:9+)有可能會在上下補背景(y軸有位移,不知道佔多少比例) 或是左右補背景(16+:9)(x軸有位移,一樣不知道佔多少比例) 因此只計算倍率反而會出問題
最佳化 跟 參數設定這2篇那個時候看了很久 一直沒找到強制使用絕對座標的方法或是setScriptDimension()跟CompareDimension()的換算公式 最後實驗出不要設定setScriptDimension()就可以使用絕對座標 只是遇到了getColor()這個問題XD (可以幫忙測試,不過請不要期待回應速度) 至於CompareDimension()這個一定會隨裝置改變 畢竟截圖時的解析度跟實際跑的解析度通常都不同 建議API說明那邊補一下, 讓寫code的人可以完全掌握換算方法 就算要多1~2個步驟計算也無妨 (就像啥智能化、自動化,結果某些情況誤判還不能關掉就坑爹了)
想要在各種解析度相容性都好的重點: "偏移"跟"縮放倍率(XY軸可能會不同)"缺一不可 這是多年以來寫這類東西的實際經驗
|
|
|
AnkuLua 發表於 Oct 7, 2016 1:10:02 GMT
用AnkuLua 一般不建議用絕對座標去做,那就失去AnkuLua 的特性了 目前螢幕比例大部分是16:9(含1280:720, 1920:1080, 2560:1440 等) 或 16:10 (1280:800, 1920:1200, 2560:1600)
所謂位移一般發生在targetOffset(可以參考line rangers 或 七騎士腳本) 一般都可以免掉處理位移,可能一個是點到目標圖的下緣,一個是上緣
當然,要兼顧到4:3 這種比例的可能真的要去算了
感謝您的幫忙測試,apk 連結已私訊給您
|
|