AnkuLua 發表於 Nov 26, 2015 2:06:06 GMT
有一些非常重要的設定。有的是為了腳本能正常工作。有些則是是為了開發和除蟲
腳本工作相關設定
Settings:setCompareDimension(boolean compareByWidth, int pixels):
這個函數使用於圖形比對的解析度
compareByWidth: 如果我們要自動化的App是依照寬度縮放畫面,設置為true。對於大多數App,請設成true
pixels: 此值是執行圖形比對時螢度的解析度。根據compareByWidth的值的值設定成寬度或高度
Return value: 無
這是AnkuLua可以用相同的腳本在不同的設備正常工作的秘密。就拿我們的第一個例子為例,我們從寬度為960的設備抓圖。因此,我們的腳本相關設定如下
如果在不同解析度的裝置上執行這個腳本,所捕獲的畫面將先做縮放到960再做圖像匹配。
因為所有截圖都依照我們的設定縮放,所以腳本能在不同解析度的裝置上正確執行
有一件事要特別注意,解析度設定是App 可使用螢幕(App usable screen)解析度,不是裝置實際解析度
有導航條(navigation bar)的裝置是App 可用螢幕與實際螢幕不同的一個例子
在下面的圖中,App可使用的屏幕尺寸為黃色矩形內
getAppUsableScreenSize()
getRealScreenSize()
函數 getAppUsableScreenSize() 可用來取得App 可用螢幕解析度
函數 getRealScreenSize() 可用來取得裝置實際螢幕解析度
setImmersiveMode(enable)
如上所述,有些裝置有導航條
大部分的App不會用到這些導航條的區域
但在immersive 狀態下,App 可以設定讓導航條消失,並能用到這些區域
如果App是在immersive 狀態下, 請使用這個函數.
參考: Google對 Immersive 的解釋
autoGameArea(enable)
有些機器有瀏海,這些瀏海區域App和遊戲並不會用到,但用AnkuLua截圖時卻會出現在截圖中,容易造成腳本錯誤
Android P 以後有正式支援瀏海屏,可以偵測到瀏海高度
使用autoGameArea(true)可以讓AnkuLua 自動偵測不含瀏海的區域(Region)
一般使用建議設完immsersive 後,設定autoGameArea(true)
getGameArea()
設定完setImmersiveMode() 和 autoGameArea() 後可以使用getGameArea() 得到AnkuLua 截圖的區域 (Region)
範例:
下圖為一2246x1080 帶瀏海的機器,瀏海高度86
底下橫屏,瀏海在左邊;以下表格為setImmersiveMode() 和 autoGameArea() 各種設定在圖中的顏色與getGameArea() 的返回值
可以看出,setImmersiveMode(false); autoGameArea(true) 才是正確設定
setGameArea(Region region)
手動設定截圖的遊戲區域
有些遊戲在寬屏時是直接左右設為黑色,以維持遊戲區域的長寬比,例如下兩圖
這時只要用setGameArea() 將遊戲區域只包含中間,不包含左右黑色部分,就能不改動腳本其他部分,很簡單的讓腳本可以在下圖正確執行
Settings:setScriptDimension(boolean compareByWidth, int pixels):
這個函數是用於參照腳本內座標位置參考的App解析度
compareByWidth: 如果我們要自動化的App是依照寬度縮放畫面,設置為true。對於大多數App,請設成true
pixels: 此值是執行座標位置實時螢度的解析度。根據compareByWidth的值的值設定成寬度或高度
Return value: 無
這個值也是參照到App 可使用螢幕解析度
哪實會用到這個值? 舉下方這個腳本為例
Location(100,200) 是一個絕對的值。當執行的裝置與發展腳本裝置解析度不同時,它需要在運行設備進行縮放。scriptDimension 這個值將用來與值形裝置的解析度決定須要縮放多少
有沒有可能是比較維度(CompareDimension)和腳本維度(ScriptDimenstion)不同?是的
因為圖形比對速度和比較維度息息相關。因此,我們可以縮小所拍攝的圖像,並相應地設置的值。然後我們可以加快圖形比對處理
關於如何優化讓腳本能加快執行速度,請見腳本優化這一篇
setImagePath(String path)
這個函數用來設定AnkuLua載入比對圖檔的路徑
默認的路徑是起始腳本檔案的"image"目錄
Settings:setROI(Region reg)
更改預設的搜尋區域(也就是沒特別指定區域的搜尋相關函數所搜尋的區域)
預設值是全螢幕
如果 reg 是 nil,搜尋區域將設成全螢幕
Settings:getROI()
返回Settings:setROI() 所設定的區域
Settings:set(String var, double value)
var: AutoWaitTimeout 或 MinSimilarity
value: 當var 是 AutoWaitTimeout , value 的值就被用來當做默認的限時時間。當有些函數有限時功能但未提供時間時(例如wait()),這個值就被用來做為限時的時間
當var 是 MinSimilarity, value 的值就被用來當做默認的相似度。要更改S和P物件的默認相似度時,請用similar()函數.
Return value: none
如果這些值都沒被設定,默認的 AutoWaitTimeout 是三秒. 默認的 MinSimilarity是 0.7.
Settings:get(String var)
var: AutoWaitTimeout 或MinSimilarity
Return value: AutoWaitTimeout 或MinSimilarity 目前的值.
usePreviousSnap(boolean value)
此函數用來設置是(true)與否(false)重複使用先前的螢幕幕截圖。 這函數的主要目的是為了速度。
如果你想在同一個螢幕截圖搜索一些不同的圖像,你可以
snapshot()
截取目前的螢幕,並將usePreviousSnap 設為 true
這樣可以讓腳本更簡潔;例如上面usePreviousSnap 的腳本就可以寫成
snapshotColor()
和snapshot() 相同,差別在截取的是彩色的圖
只有後面是要對同一張圖用getColor(), 才需要呼叫此函數
setAlternativeClick(boolean enable)
有些遊戲被發現用原本的click方法有問題;因此,從3.2.0版本起另一種點擊的方法
如果原來的點擊方法對你的遊戲(App)有問題,使用下面的函數來啟用這個方法
ImageCache
ImageCache 類包含下列函數來快取比對圖檔,可以增進腳本執行速度。
(注意: 設定快取會占用記憶體;太大的快取可能導致記憶體不足)
ImageCache:setCheckEnable(boolean true):
開啟或關閉圖檔快取。預設是關閉。
ImageCache:setUpdateEnable(boolean true):
開啟或關閉圖檔快取更新。如果接下來執行的圖形比對很少用到,您可以先暫時關閉圖檔快取更新。
ImageCache:setImageSizeLimit(int size):
設定每個可快取圖檔的最多點數,大於此數的圖檔不會進快取。
ImageCache:setCacheNumber(int number):
設定快取可容納多少圖檔。
快取是先進先出。如果快取已滿,新進圖檔會將最早的圖檔推出快取。
腳本開發相關設定
Settings:snapSet(String var, boolean value)
這個函數可以用來決定是否要將腳本運行過程中的截圖儲存起來,以供發生問題時除蟲用
所有圖形都會儲存在/sdcard/AnkuLua/captured_images 目錄下
var: OutputCaptureImg, OutputCropImg, OutputResizeImg 或 OutputRegImg 之一
value: 當var 是OutputCaptureImg 且設成 true, 整個螢幕截圖將儲存成"capture.png"
當var 是OutputCropImg 且設成 true, 裁切之後的螢幕截圖將儲存成"crop.png".
當var 是OutputResizeImg 且設成 true, 裁切之後的螢幕截圖將依照setCompareDimension進形縮放並儲存成 "resize.png".
當var 是 OutputRegImg 且設成 true, 如果Region 有被使用, region 的圖將儲存成 "region.png".
[下一頁]: remoteAKL: Android 映射到PC的工具
[上一頁]: IntelliJ IDEA 腳本編輯器
[首頁]: AnkuLua介紹
腳本工作相關設定
Settings:setCompareDimension(boolean compareByWidth, int pixels):
這個函數使用於圖形比對的解析度
compareByWidth: 如果我們要自動化的App是依照寬度縮放畫面,設置為true。對於大多數App,請設成true
pixels: 此值是執行圖形比對時螢度的解析度。根據compareByWidth的值的值設定成寬度或高度
Return value: 無
這是AnkuLua可以用相同的腳本在不同的設備正常工作的秘密。就拿我們的第一個例子為例,我們從寬度為960的設備抓圖。因此,我們的腳本相關設定如下
Settings:setCompareDimension(true, 960)
如果在不同解析度的裝置上執行這個腳本,所捕獲的畫面將先做縮放到960再做圖像匹配。
因為所有截圖都依照我們的設定縮放,所以腳本能在不同解析度的裝置上正確執行
有一件事要特別注意,解析度設定是App 可使用螢幕(App usable screen)解析度,不是裝置實際解析度
有導航條(navigation bar)的裝置是App 可用螢幕與實際螢幕不同的一個例子
在下面的圖中,App可使用的屏幕尺寸為黃色矩形內
如果腳本是他人開發的,絕對不要依照機器去改scriptDimension 和 compareDimenstion,否則保證在不同解析度的機器腳本不能用
如果腳本是他人開發的,絕對不要依照機器去改scriptDimension 和 compareDimenstion,否則保證在不同解析度的機器腳本不能用
如果腳本是他人開發的,絕對不要依照機器去改scriptDimension 和 compareDimenstion,否則保證在不同解析度的機器腳本不能用
AnkuLua 會自動依照compareDimension縮放螢幕截圖,並依照scriptDimension 縮放Region、Location、targetOffset等
AnkuLua 運作原理請參考此篇
ankulua-tw.boards.net/thread/23/
如果腳本是他人開發的,絕對不要依照機器去改scriptDimension 和 compareDimenstion,否則保證在不同解析度的機器腳本不能用
如果腳本是他人開發的,絕對不要依照機器去改scriptDimension 和 compareDimenstion,否則保證在不同解析度的機器腳本不能用
AnkuLua 會自動依照compareDimension縮放螢幕截圖,並依照scriptDimension 縮放Region、Location、targetOffset等
AnkuLua 運作原理請參考此篇
ankulua-tw.boards.net/thread/23/
getAppUsableScreenSize()
getRealScreenSize()
函數 getAppUsableScreenSize() 可用來取得App 可用螢幕解析度
函數 getRealScreenSize() 可用來取得裝置實際螢幕解析度
local screen = getAppUsableScreenSize()
print(screen:getX()) -- the width of App usable screen
print(screen:getY()) -- the height of App usable screen
screen = getRealScreenSize()
print(screen:getX()) -- the width of device real screen
print(screen:getY()) -- the height of device real screen
setImmersiveMode(enable)
如上所述,有些裝置有導航條
大部分的App不會用到這些導航條的區域
但在immersive 狀態下,App 可以設定讓導航條消失,並能用到這些區域
如果App是在immersive 狀態下, 請使用這個函數.
參考: Google對 Immersive 的解釋
autoGameArea(enable)
有些機器有瀏海,這些瀏海區域App和遊戲並不會用到,但用AnkuLua截圖時卻會出現在截圖中,容易造成腳本錯誤
Android P 以後有正式支援瀏海屏,可以偵測到瀏海高度
使用autoGameArea(true)可以讓AnkuLua 自動偵測不含瀏海的區域(Region)
一般使用建議設完immsersive 後,設定autoGameArea(true)
getGameArea()
設定完setImmersiveMode() 和 autoGameArea() 後可以使用getGameArea() 得到AnkuLua 截圖的區域 (Region)
範例:
下圖為一2246x1080 帶瀏海的機器,瀏海高度86
底下橫屏,瀏海在左邊;以下表格為setImmersiveMode() 和 autoGameArea() 各種設定在圖中的顏色與getGameArea() 的返回值
setImmersiveMode() | autoGameArea() | 圖中外框顏色 | getGameArea() | 附註 |
false | false | 黃色 | (0, 0, 2034, 1080) | 包含瀏海但卻不包含App 右邊86點的區域 |
false | true | 藍色 | (86, 0, 2034, 1080) | 去掉瀏海和導行列的中間區域,這個計算機App 的正確設定 |
true | false | (0, 0, 2246, 1080) | 整個螢幕 | |
true | true | 紅色 | (86, 0, 2160, 1080) | 去掉瀏海的其他區域 |
可以看出,setImmersiveMode(false); autoGameArea(true) 才是正確設定
setGameArea(Region region)
手動設定截圖的遊戲區域
有些遊戲在寬屏時是直接左右設為黑色,以維持遊戲區域的長寬比,例如下兩圖
這時只要用setGameArea() 將遊戲區域只包含中間,不包含左右黑色部分,就能不改動腳本其他部分,很簡單的讓腳本可以在下圖正確執行
Settings:setScriptDimension(boolean compareByWidth, int pixels):
這個函數是用於參照腳本內座標位置參考的App解析度
compareByWidth: 如果我們要自動化的App是依照寬度縮放畫面,設置為true。對於大多數App,請設成true
pixels: 此值是執行座標位置實時螢度的解析度。根據compareByWidth的值的值設定成寬度或高度
Return value: 無
這個值也是參照到App 可使用螢幕解析度
哪實會用到這個值? 舉下方這個腳本為例
click(Location(100,200))
Location(100,200) 是一個絕對的值。當執行的裝置與發展腳本裝置解析度不同時,它需要在運行設備進行縮放。scriptDimension 這個值將用來與值形裝置的解析度決定須要縮放多少
有沒有可能是比較維度(CompareDimension)和腳本維度(ScriptDimenstion)不同?是的
因為圖形比對速度和比較維度息息相關。因此,我們可以縮小所拍攝的圖像,並相應地設置的值。然後我們可以加快圖形比對處理
關於如何優化讓腳本能加快執行速度,請見腳本優化這一篇
setImagePath(String path)
這個函數用來設定AnkuLua載入比對圖檔的路徑
默認的路徑是起始腳本檔案的"image"目錄
Settings:setROI(Region reg)
更改預設的搜尋區域(也就是沒特別指定區域的搜尋相關函數所搜尋的區域)
預設值是全螢幕
如果 reg 是 nil,搜尋區域將設成全螢幕
existsClick("1.png") -- 這會搜尋全螢幕
Settings:setROI(Region(100, 200, 300, 400))
existsClick("1.png") -- 這裡等同於 Region(100,200,300,400):existsClick("1.png")
Settings:getROI()
返回Settings:setROI() 所設定的區域
Settings:set(String var, double value)
var: AutoWaitTimeout 或 MinSimilarity
value: 當var 是 AutoWaitTimeout , value 的值就被用來當做默認的限時時間。當有些函數有限時功能但未提供時間時(例如wait()),這個值就被用來做為限時的時間
Settings:set("AutoWaitTimeout", 5)
wait("target.png") -- 限時五秒內"target.png"要出現,否則舉起例外(exception)
wait("target.png", 3) -- 限時三秒
當var 是 MinSimilarity, value 的值就被用來當做默認的相似度。要更改S和P物件的默認相似度時,請用similar()函數.
Return value: none
如果這些值都沒被設定,默認的 AutoWaitTimeout 是三秒. 默認的 MinSimilarity是 0.7.
Settings:get(String var)
var: AutoWaitTimeout 或MinSimilarity
Return value: AutoWaitTimeout 或MinSimilarity 目前的值.
usePreviousSnap(boolean value)
此函數用來設置是(true)與否(false)重複使用先前的螢幕幕截圖。 這函數的主要目的是為了速度。
如果你想在同一個螢幕截圖搜索一些不同的圖像,你可以
wait("image1.png")
usePreviousSnap(true)
if (exists("image2.png") or exists("image3.png") then -- 找 "image2.png" 和 "image3.png" 時並不會重新截取螢幕
-- do some thing
end
usePreviousSnap(false) -- 請記得將值設回false,後面找圖才會先截取螢幕
snapshot()
截取目前的螢幕,並將usePreviousSnap 設為 true
這樣可以讓腳本更簡潔;例如上面usePreviousSnap 的腳本就可以寫成
snapshot() -- 這裡會截圖,並讓以後找圖都用這個圖,直到usePreviousSnap(false)
wait("image1.png")
if (exists("image2.png") or exists("image3.png") then -- 找 "image2.png" 和 "image3.png" 時並不會重新截取螢幕
-- do some thing
end
usePreviousSnap(false) -- 請記得將值設回false,後面找圖才會先截取螢幕
snapshotColor()
和snapshot() 相同,差別在截取的是彩色的圖
只有後面是要對同一張圖用getColor(), 才需要呼叫此函數
setAlternativeClick(boolean enable)
有些遊戲被發現用原本的click方法有問題;因此,從3.2.0版本起另一種點擊的方法
如果原來的點擊方法對你的遊戲(App)有問題,使用下面的函數來啟用這個方法
ImageCache
ImageCache 類包含下列函數來快取比對圖檔,可以增進腳本執行速度。
(注意: 設定快取會占用記憶體;太大的快取可能導致記憶體不足)
ImageCache:setCheckEnable(boolean true):
開啟或關閉圖檔快取。預設是關閉。
ImageCache:setUpdateEnable(boolean true):
開啟或關閉圖檔快取更新。如果接下來執行的圖形比對很少用到,您可以先暫時關閉圖檔快取更新。
ImageCache:setImageSizeLimit(int size):
設定每個可快取圖檔的最多點數,大於此數的圖檔不會進快取。
ImageCache:setCacheNumber(int number):
設定快取可容納多少圖檔。
快取是先進先出。如果快取已滿,新進圖檔會將最早的圖檔推出快取。
setAlternativeClick(true)
腳本開發相關設定
Settings:snapSet(String var, boolean value)
這個函數可以用來決定是否要將腳本運行過程中的截圖儲存起來,以供發生問題時除蟲用
所有圖形都會儲存在/sdcard/AnkuLua/captured_images 目錄下
var: OutputCaptureImg, OutputCropImg, OutputResizeImg 或 OutputRegImg 之一
value: 當var 是OutputCaptureImg 且設成 true, 整個螢幕截圖將儲存成"capture.png"
當var 是OutputCropImg 且設成 true, 裁切之後的螢幕截圖將儲存成"crop.png".
當var 是OutputResizeImg 且設成 true, 裁切之後的螢幕截圖將依照setCompareDimension進形縮放並儲存成 "resize.png".
當var 是 OutputRegImg 且設成 true, 如果Region 有被使用, region 的圖將儲存成 "region.png".
[下一頁]: remoteAKL: Android 映射到PC的工具
[上一頁]: IntelliJ IDEA 腳本編輯器
[首頁]: AnkuLua介紹