nazhWhile := 0 ; Ожидает появления nazhimaite.bmp
while (nazhWhile == 0) {
ImageSearch, varX, varY, 0, 0, A_ScreenWidth, A_ScreenHeight, % "*50 *Trans000000 " "img\items\nazhimaite.bmp"
if (ErrorLevel == 0) {
nazhWhile := 1
varX += 19
varY += 64
} else {
sleep 20
}
}
PixelGetColor, pix_color, varX, varY ; получает цвет пикселя под найденным объектом
srch_pix_x1 := varX - 11 ; общая область поиска 22 х 22 пикселя
srch_pix_y1 := varY - 11
srch_pix_x2 := varX + 11
srch_pix_y2 := varY + 11
pix_x1 := srch_pix_x1 ; изменяемые стартовые координаты области поиска
pix_y1 := srch_pix_y1
coordArr := []
err := 0, pix_count := 0
while (err != 2) {
PixelSearch, find_x, find_y, pix_x1, pix_y1, srch_pix_x2, srch_pix_y2, pix_color, 0, Fast
if (ErrorLevel == 0) {
err := 0
coordArr.Push(find_x, find_y)
pix_x1 := % find_x + 1
pix_count++
} else if (ErrorLevel == 1) {
pix_x1 := srch_pix_x1
pix_y1 := % find_y + 1
err++
}
}
my_var := 1
while (my_var < pix_count * 2) {
x := coordArr[my_var]
y := coordArr[my_var + 1]
SendPlay {Click, %x%, %y%, 0}
my_var += 2
sleep 50
}
MsgBox % "Найдено пикселей ->`n" pix_count
Весь код.
Первый вайл можно не брать в расчёт. Искать для пущей точности теста лучше треугольник. Поскольку его положение известно, искать пиксели в небольшой области вокруг него. У меня pix_x1 и pix_y1 - это верхний левый угол области поиска, который я смещаю на один пиксель вправо всякий раз, когда пиксель найден и на один пиксель вниз, когда не найден, возвращая при этом pix_x1 в исходное положение. Логично, что подряд 2 фейла утверждают, что справа после последнего найденного пикселя таких же нет и в следующей строке так же, прекращая поиск. Последний цикл просто перебирает координаты перемещая по ним курсор, дабы визуально подтвердить, что не зря хлебом кормили. Всё вроде правильно, но на деле находит 221 пиксель, после чего катает курсор по правой границе треугольника сверху вниз, как будто не происходит
возвращающего ИКС координату области поиска в исходное положение.
Я с уважением отношусь к грамотно оформленному коду, предлагающему более изящное решение, чем мой способ "в лоб", но последний хотя бы мышь тягает по экрану, хоть и не так, как требуется. Быть может Вы взглянете опытным взором, где я "не там" запятую может поставил, или не дописал чего?
В предыдущем софте единственной функцией можно было получить массив с координатами, а здесь вот, приходится изобретать этот велосипед, но у того проекта возможностей в разы меньше, чем у АНК и он не развивается уже давно. Поэтому придётся приложить много упорства, чтобы перевести все прошлые работы в новый функционал. Я здесь если не навсегда, то на долго и в отсутствии достойной литературы и очень фрагментированных знаний об этом инструменте, надеюсь на понимание местных жителей.