2013-08-07 42 views
1

我是一名新手java學習者。我試圖開發一個簡單的迷你遊戲的機器人(或教練,無論),我需要分析屏幕上的圖像,並按相應的動作。因此: -在屏幕上查找圖像

我第一次嘗試使用sikuli ScreenRegion這個,但它沒有像預期的那樣完全去。我試過的是這樣的: -

if(arrowSet.find(oneDown)!=null) 
{ 
    r.keyPress(KeyEvent.VK_DOWN); 
    r.keyRelease(KeyEvent.VK_DOWN); 
    r.delay(20); 
} 

但它只是跳到行動,即使條件是假的。我的ScreenRegion應用程序在這種情況下出錯了嗎?或者我應該使用與sikuli不同的東西?

+0

顯然s.find返回Null,如果它找不到定義的區域中的圖像,那麼你的代碼「if(s.find(x))」是無效的java開頭... – AKDADEVIL

+0

我可以'不要以爲你已經咬了很多東西。但這取決於具體情況 - 您試圖查找的圖像是否出現在某些設置的地方,或者它們是否位於屏幕的任何位置,縮放和旋轉? – Humungus

+0

@AKDADEVIL:我的代碼就像你說的。 – Preformer

回答

4

如果不需要使用Java並且您在Windows下工作,則可以考慮使用Automa - 用於UI自動化的Python工具/庫。它允許對圖像進行操作。

例如,以找出是否在屏幕上存在的圖像:

Image("arrow_screenshot1.png").exists() # returns True or False 

要點擊圖片:

click(Image("arrow_screenshot1.png")) 

要找出圖像座標/中心:

Image("arrow_screenshot1.png").x # returns x-coordinate 
Image("arrow_screenshot1.png").y # returns y-coordinate 
Image("arrow_screenshot1.png").center # returns Point object 

要等到圖像出現在屏幕上:

wait_until(Image("arrow_screenshot1.png").exists) 

我覺得用Automa你可以很容易地達到你需要的東西!

免責聲明:我的Automa的開發商

+0

不錯的想法,如果我不得不按箭頭鍵,如果圖像存在?另外,有控制陳述嗎? – Preformer

+0

它更容易。您只需調用_press(LEFT)_或_press(UP)_等,具體取決於您需要按哪個箭頭鍵。 Automa命令的完整列表可以在http://www.getautoma.com/docs找到。 – Tytus

+0

控制語句如If?因爲這個程序不能在沒有它們的情況下執行 – Preformer

2

一個想通了,夥計們!似乎像sikuli的圖像識別是模糊的。它不會與targetImage.setMinRank(1.00)一起工作,但是當我嘗試運行程序targetImage.setMinRank(0.99)時,它一切都很流暢。謝謝你的幫助。

+0

你的目標圖像是什麼格式?如果你以有損格式保存它,完美匹配可能是不可能的。 (Sikuli bug也是可能的,但是我使用了需要完美匹配並且工作的腳本。) –