1
Общие вопросы / Re: Поиск картинки на windows 10
« on: January 30, 2020, 11:44:16 PM »
Все разобрался спасибо за помощь. Обновил дрова на видео и проблема прошла
Добавлена тема оформления "Clickermann" для кода с подсветкой синтаксиса. Выбирается из выпадающего списка "Код" (рядом с "цвет", "размер" и "шрифт") в режиме редактирования поста. Либо просто BB-тегом "code=clickermann"
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
1. кто вам сказал, что картинка сохранённая и успешно находящаяся на одном компе, будет так-же успешно находиться на другом?Я не использую одну и ту же картинку на обоих компах я в курсе что он их не найдет
если разрешение и масштаб на мониторах разные, то ничего вы не найдёте, картинки обычно под них оптимизируются.
2. зачем для теста брать такую большую и сложную картинку?
тест принято делать в простейших условиях, постепенно их усложняя до рабочих, по мере получения положительных результатов.
3. не всегда картинки на мониторе остаются неизменными, в некоторых играх они могут меняться неуловимо для пользователя каждые несколько минут и для обхода этого существуют цветокоррекция и процент совпадения.
4. вы в редакторе, лупой проверял; что, где, когда видит программа?
в зависимости от особенностей настройки, на windows 10 всегда может быть чёрный экран в графическом буфере.
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "test.bmp")
print("Найден в координатах X=", $_return1, ", Y=", $_return2)
MOVE($_return1, $_return2)
BEEP(900,800)
END_IF
HALT
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "message.bmp")
LCLICK($_return1+2, $_return2+2)
WAITMS(500)
END_IF
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "poluchit.bmp")
LCLICK($_return1+2, $_return2+2)
END_IF
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "krest.bmp")
LCLICK($_return1+2, $_return2+2)
WAITMS(500)
END_IF
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "magazin.bmp")
LCLICK($_return1+2, $_return2+2)
END_IF
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "cristal_magazin.bmp")
LCLICK($_return1+2, $_return2+2)
END_IF
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "da_magazin.bmp")
LCLICK($_return1+2, $_return2+2)
END_IF
WAIT(1)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "ok_magazin.bmp")
LCLICK($_return1+2, $_return2+2)
END_IF
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "close_magazin.bmp")
LCLICK($_return1+2, $_return2+2)
END_IF
WAITMS(500)
Много гетскринов потому что изображения разные, паузы нужна так как изображение появляется с задержкой что бы не проскочить между ними"Много гетскринов потому что изображения разные" - А гетскрину не все равно - какое изображение ловить...? Давай так... Расставь приоритеты. Сейчас объясню - что я имею ввиду. Допустим, что у тебя есть картинки - pic1 и pic2. Допустим так же, что при присутствии на экране картинки pic1, тебя не интересует присутствие картинки pic2. Это и есть - приоритет. Значит картинка pic1 у нас будет в приоритете и вот тебе мой вариант, в котором скрипт сначала ищет картинку pic1, а если ее нет, то ищет pic2, и делает все это по одному скрину, не фоткая экран каждый раз. К тому же, не смотря на отсутствие пауз (кроме одной - в конце), в моем варианте никогда не произойдет клик по одной и той же картинке чаще, чем раз в секунду и сам скрипт при этом будет работать намного быстрее.
Зачем столько раз GETSCREEN в скрипте...? И зачем вообще в нем все эти паузы...? Да еще такие долгие...Code: (clickermann) [Select]GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "pic1.bmp", -1, 100)
IF($click_pic1 < $_time_t)
LCLICK($_return1, $_return2)
$click_pic1 = $_time_t+1
END_IF
else
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "pic2.bmp", -1, 100)
IF($click_pic2 < $_time_t)
LCLICK($_return1, $_return2)
$click_pic2 = $_time_t+1
END_IF
END_IF
END_IF
WAITMS(50)
Зачем столько раз GETSCREEN в скрипте...? И зачем вообще в нем все эти паузы...? Да еще такие долгие...
А мне не понятно что это за синтаксис такойCode: (clickermann) [Select]ELSE
GOTO ENERGYMESSAGE
WAIT(1)
END_IF
:ENERGYMESSAGE
Не нужно придумывать команды, образцы есть в меню Команды->Прочее
И это не говоря о том что использование гото в данном месте все го лишь пропустит задержку в 1 секунду.
То есть ты сначала написал задержку а потом прыжок гото чтоб её не выполнять?!
цифры поправил просмотрел пока копировал
Дальше, здесь куда то пропали цифрыCode: (clickermann) [Select]LCLICK($_return1+2, $_return2+)
+ чего? Если стер число так и плюс сотри.Не могу понять как после выполнения 31 строчки в случаи появления окна message.bmp уходить на метку energymessage
Судя по всему ты просишь цикл поиска с завершением после не обнаружения картинки.Code: (clickermann) [Select]$check = 0
WHILE($check = 0)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "message.bmp")
LCLICK($_return1, $_return2)
WAITMS(100)
ELSE
$check = 1
WAITMS(50)
END_IF
END_CYCиначе на прогонять скрипт с 1 строчки. Объясните как сделать?А как же поиск "poluchit.bmp" и "krest.bmp"?
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "mana_cristal.bmp")
DBLCLICK($_return1+2, $_return2+2)
WAIT(1)
DBLCLICK($_return1+2, $_return2+2)
WAIT(1)
END_IF
WAITMS(500)
$count = 3
GETSCREEN
FOR($num=1,$num<$count+1) // Ищем картинки от начала до конца
IF_PICTURE_IN(0,0, 826,503, STRCONCAT("farm\ok",$num,".bmp"), -1, 100)
LCLICK($_return1+1, $_return2+1)
WAITMS(100)
$num = 9999 // прерываем цикл если есть совпадение
END_IF
END_CYC
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "zabrat_runu.bmp")
LCLICK($_return1+2, $_return2+2)
WAIT(1)
END_IF
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "povtorit.bmp")
LCLICK($_return1+2, $_return2+2)
ELSE
GOTO ENERGYMESSAGE
WAIT(1)
END_IF
:ENERGYMESSAGE
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "message.bmp")
LCLICK($_return1+2, $_return2+)
END_IF
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "poluchit.bmp")
LCLICK($_return1+2, $_return2+)
END_IF
WAITMS(500)
GETSCREEN
IF_PICTURE_IN (0,0, 826,503, "krest.bmp")
LCLICK($_return1+2, $_return2+)
END_IF
Доброго времени суток)