|
gene 發表於 May 23, 2016 8:54:19 GMT
請問一下 local inBattle = exists(Pattern("battle_mark.png")) 這樣的敘述在對照時,相似度是多少呢 ? 如上圖,我用最右上角的暫停符號判定為戰鬥中 而下圖是戰鬥結束畫面,雖然已經反白了,但判斷結果還是有找到. 如果不換圖偵測的狀況下,請問要怎麼解決這個問題,謝謝
|
|
|
AnkuLua 發表於 May 23, 2016 10:44:56 GMT
相似度預設值為0.7 可以用Settings:set("MinSimilarity", 0.75) 更改預設值(例子裡是0.75) 如果單一圖片要改相似度,請用similar 例如
local inBattle = exists(Pattern("battle_mark.png"):similar(0.75))
您的例子有幾個方式 1. 偵測畫面其他地方的改變,例如"遊戲結果" 或 "STAGE CLEAR" 2. 用getColor() 比對暫停的顏色 比較建議用一的方式
這是甚麼遊戲? 很可愛
|
|
|
gene 發表於 May 23, 2016 12:20:13 GMT
相似度預設值為0.7 可以用Settings:set("MinSimilarity", 0.75) 更改預設值(例子裡是0.75) 如果單一圖片要改相似度,請用similar 例如 local inBattle = exists(Pattern("battle_mark.png"):similar(0.75)) 您的例子有幾個方式 1. 偵測畫面其他地方的改變,例如"遊戲結果" 或 "STAGE CLEAR" 2. 用getColor() 比對暫停的顏色 比較建議用一的方式 這是甚麼遊戲? 很可愛 我偵測的點就和你說的"遊戲結果"一樣 程式結構大概是這樣的 if 有暫停按鈕 then
在戰鬥畫面中
repreat
自動攻擊
60 秒後,每 2 秒偵側是否有 "遊戲結果"
if 有遊戲結果 then
自動攻擊停止
end
until 自動攻擊停止
end 但因為迴圈的關係,會先偵測到暫停按鈕 比較快速的方式就是把相似度提高,不然就要改流程了 遊戲是這款 play.google.com/store/apps/details?id=com.nhnent.SKQUEST&hl=zh_TW還不錯,另外 12 奧丁也不錯玩 我也有作自動攻擊腳本 XD
|
|
|
gene 發表於 May 23, 2016 12:27:42 GMT
-- 戰鬥畫面中
local inBattle = exists(Pattern("battle_mark.png"))
if inBattle ~=nil then
toast("自動戰鬥開始")
local bot_atk = 1
local atk_cnt = 1
local atk_time = Timer()
repeat
-- 戰鬥時間超過 80 秒,每 2 秒檢查一次,是否戰鬥已結束
useTime = math.ceil(atk_time:check())
if (useTime > 80) and (useTime%2==0) then
--toast("useTime"..useTime)
local battle_end = exists(Pattern("battle_end.png"))
if battle_end ~=nil then
bot_atk = 0
break
end
end
local atkY = 650 + math.random(0,range)
local atkX = math.random(0,range)
-- 每 5 次按第一格,其餘都第四格
if atk_cnt%5 == 0 then
atkX = atkX + 1090
else
atkX = atkX + 700
end
click(Location(atkX,atkY))
wait(cdTime)
atk_cnt = atk_cnt + 1
until bot_atk == 0
流程上應該是沒什麼問題 正常來說沒有偵測到"遊戲結果" 字樣應該不會停下來,但反而會跳到最頭 執行了 toast("自動戰鬥開始") 這行
不知道是那邊疏忽了 XD
|
|
|
gene 發表於 May 23, 2016 13:01:56 GMT
剛看到另一個討論串中,你有回復到 "所有的函數除了getColor() 都是在灰階上做圖形辨識" 如果是這樣的狀況,是否這 2 張圖會被認為是同一個呢 ??
|
|
|
AnkuLua 發表於 May 23, 2016 13:09:54 GMT
有可能
|
|
|
AnkuLua 發表於 May 23, 2016 13:20:48 GMT
-- 戰鬥畫面中
local inBattle = exists(Pattern("battle_mark.png"))
if inBattle ~=nil then
toast("自動戰鬥開始")
local bot_atk = 1
local atk_cnt = 1
local atk_time = Timer()
repeat
-- 戰鬥時間超過 80 秒,每 2 秒檢查一次,是否戰鬥已結束
useTime = math.ceil(atk_time:check())
if (useTime > 80) and (useTime%2==0) then
--toast("useTime"..useTime)
local battle_end = exists(Pattern("battle_end.png"))
if battle_end ~=nil then
bot_atk = 0
break
end
end
local atkY = 650 + math.random(0,range)
local atkX = math.random(0,range)
-- 每 5 次按第一格,其餘都第四格
if atk_cnt%5 == 0 then
atkX = atkX + 1090
else
atkX = atkX + 700
end
click(Location(atkX,atkY))
wait(cdTime)
atk_cnt = atk_cnt + 1
until bot_atk == 0
流程上應該是沒什麼問題 正常來說沒有偵測到"遊戲結果" 字樣應該不會停下來,但反而會跳到最頭 執行了 toast("自動戰鬥開始") 這行 不知道是那邊疏忽了 XD 下面這兩行 local inBattle = exists(Pattern("battle_mark.png"))
if inBattle ~=nil then
可以改成 if (exists(Pattern("battle_mark.png")) then 會不會有甚麼地方像"battle_mark.png",可以用highlight() 畫出紅框 if (exists(Pattern("battle_mark.png")) then getLastMatch():highlight(0.5) -- 紅框 0.5 秒 寫好的腳本要不要分享
|
|
|
gene 發表於 May 23, 2016 13:47:05 GMT
分開寫可能是習慣了 XD
目前的版本算是測試啦,還不是很穩定
不過我有發現,在 bs 上跑,click(Location(atkX,atkY)) 這一行常常不出來 測了幾次一直以為是 code 上面的問題
後來直接用手機 run,就很正常了...
|
|
edc
New Member
Posts: 3
|
edc 發表於 Dec 28, 2016 3:25:39 GMT
請問 findAll / findAllNoFindException 能否使用 similar 更改相似度?
findAllNoFindException("testing.png":similar(0.99)) 或 findAllNoFindException("testing.png"):similar(0.99) 都出 error
|
|
|
AnkuLua 發表於 Dec 28, 2016 5:34:48 GMT
可以 0.99 太高了,最大也才1.0
|
|