Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Как сначала найти все объекты на экране а потом выполнить с ними действия?

Страниц (2): [1] 2 »
 

1. Martin - 18 Июля, 2022 - 07:13:28 - перейти к сообщению
Я делаю поиск картинок на экране по цепочке. И как только найдется первый объект выполняется с ним действие, он исчезает и цикл начинается по новой. Получается поиск повторяется с начала а не с места где он нашел первый объект и тратится много лишнего времени.
Как сделать чтобы сначала нашлись на экране все картинки а потом выполнить с ними одно из трех действий? Или как то по другому ускорить поиск
2. KevinS - 18 Июля, 2022 - 08:28:06 - перейти к сообщению
CODE:

loop()
{
if(findimage(...)==1) действие;
if(findimage(...)==1) {действие; действие;}
if(findimage(...)==1) действие;
}
3. Martin - 18 Июля, 2022 - 08:42:05 - перейти к сообщению
KevinS , Проблема в том, что действия после нахождения картинки уводят в начало цикла и вернутся нет возможности в место где была найдена картинка и продолжить от туда. Такое решение не подойдет
(Добавление)
Это не было бы проблемой если бы картинок было меньше 100.
4. Zireael - 18 Июля, 2022 - 08:47:22 - перейти к сообщению
 Цитата:
поиск картинок

Непонятно что имеется ввиду. Поиск разных картинок или одной и той же.
 Цитата:
одно из трех действий?

Как определять какое именно действие?
5. Martin - 18 Июля, 2022 - 09:12:17 - перейти к сообщению
Zireael , Поиск разных картинок, есть база картинок для findimage, так же есть поле где нужно найти эти картинки. Картинки могут повторятся.

 Zireael пишет:
Как определять какое именно действие?

После клика на найденную картинку появляется окно и в зависимости от того, что там написано /изображено, выбирается одно из трех действий.
6. KevinS - 18 Июля, 2022 - 10:22:48 - перейти к сообщению
 Martin пишет:
KevinS , Проблема в том, что действия после нахождения картинки уводят в начало цикла и вернутся нет возможности в место где была найдена картинка и продолжить от туда. Такое решение не подойдет
(Добавление)
Это не было бы проблемой если бы картинок было меньше 100.


Не понимаю, а зачем действия после нахождения картинки уводят в начало цикла?

 Цитата:

loop()
{
if(findimage(...)==1) Действие();
if(findimage(...)==1) Действие();
if(findimage(...)==1) Действие();
}

function Действие()
{
//тут в зависимости от того, что там написано /изображено, выбирается одно из трех
действий
}


После выполнения действия перехода в начало цикла не будет. Выполнятся следующие if(findimage(...)==1) Действие(); идущие ниже.
7. Zireael - 18 Июля, 2022 - 11:11:10 - перейти к сообщению
CODE:
string Path = "C:\Users\username\Desktop\image"; // путь к папке с картинками
int Image[200][100][100]; // массив для 200 картинок размером не более 100*100
string FileName[200]; // массив, в которой запишутся имена картинок
int ccord[4] = {6, 147, 113, 197}; // координаты поиска, левый верхний угол и правый нижний
int ResultArray[999][2]; // массив для координат всех найденных картинок
int CountFindImage; // переменная, в которой будет записано сколько всего нашлось картинок
int PosX[99], PosY[99]; // переменные для координат найденных картинок
int i;

int CountImage = dir(Path, #FileName[0], "file", "bmp"); // поиск bmp файлов в папке
messagebox("Количество картинок в папке: "+format(CountImage));

// загрузка картинок в массив
for(i=0; i<CountImage; i++)
{
if(loadimage(#Image[i][0][0], Path+"\"+FileName[i])<1)messagebox("Файл "+FileName[i]+" не загружен");
}

loop()
{
// поиск всех картинок
CountFindImage = 0;
for(i=0; i<CountImage; i++)
{
int Found = findimage(99, #Image[i][0][0], -1, #PosX[0], #PosY[0], ccord[0], ccord[1], ccord[2], ccord[3], -1);
for(int j=0; j<Found; j++)
{
ResultArray[CountFindImage][0] = ccord[0] + PosX[j];
ResultArray[CountFindImage][1] = ccord[1] + PosY[j];
CountFindImage++;
}
}

messagebox("Всего найдено изображений: "+format(CountFindImage));
for(i=0; i<CountFindImage; i++)
{
// тут выполняем нужные действия
mousemove(ResultArray[i][0], ResultArray[i][1]); // навести курсор на все найденные картинки
pause(500);
}

pause(3000);
messagebox("Повтор");
}
8. konctantin777 - 19 Июля, 2022 - 10:28:13 - перейти к сообщению
А если я найду все зоны динамики, сохраню. Подскажите как потом искать динамику(чтобы кликнуть) исключая найденные места- не могу сообразить..
(Добавление)
Т. е.. задача- найти на экране всю динамику, чтобы потом искать динамику в местах где её не было при 1м поиске
(Добавление)
Искомый объект 5 пикселей. Если найти всю динамику и проверять, что она не попадает в найденные ранее места, то это же нагрузка большая, учитывая, что на треть экрана объекты могут быть. А виз редакторе можно искать исключая определённые зоны. Значит можно как то автоматом в исключение подставить ?
9. Zireael - 19 Июля, 2022 - 10:50:36 - перейти к сообщению
 Цитата:
А если я найду все зоны динамики, сохраню. Подскажите как потом искать динамику(чтобы кликнуть) исключая найденные места

Искать динамику 2 раза в разные переменные, потом сравнивать координаты, записывая результат в отдельный массив.
10. konctantin777 - 19 Июля, 2022 - 11:04:47 - перейти к сообщению
 Zireael пишет:
потом сравнивать координаты

При 1м поиске находится больше 500 мест динамики. Цикл же долгим получиться постоянно столько перебирать?

Powered by ExBB FM 1.0 Final