2012-08-31 54 views
4

您好,我正在使用java.atw.Robot在java中創建一個bot。該機器人在瀏覽器上運行良好(我也使用微軟的Word進行了測試!),但是當我在遊戲中運行它時,唯一可行的功能是mouseMove。我想建立一個簡單的按下鍵盤按鈕的機器人。在線遊戲的Java bot

我實例化機器人類

Robot r = new Robot(); 

然後我做一些簡單的東西: 按z,請按1,移動鼠標並點擊右鍵。

 r.keyPress(KeyEvent.VK_Z); 
     r.keyRelease(KeyEvent.VK_Z); 

     r.keyPress(KeyEvent.VK_1); 
     System.out.println("Press 1 button"); 
     r.keyRelease(KeyEvent.VK_1); 
     System.out.println("Release 1 button"); 
     r.delay(1000); 

     System.out.println("Move mouse"); 
     r.mouseMove(110, 690); 

     System.out.println("Press"); 
     r.mousePress(InputEvent.BUTTON3_MASK); 
     System.out.println("Release"); 
     r.mouseRelease(InputEvent.BUTTON3_MASK); 

爲什麼會發生這種情況?如果它在後臺運行,該Robot類可以在遊戲中執行這些類型的操作嗎?

謝謝

更新:如果我在2012年PES運行我的機器人爲例,它工作正常,但如果我像驚天動地的在線遊戲運行它,它不工作?遊戲的保護系統沒有檢測到任何東西,所以情況並非如此。

+3

遊戲通常會對機器人進行「防禦」 - 只是一種可能性。 –

+4

嘗試在'keyPress'和'keyRelease'事件之間添加幾毫秒的延遲。如果這是一款正常的街機遊戲,那麼我敢打賭,遊戲只是輪詢每個打勾,看看鍵是否*當前下降*,不捕獲「鍵按下」和「鍵釋放」等即時事件。 – Quuxplusone

+0

嘗試過,它不工作... –

回答

2

首先,大多數遊戲都有機器人保護,因此請務必在機器人上添加延遲,也許還需要一個「冷卻時間」。在此之前,機器人做了兩個即時動作。

我幾乎可以肯定它不工作,因爲擊鍵速度太快了:它們會立即按下並釋放。嘗試在實例化Robot類後立即添加bot.delay(500)(或更多,取決於遊戲);在所有按鍵功能之前。這會在機器人完成的所有動作之間增加500ms的延遲時間。

public static void doStuff() { 

    Robot r = new Robot(); 

     r.delay(500); //Or more - depends on the game 

     r.keyPress(KeyEvent.VK_Z); 
     r.keyRelease(KeyEvent.VK_Z); 

     r.keyPress(KeyEvent.VK_1); 
     System.out.println("Press 1 button"); 
     r.keyRelease(KeyEvent.VK_1); 
     System.out.println("Release 1 button"); 
     r.delay(1000); 

     System.out.println("Move mouse"); 
     r.mouseMove(110, 690); 

     System.out.println("Press"); 
     r.mousePress(InputEvent.BUTTON3_MASK); 
     System.out.println("Release"); 
     r.mouseRelease(InputEvent.BUTTON3_MASK); 
} 

我認爲爲什麼Z鍵和1鍵不起作用的唯一原因是速度一切都完成了。遊戲可能有一個反殭屍系統。

0

它很大程度上取決於它是什麼類型的遊戲。 如果代碼只是模擬鍵盤操作等系統輸入。它應該看起來像一個普通人。

然而從它看起來像。從你的例子。它以閃電般的速度運行,因此它可能根本沒有檢測到輸入,或者/或者你正在試圖對所謂的遊戲進行反機器人測量。正在阻止輸入。將延遲放入混合中。看看是否有幫助。我會回來尋求更多的幫助。我在這方面並不專業。但它是我最好的猜測。

編輯:

當我的意思是把延遲的延遲的關鍵事件多達火..它有時間來處理鍵這樣了。

+0

nop。沒有工作我在鍵盤事件觸發器之間添加了一些延遲 –