Что нового

Какими методами можно найти координаты заданного изображения?

SurikenTSD

Новичок
Сообщения
67
Репутация
1
Всем привет!
Начну с того, что я совсем недавно познакомился с AutoIT, поэтому многого еще не знаю и не понимаю. Если у вас есть какие-либо советы, которые помогут мне быстрее освоиться в AutoIt, буду рад принять их как в этом сообщении, так и в привате.

А теперь к сути дела: хочу отточить свои навыки путем написания бота для браузерной игрушки The Settlers Online (написана на flex). В некоторых вещах, необходимых для этого я разобрался, частично разобрался или знаю, где искать ответы на свои вопросы. Однако вся соль заключается в том, что иначе как через поиск иконок (генералов\геологов\следопытов и тд) автоматическое управление игрой не реализовать.

d4237a2ca55173e6461c3b09fb858c4e.png

Открывая звездное меню (иконка звездочки) появляется возможность выбирать тех или иных персонажей и отдавать им указания. 1 задание на 1 персонажа, после чего он становится недоступен вплоть до выполнения задания.
P.S.: При наведении на иконку выдается подсказка с информацией по персонажу или предмету.

Что мне надо? Как-то нажимать на эти иконки, а как вычислять координаты необходимых иконок я, к сожалению, не знаю. Вот, собственно, и сам вопрос: есть такая-то иконка, которая встречается много раз, как мне ее найти на экране первую попавшуюся иконку такого типа и нажать на нее?

Опять же, поскольку я пока еще полный профан, надеюсь на пример кода по решению подобных ситуаций с развернутыми комментариями. Заранее благодарю.
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Re: Работа с одинаковыми иконками: найти и использовать.

хм, если я правильно понял, то есть несколько вариантов реализации, самый простой и долгий (всяко быстрее, чем мышкой самому шелкать) - это использовать PixelSearch . В твоем случае на скриншоте 18 иконок-мест, значит можно сделать 18 зон поиска.
Картинки вроде разные, а кристаллы синие одинаковые на всех задействованных генералах, значит нужно искать кристаллы, и после того как найден последний, тыкать мышкой (MouseClick), в следующую область.
Код:
$i = 0
$x1 = ; здесь выстави первоначальные координаты
$y1 = 
$x2 = 
$y2 = 
For 1 to 18
 PixelSearch ($x1, $y1, $x2, $y2, 0xFFFFFF, 10)
Select
	Case @error 
MouseClick ("prymary", $x1 + 20, $y1 + 20, 1, 20) ;сдесь ты кликаешь в центр картинки. Вместо 20-тоже поставишь свое значение на сколько оно отличается от координат х1 и у1
		ExitLoop
	Case Not @error 
		$x1 += 200 ;здесь ставь не 200, а свои значения, показывающие на сколько пикселей дальше находится следующий кристал
		$x2 += 200 
	Case $x1 = 1200 ;когда первый ряд иконок закончился и нужной не найденно
		$x1 = 200
		$x2 = 200
		$y1 += 200
		$y2 += 200
Case $i=18
;если ни чего не найдено, т.е нет активных иконок, то попробуй сам найти решение как передвинуть ползунок
exitloop
EndSelect
$i +=1
Next



OffTopic:
А вообще старайся сам доходить до всего, и читать форум, здесь много интересного написано, пусть не в одной теме, а в каждой по строчке, но все-же
 
Автор
S

SurikenTSD

Новичок
Сообщения
67
Репутация
1
Re: Работа с одинаковыми иконками: найти и использовать.

Спасибо. Завтра на выспавшуюся голову попробую разобраться в предоставленном коде.

P.S.: Только эти кристаллики появляются у "занятых" генералов, разведчиков и геологов. Нажимая на них можно в 2 раза сократить время выполнения задания за игровую валюту. У свободных персонажей их нету.

P.P.S.: А не затруднит хотя бы в 2х словах рассказать, какие еще могут быть варианты реализации?
 

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Re: Работа с одинаковыми иконками: найти и использовать.

Вот отличная UDF для данной темы http://autoit-script.ru/index.php?action=downloads;sa=downfile&id=228

Вот здесь вся информация для неё http://autoit-script.ru/index.php/topic,175.0.html

Суть работы такова: ищет картинку на экране из шаблона. Работает быстро и довольно не плохо.
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Re: Работа с одинаковыми иконками: найти и использовать.

SurikenTSD
Нет, я предлагал нажимать не на кристаллы, а в центр иконки (поиск неактивных иконок происходит по кристаллам)
Код:
MouseClick ("left", $x1 + 20, $y1 + 20, 1, 20); здесь происходит клик на иконке, в которой нет кристалла (я так понял, что она активная получается), а $x1 + 20, как раз и есть смешение к центру иконки, там уже сам посчитай по координатам сколько надо выставить.



SurikenTSD [?]
P.P.S.: А не затруднит хотя бы в 2х словах рассказать, какие еще могут быть варианты реализации?
ну например использовать поиск картинок с помощью битмапа, и сравнивать с бинарным кодом скриншота, но в этом я слабо разбираюсь.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: Работа с одинаковыми иконками: найти и использовать.

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Данные правила могут пополняться локальными правилами раздела.
Как правильно называть темы

"Работа с одинаковыми иконками: найти и использовать." - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, ваш Модератор.











Добавлено:
Сообщение автоматически объединено:

Правила читай когда тебе предупреждение дают. В моём разделе они описаны отдельно. И твая тема до сих пор называется так, что её можно закрыть. Если не понимаешь что написано в правилах читай еще раз 100.
 
Верх