Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » проблема с функцией findheapcolor

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

1. vegan - 29 Января, 2014 - 17:12:07 - перейти к сообщению
Нужен скрипт для флеш-игры.
Задача простая:
Что бы прога искала в конкретном месте конкретный цвет и после этого просто нажимала кнопку. Эта самая область, с нужным цветом постоянно движется, и вот когда она заходит в определенное место на экране - нужно нажимать.

вот что я натворил:
сначала пытался использовать один пиксель нужного цвета
CODE:

int Image_3[1][1];
loadimage (#Image_3[0][0], "C:\green.bmp");
int PosX_3[512];int PosY_3[512];
gr:
if (findimage(-1, #Image_3[0][0], 0, #PosX_3[0], #PosY_3[0],827, 768,864, 784, -1)==1);
{
sleep(10);
keydown('v');
sleep(3);
keyup('v');
};
goto gr;

но скрипт работал не корректно. Например нажимал на кнопку один раз, а два пропускал.


вот пример с использованием findheapcolor

CODE:

int r=5;
int color[3];
color[0]=7339603; color[1]=3535914; color[2]=7012169;
int kol[3];
kol[0]=10; kol[1]=10; kol[2]=10;
gr:
sleep(10);
if (findheapcolor(5, #color[0], #kol[0], 3, 2, #x[0], #y[0], 5, 5, 10, 10,814, 757,870, 782, r, r, r, r, r, r, -1))==1)
{
keydown('v');
sleep(5);
keyup('v');
};
goto gr;

Тут же наоборот - программа без остановки нажимала на кнопку, даже когда заданных цветов и близко не было на экране.
Так же пытался использовать функицю scanpixel, но мой не смог даже отличить белый от черного.

Прошу не сдерживаться и яростно критиковать мои попытки. Так же я был бы рад узнать какие я все таки совершил ошибки, и как их исправить. Если есть другие варианты решения моей задачи - предлогайте.
Добавлю что компьютер мощный и дело не в производительности
2. Kibor - 29 Января, 2014 - 17:38:36 - перейти к сообщению
Первый:
 vegan пишет:
int Image_3[1][1];
loadimage (#Image_3[0][0], "C:\green.bmp");
int PosX_3[512];int PosY_3[512];
gr:
if (findimage(-1, #Image_3[0][0], 0, #PosX_3[0], #PosY_3[0],827, 768,864, 784, -1)==1);
{
sleep(10);
keydown('v');
sleep(3);
keyup('v');
};
goto gr;


Первый параметр -1 означает что будут найдены все изображения (пикселя тут) этого цвета. И функция вернет их количество. Сравнивается это с 1... Если будет 2 или больше то естественно не будет условие выполняться.
Выделенные точки с запятой не нужны...
Если надо найти только одно изображение не надо использовать массив для приема координат...
Что за пауза 3? Это милисекунды. В секунде их 1000...

CODE:

int Image_3[1][1];
loadimage (#Image_3[0][0], "C:\green.bmp");
int PosX_3, PosY_3;
gr:
if (findimage(1, #Image_3[0][0], 0, #PosX_3, #PosY_3,827, 768,864, 784, -1)==1)
{
sleep(10);
keydown('v');
sleep(50);
keyup('v');
}
goto gr;




Второй
 vegan пишет:
int r=5;
int color[3];
color[0]=7339603; color[1]=3535914; color[2]=7012169;
int kol[3];
kol[0]=10; kol[1]=10; kol[2]=10;
gr:
sleep(10);
if (findheapcolor(5, #color[0], #kol[0], 3, 2, #x[0], #y[0], 5, 5, 10, 10,814, 757,870, 782, r, r, r, r, r, r, -1))==1)
{
keydown('v');
sleep(5);
keyup('v');
}
goto gr;


Так же первый параметр 5... То есть ищется до 5. Сравнивается с 1. Если найдет более 1 то не выполнится.
Ошибка. Лишняя скобка. Из за нее не выполняется иф и жмется постоянно.

CODE:

int r=5;
int color[3];
color[0]=7339603; color[1]=3535914; color[2]=7012169;
int kol[3];
kol[0]=10; kol[1]=10; kol[2]=10;
gr:
sleep(20);
if (findheapcolor(1, #color[0], #kol[0], 3, 2, #x[0], #y[0], 5, 5, 10, 10,814, 757,870, 782, r, r, r, r, r, r, -1)==1)
{
keydown('v');
sleep(5);
keyup('v');
}
goto gr;

Powered by ExBB FM 1.0 Final