我正在播放一个简单的Flash游戏要求玩家点击多个快速移动目标的机器人,特别是这样的:建议,关于如何提高点击机器人性能
我当前算法是相当简单:
- 捕获通过像素屏幕图像中的屏幕
- 环的图像,并且与目标图像的已知RGB值比较它们的RGB值
- 返回坐标那里找到匹配
- 将鼠标指针移动到坐标,然后点击
对搜索算法的代码如下:
public Point findImg(BufferedImage img) {
screen = bot.createScreenCapture(screenRectangle); // Image of screen
int target = 2424318; // RGB value to look for
int rgb;
// Approximate boundaries (400,200) and (1000,700) of the flash game were
// hardcoded in
for (int i = 400; i < 1000; i += 5) {
for (int j = 200; j < 700; j += 5) {
rgb = -(screen.getRGB(i, j));
if (rgb == target) { // Target found
return new Point(i, j);
}
}
}
return null;
}
目前机器人能够打约75%的目标。然而,它通常无法击中快速移动的目标,并且将在屏幕上“追逐”它们。我假设这是因为我的算法无法足够快地找到它们。我试过增加像素步长,但似乎没有明显的效果。任何建议,将不胜感激,谢谢。
为了更好的可靠性,您应该减少像素步长,而不是增加。以牺牲运行时间为代价。 – 2012-02-15 23:46:44
目标是否可以直线移动?如果你错过了会怎样?你可以在你发现的点上点击点击吗?也许你现在可以做你现在做的事情,但是如果你错过了,那么再拍一张截图,并在你想点击它时计算出目标的位置! – davidfrancis 2012-02-15 23:59:30
目标在任意方向移动,没有任何处罚(你可以点击任意次数),并且我已经每125ms调用一次findImage来更新屏幕图像并检查目标。你的霰弹枪方法听起来不错,但我会给它一个镜头,谢谢! – JHuynh 2012-02-16 00:12:13