|
|
|
Работа с цветом |
|
|
Женя777 |
30.7.2017, 12:54
|
Novice
Сообщений: 56
Регистрация: 3.8.2016 Группа: Пользователи Наличность: 0
Пользователь №: 18.063
Возраст: 20
|
Цитата(cirus @ 22.7.2017, 21:43) В таком виде if 363, 754 2769257 проверяет только в не перекрытом окне. Например, разверните окно пилота на весь экран и проверьте. Условие не выполнится, т. к. окно с игрой будет перекрыто.
А можно как то сделать, что бы подобный скрипт работал, но в перекрытом окне? Код if 626, 549 1713791 // если цвет совпадает left 631, 548 // клик wait 2000 + random (500) end_if
|
|
|
|
cirus |
31.7.2017, 11:53
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 26540
Пользователь №: 16.971
Возраст: 29
|
Цитата То есть для того что бы скрипт был полноценнорабочим, цвет в одной точке нужно проверять. Я имел ввиду обязательно ли нужен if с проверкой цвета. Например, нужно проверить наличие какого-то объекта, можно сделать картинку это объекта и искать с помощью findimage. Или через findcolor искать определённый пиксель в указанной области. Также для поиска цвета в перекрытых оконах должна быть тема aero. Можно проверить цвет и через if. Код set #handle findwindow("имя окна") // вписать имя окна if color (626, 549 #handle) = 1713791 log ++ else log -- end_if end_script Но, весьма вероятно, придётся указывать другие координаты, т. к. цвет будет проверяться относительно родительского окна, а не окна с игрой. Можно проверить будет ли разница: Код // делаем привязку через Ctrl + A set #handle findwindow("имя окна") // вписать имя окна get color #a 626, 549 get color #b 626, 549 #handle log #a #b end_script Если #b будет не 0, то это уже неплохо.
|
|
|
|
Женя777 |
31.7.2017, 13:38
|
Novice
Сообщений: 56
Регистрация: 3.8.2016 Группа: Пользователи Наличность: 0
Пользователь №: 18.063
Возраст: 20
|
Цитата(cirus @ 31.7.2017, 14:53) Я имел ввиду обязательно ли нужен if с проверкой цвета. Например, нужно проверить наличие какого-то объекта, можно сделать картинку это объекта и искать с помощью findimage. Или через findcolor искать определённый пиксель в указанной области. Также для поиска цвета в перекрытых оконах должна быть тема aero. Можно проверить цвет и через if. Код set #handle findwindow("имя окна") // вписать имя окна if color (626, 549 #handle) = 1713791 log ++ else log -- end_if end_script Но, весьма вероятно, придётся указывать другие координаты, т. к. цвет будет проверяться относительно родительского окна, а не окна с игрой. Можно проверить будет ли разница: Код // делаем привязку через Ctrl + A set #handle findwindow("имя окна") // вписать имя окна get color #a 626, 549 get color #b 626, 549 #handle log #a #b end_script Если #b будет не 0, то это уже неплохо. Как правельно узнать имя окна? Я вписывал название вкладки - Forge of Empires, и просто и в кавычках, не получается. А если без этой строки вообще - set #handle findwindow, то два плюсика )
|
|
|
|
Женя777 |
31.7.2017, 14:58
|
Novice
Сообщений: 56
Регистрация: 3.8.2016 Группа: Пользователи Наличность: 0
Пользователь №: 18.063
Возраст: 20
|
Цитата(cirus @ 31.7.2017, 16:59) А с чего вы взяли что не получается? Код set #handle findwindow("Forge of Empires") log #handle // хендл окна (тот же самый если нажать ctrl + A на рамке браузера) end_script Если окно не найдено, то будет проверять как обычно, как будто оно вообще не указано. Код // делаем привязку через Ctrl + A к окну с игрой (т. е. как обычно) set #handle findwindow("Forge of Empires") get color #a 626, 549 get color #b 626, 549 #handle // в этом случае цвет будет всегда один и тот же, даже если окно с игрой перекрыть log #a #b end_script Что будет в логе? Название окна оказалось: "Forge of Empires - Mozilla Firefox") Выяснил с помощю скрипта: Код set #handle findwindow("Forge of Empires") log #handle // хендл окна (тот же самый если нажать ctrl + A на рамке браузера) end_script С помощю этого скрипта: Код // делаем привязку через Ctrl + A к окну с игрой (т. е. как обычно) set #handle findwindow("Forge of Empires") get color #a 626, 549 get color #b 626, 549 #handle // в этом случае цвет будет всегда один и тот же, даже если окно с игрой перекрыть log #a #b end_script Выяснил что код цвета во втором столбике всегда одинаковый, перекрыт окном или нет. ) В во втором столбике код цвета разный.
|
|
|
|
Женя777 |
31.7.2017, 17:02
|
Novice
Сообщений: 56
Регистрация: 3.8.2016 Группа: Пользователи Наличность: 0
Пользователь №: 18.063
Возраст: 20
|
Цитата(cirus @ 31.7.2017, 18:13) Можно писать часть имени, тоже найдёт. Значит повезло что нет смещения. Тогда получается так будет: Код set #handle findwindow("Forge of Empires - Mozilla Firefox") // это только вначале скрипта if color (626, 549 #handle) = 1713791 // тут клик или что там надо end_if // или так get color #a 626, 549 #handle if #a = 1713791 // тут клик или что там надо end_if Что то не работают эти два кода именно на клик. (клик я подставлял)
|
|
|
|
Женя777 |
1.8.2017, 11:00
|
Novice
Сообщений: 56
Регистрация: 3.8.2016 Группа: Пользователи Наличность: 0
Пользователь №: 18.063
Возраст: 20
|
Цитата(cirus @ 1.8.2017, 4:53) Значит цвет не совпадает. Выводите в лог полученный цвет, будет сразу видно какой там цвет. Код set #handle findwindow("Forge of Empires - Mozilla Firefox") // это только вначале скрипта get color #a 626, 549 #handle log #a if #a = 1713791 // тут клик или что там надо end_if end_script Действительно цвет не совпадал! ) (IMG: https://image.prntscr.com/image/i0LsMQ_nSWSYDd3usIatcA.gif) Счас правельный цвет подставил, заработало! ) А почему так? Иногда определяет правельно иногда нет..
|
|
|
|
Женя777 |
1.8.2017, 13:19
|
Novice
Сообщений: 56
Регистрация: 3.8.2016 Группа: Пользователи Наличность: 0
Пользователь №: 18.063
Возраст: 20
|
Цитата(cirus @ 1.8.2017, 15:51) При этом типе поиска может быть смещение координат, т. е. цвет определяется в других координатах. А вообще в этой игре цвет всё время меняется. Понажимайте в одной точке Ctrl+A, цвет меняется иногда. На главной странице с игрой это видно если присмотреться. Можно использовать findcolor с погрешностью в цвете. Развернуть игру на весь экран, указать координаты и цвет, проверить найдётся ли цвет: Код set #handle findwindow (Forge) init_arr %a (1) 231, 464 3164826 // координаты и цвет set #startX %a[1 1] + 8 // смещение по X set #startY %a[1 2] set #a findcolor (#startX #startY #startX #startY (%a[1 3]) %arr #handle -1 3) // погрешность в цвете 3% if #a > 0 log %arr [1 1] %arr [1 2] %arr [1 3] else log цвет не найден end_if end_script Цвет не найден..
|
|
|
|
Женя777 |
1.8.2017, 14:42
|
Novice
Сообщений: 56
Регистрация: 3.8.2016 Группа: Пользователи Наличность: 0
Пользователь №: 18.063
Возраст: 20
|
Цитата(cirus @ 1.8.2017, 16:37) Координаты и цвет подставили свои хоть? Если да, значит смещение другое.
Конечно подставил! ) Но я думаю смещение мне не понадобится, я ведь научился определять цвет. А Вы можете дописать в код ниже, так сказать процентный запас цвета который может изменится и из за этого не определится, процентов пять ) Код set #handle findwindow("Forge of Empires - Mozilla Firefox") // это только вначале скрипта get color #a 155, 673 #handle if #a = 12900073 left 155, 673 // тут клик или что там надо end_if end_script
|
|
|
|
Женя777 |
1.8.2017, 17:02
|
Novice
Сообщений: 56
Регистрация: 3.8.2016 Группа: Пользователи Наличность: 0
Пользователь №: 18.063
Возраст: 20
|
Цитата(cirus @ 1.8.2017, 18:17) код
Код set #handle findwindow("Forge of Empires - Mozilla Firefox")
set #deviation 10 // погрешность в цвете set #color 12900073 // цвет gosub rgb // подпрограмма возвращает мин. и макс. цвет с учётом погрешности #Mincolor #Maxcolor hint #Mincolor #color #Maxcolor // можно убрать get color #a 155, 673 #handle if #a > #Mincolor and #a < #Maxcolor log +++ else log --- end_if end_script // это в конец скрипта :rgb set #R #color - #color / 256 * 256 set #G (#color - #color / 65536 * 65536) / 256 set #B #color / 65536 set #Rmin #R - #deviation set #Rmax #R + #deviation set #Gmin #G - #deviation set #Gmax #G + #deviation set #Bmin #B - #deviation set #Bmax #B + #deviation if #Rmin < 0 set #Rmin 0 end_if if #Rmax > 255 set #Rmax 255 end_if if #Gmin < 0 set #Gmin 0 end_if if #Gmax > 255 set #Gmax 255 end_if if #Bmin < 0 set #Bmin 0 end_if if #Bmax > 255 set #Bmax 255 end_if set #Mincolor #Rmin + #Gmin * 256 + #Bmin * 65536 set #Maxcolor #Rmax + #Gmax * 256 + #Bmax * 65536 return Испробовал проверил, всё работает! Спасибо большое!!! ))
|
|
|
|
Женя777 |
23.9.2017, 14:29
|
Novice
Сообщений: 56
Регистрация: 3.8.2016 Группа: Пользователи Наличность: 0
Пользователь №: 18.063
Возраст: 20
|
Доброго времени суток! Помогите пожалуйста. Нужно что бы если в пяти точках цвет 530735, то скрипт останавливался. Пробовал написать сам, но не получилось.. Код get color #a 279, 756 #handle get color #b 365, 756 #handle get color #c 450, 756 #handle get color #d 536, 756 #handle get color #e 622, 756 #handle
if #a, #b, #c, #d, #e = 530735 stop_script end_if
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|