Andrew |
Отправлено: 06 Августа, 2013 - 23:32:55
|
Участник
Покинул форум
Сообщений всего: 118
Дата рег-ции: Июнь 2013
Откуда: Россия
Репутация: 9
|
Здравствуйте Kibor .
В мой мозг взбрела новая идея
Можно ли реализовать такое:
Цитата: Данная функция проверяет статичность экрана. Нужна для выжидания паузы. Пока персонаж бежит экран статичен только в некоторых местах-низ, чат, хп, ник (примеры статики), а когда он прибежит-он стоит на месте , и окружающая среда становиться более менее статична.
CODE:
Идем;
Ждем статичность экрана на 1/2;
Идем;
Можно ли выполнить такое?
Можно было брать для каждого места, на которое приходит персонаж, делать скрин и сравнивать с неполным совпадением... но их нужно много. Можно даже не искать статичности всего экрана (игрового окна), а только части (квадрат левого угла, место над ником и др.). Подскажите пожалуйста, возможно ли выполнить данную функцию?
P.S. На слово "Можно" меня просто поперло |
|
|
Kibor |
Отправлено: 07 Августа, 2013 - 00:26:10
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Я так понял это для определения того момента когда персонаж уже дошел до точки и стал?
В принципе можно... К примеру мы проверяем статичность части экрана 200 на 100 в нижнем левом углу как на рисунке.
Для этого пишем такой код:
CODE://Кликнули мышкой для передвижения перса
int din;
j: finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 480, w);//делаем скрин части экрана в координатах 5, 380, 205, 480 относительно левого верхнего угла окна игры w
sleep(1000);//пауза 1 сек
din=finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 480, w);// сравниваем с скрином и получаем количество очагов динамики. их может поместиться максимум 12 при динамичном экране так как ищутся объемы размерами 50 на 33.
//Объем считается динамичным если все пикселя входящие в желтый крестик размером 45 на 30 содержит все динамичные пикселя
if (din>6) goto j;//Больше половины участка динамика. проверка опять
//Если количество очагов динамики меньше половины - экран статика.
//Идем дальше
Но может так быть что в пределах рамки будет моб или другой перс стоять и там будет более 50 процентов динамики. Лучше проверять разные части экрана. То есть не в одном углу а раскидать эти 12 проверок по разным местам.
|
|
|
Andrew |
Отправлено: 07 Августа, 2013 - 01:37:33
|
Участник
Покинул форум
Сообщений всего: 118
Дата рег-ции: Июнь 2013
Откуда: Россия
Репутация: 9
|
Kibor , И в тысячный раз спасибо.
Создал функцию
CODE:win w=window ("Drakensang Online: браузерная онлайн-игра в стиле фэнтези", "QWidget", -1);
sleep(500);
int din; int x[0]; int y[0];
activate(w);
sleep(500);
///////////////////////
mouse (LEFT, 823, 233); // Идем
sleep(1000);
dynamic(); // Ждем, когда перс придет на место
mouse (RIGHT, 823, 233); // Пришли, стреляем
sleep(700);
mouse (RIGHT, 823, 233);
sleep(7000)
function dynamic()
{
j:
finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 380, w);
sleep(5000);
din=finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 380, w);
if (din>6)
{goto j;}
else
{sleep(500);} // После того как пришли на место, даем пролагаться
} |
|
|
Kibor |
Отправлено: 07 Августа, 2013 - 02:02:59
|
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Пожалуйста. Обращайтесь.
Пару замечаний...
Andrew пишет: int din; int x[0]; int y[0];
Надо выделить память минимум для 12 координат:
Andrew пишет: din=finddynamic(12,
А тут вообще память выделяется 0...
Получается ошибка и finddynamic вернет не количество объектов а -1
finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 380, w);
sleep(5000);
din=finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 380, w);
Где область поиска? Координаты Y левого верхнего и правого нижнего углов прямоугольника одинаковы.
Тут можно было обойтись без else. Все равно если условие не выполнено управление попадет на следующую строку:
CODE:j: finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 480, w);
sleep(5000);
din=finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 480, w);
if (din>6) goto j;
sleep(500); // После того как пришли на место, даем пролагаться
А можно вообще так:
CODE:j: finddynamic(0, #x[0], #y[0], 0, 0, 0, 0, 5, 380, 205, 480, w);
sleep(5000);
if (finddynamic(12, #x[0], #y[0], 45, 30, 50, 33, 5, 380, 205, 480, w)>6) goto j;
sleep(500); // После того как пришли на место, даем пролагаться |
|
|
|