mikeee |
Отправлено: 11 Июня, 2015 - 08:25:19
|
Прохожий
Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2015
Репутация: 0
|
Доброго всем дня!
Не работает поиск скученностей пикселей. Просто в коде работает. Второй раз, внутри функции - не хочет.
Ниже код. В нём два раза делается поиск. Первый цикл работает.
А второй (вложенный, сделанный функцией) не пашет.
1. Находит не голубые, а белые или около того цвета.
2. Методом тыка задаю ему область где искать -400, -150, 500, 500. Не понимаю почему не работает 0,0,1024,768.
Кто имеет опыт, подскажите, где я ошибся. Уже 2,5 часа бьюсь.
CODE:aa=window ("Каталог", "#32770", window (...
activate(aa);
int min_col=3;//Найти если все три цвета
int r=10; // это плюс минус для значений R,G и B
int color[3];
int color2[3];
color[0]=12218368; color[1]=15245824; color[2]=12231350;//Тут цвета для уровня 1
color2[0]=14453575; color2[1]=14453575; color2[2]=14453575;//Тут цвета для уровня 2
int kol[3];
kol[0]=1; kol[1]=1; kol[2]=1;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные для уровня 1
int x2[50], y2[50];//Тут координаты найденные для уровня 2
int colors, xw, yw;
getdisplay(colors, xw, yw); // снимаем глубину цвета и размер экрана
int m=0;
d:if (m<4) // цикл продвижения скролла (на 4 экрана)
{
activate(aa);
// снимаем все скученности
int k=findheapcolor(20, #color[0], #kol[0], 3, 3, #x[0], #y[0], 15, 15, 350, 50, 0, 0, xw, yw, r, r, r, r, r, r, -1);
textbkcolor (8454143,255);
//messagebox (format(k)+" скученностей на 1м экране");
int n=0;
s:if (n<k) // цикл перебирающий экран 1го уровня
{
textout(n, x[n], y[n] , format(n), 0);
mousemove(x[n], y[n]);
sleep(1000);
mouse(LEFT);
//messagebox ("клик");
perebor_level2(n);
sleep(2000);
n++;
goto s;
} // ! цикл перебирающий экран каталога 1го уровня
messagebox (format(k)+" ссылок нашли на 1м уровне");
mouse(LEFT,932, 560);
sleep(100);
m++;
goto d;
}// ! цикл продвижения скролла (на 4 экрана)
// ФУНКЦИИ ================================
function perebor_level2(int n)
{
messagebox ("Начинаем перебор второго уровня. Итерация " + format(n+1));
sleep(1000);
// снимаем все скученности
int k2=findheapcolor(50, #color2[0], #kol[0], 1, 1, #x2[0], #y2[0], 15, 15, 10, 10, -400, -150, 500, 500, r, r, r, r, r, r, -1);
textbkcolor (8454143,255);
messagebox ("Нарыли скученностей: " + format(k2));
int n2=0;
s2:if (n2<k2) // цикл перебирающий экран каталога 2го уровня
{
textout(n2, x2[n2], y2[n2] , format(n2), 0);
mousemove(x2[n2], y2[n2]);
sleep(100);
n2++;
goto s2;
} // ! цикл перебирающий экран каталога 2го уровня
messagebox (format(k2)+" ссылок нашли на втором уровне. Возвращаемся на первый.");
sleep(2000);
mouse(LEFT, 446, 192); // клик на Ссылке в каталоге возврат на уровень выше
}
|
|
|
Kibor |
Отправлено: 11 Июня, 2015 - 09:02:37
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
mikeee пишет: Методом тыка задаю ему область где искать -400, -150, 500, 500. Не понимаю почему не работает 0,0,1024,768
тык не правильный.
координаты экрана не могут быть в минус
mousemove(x2[n2], y2[n2]);
при не нулевых координатах старта поиска надо делать смещение
пример
findheapcolor(50, #color2[0], #kol[0], 1, 1, #x2[0], #y2[0], 15, 15, 10, 10, 120, 250, 500, 500, r, r, r, r, r, r, -1);
mousemove(x2[n2]+120, y2[n2]+250); |
|
|
mikeee |
Отправлено: 11 Июня, 2015 - 12:04:22
|
Прохожий
Покинул форум
Сообщений всего: 3
Дата рег-ции: Апр. 2015
Репутация: 0
|
Спасибо. Только так тоже не работало.
вместо
должно быть так:
CODE:dx, dy, dx+500, dy+500
Вот так заработало:
CODE:
win aa=window (...);
activate(aa);
// общие ------------------------------------------------------------------------
int min_col=3;//Найти если все три цвета
int r=10;
int kol[3];
kol[0]=1; kol[1]=1; kol[2]=1;//Тут сколько должно совпасть пикселей для каждого цвета
int colors, xw, yw;
getdisplay(colors, xw, yw);
textbkcolor (8454143,255);
int dx = 400;
int dy = 200;
int color2[3];
color2[0]=12087576; color2[1]=12087576; color2[2]=12087576;//Тут цвета
int x2[50], y2[50];//Тут координаты найденные
int k2=findheapcolor(50, #color2[0], #kol[0], 3, min_col, #x2[0], #y2[0], 15, 15, 400, 17, dx, dy, dx+500, dy+500, r, r, r, r, r, r, -1);
int n2=0;
s2:if (n2<k2)
{
textout(n2, x2[n2] + dx, y2[n2] + dy, format(n2), 0);
mousemove(x2[n2] + dx, y2[n2] + dy);
sleep(100);
n2++;
goto s2;
}
sleep(1000);
messagebox (format(k2)+" объектов нашли");
// блок перебора --------------------------
(Добавление)
И ещё вопрос: А как почистить продукт жизнедеятельности этой строчки?
CODE:textout(n2, x2[n2] + dx, y2[n2] + dy, format(n2), 0);
После того как она в цикле поработала - весь экран в цифрах.
Перед работой следующего цикла нужно почистить экран.(Отредактировано автором: 11 Июня, 2015 - 12:08:54) |
|
|
|