我在www.example.com上为aim trainer测试创建了一个机器人humanbenchmark.com,我正在努力提高它的速度。目前,我已经定义了一个函数,可以对屏幕进行截图,然后扫描目标图像并单击。然而,为了有效地确定目标的位置,我需要检查三个不同像素的颜色,看看它们是否与背景颜色不同。当这样做时,我有3个不同的if语句,我想知道是否可以将if语句合并合并为1个if语句和2个or语句。可能有一个更有效的方法来完成这一切,但这是我能想到的最好的方法。代码有点难以阅读,因为我试图定义函数的一般用途,而不仅仅是这个特定的用途,但它并不可怕。
def scan(colors, width, height, start_x=66, start_y=231, stop_x=1900, stop_y=838):
im = auto.screenshot('C:\\Windows\\Temp\\screenshot.png')
coordinates = []
additive = round((height / 2), 0)
x_range = stop_x - start_x
y_range = stop_y - start_y
for x in range(0, math.ceil((x_range / width))):
for y in range(0, math.ceil((y_range / height))):
pixel_1 = im.getpixel((((width * x) + start_x), (start_y + (height * y))))
pixel_2 = im.getpixel((((width * x) + start_x), (start_y + (height * (y + 1)))))
pixel_3 = im.getpixel((((width * x) + start_x), (additive + start_y + (height * y))))
for i in range(0, len(colors)):
if pixel_1 == colors[i]:
location_x = (width * x) + start_x
location_y = (height * y) + start_y
coordinates.append(location_x)
coordinates.append(location_y)
break
if pixel_2 == colors[i]:
location_x = (width * x) + start_x
location_y = (height * (y + 1)) + start_y
coordinates.append(location_x)
coordinates.append(location_y)
break
if pixel_3 == colors[i]:
location_x = (width * x) + start_x
location_y = (height * y) + start_y + additive
coordinates.append(location_x)
coordinates.append(location_y)
break
return coordinates[0], coordinates[1]
这是我想要的能力
def scan(colors, width, height, start_x=66, start_y=231, stop_x=1900, stop_y=838):
im = auto.screenshot('C:\\Windows\\Temp\\screenshot.png')
coordinates = []
additive = round((height / 2), 0)
x_range = stop_x - start_x
y_range = stop_y - start_y
for x in range(0, math.ceil((x_range / width))):
for y in range(0, math.ceil((y_range / height))):
pixel_1 = im.getpixel((((width * x) + start_x), (start_y + (height * y))))
pixel_2 = im.getpixel((((width * x) + start_x), (start_y + (height * (y + 1)))))
pixel_3 = im.getpixel((((width * x) + start_x), (additive + start_y + (height * y))))
for i in range(0, len(colors)):
if pixel_1 == colors[i] or pixel_2 == colors[i] or pixel_3 == colors[i]:
...
return coordinates[0], coordinates[1]
有几个边缘情况下,这个程序不工作,但他们是罕见的足够,这是不值得的效率损失,以占他们。
我试着把它作为一个if语句,但我无法找到一种方法来判断哪个语句是正确的。我试着把它减少到只检查一个或两个像素,但这导致了太多的情况下,它没有检测到目标和程序中断。我希望能加快程序的速度,因为目前每个函数的调用需要200毫秒。
1条答案
按热度按时间dxxyhpgq1#
您可以在测试时使用walrus运算符来分配变量