【发布时间】:2012-08-26 18:07:42
【问题描述】:
我正在使用java.awt.Robot 在 java 中创建一个机器人。该机器人在浏览器上运行良好(我也使用 Microsoft Word 对其进行了测试!)但是当我在游戏中运行它时,唯一可以运行的函数是 mouseMove。我想为我构建一个只需按下键盘按钮的机器人。
我实例化机器人类
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 类在后台运行,它可以在游戏中执行这些动作吗?
谢谢
更新:例如,如果我在 PES 2012 上运行我的机器人,它可以正常工作,但如果我在像阴谋集团这样的在线游戏上运行它,它就不能工作?游戏的保护系统没有检测到任何东西,所以情况并非如此。
【问题讨论】:
-
游戏经常对机器人进行“防御”——这只是一种可能性。
-
尝试在
keyPress和keyRelease事件之间添加几毫秒的延迟。如果这是一款普通的街机风格游戏,那么我敢打赌,该游戏只是轮询每个滴答声以查看按键是否当前按下,而不是捕捉诸如“按键按下”和“按键释放”之类的瞬时事件. -
试过了,还是不行……
-
也许不是,我觉得这家伙对游戏中运行的机器人有问题……我认为这也是游戏对机器人的防御系统。
标签: java bots awtrobot online-game