Baltazar |
Отправлено: 12 Июля, 2020 - 17:51:51
|
Прохожий
Покинул форум
Сообщений всего: 12
Дата рег-ции: Июль 2020
Репутация: 0
|
В игре нужно определить что ХП персонажа полное, Для этого я получаю параметры окна и контрола в переменные wg и w соответственно. после чего идет отправление нажатий клавиш для установки искомого окна в востановленное состояние, после чего я указываю размеры окна, и ищу в контроле картинку. По задумке если картинка не найдена скрипт возвращается снова к поиску. А если найдена то идут указания на 2 клика по координатам в контроле. Но вне зависимости от того есть картинка ХП на экране или нет её findimage возвращает то значение которое я ставлю в первом аргументе. то есть если поставлю - 1 вернёт -1 поставлю 1 вернёт 1. И кроме этого выдает ошибку при получении координат найденного изображения.
Вот код
win wg=window ("Áîéöîâñêèé êëóá - Google Chrome", "Chrome_WidgetWin_1", -1);
if (wg==0){messagebox ("error wg");}
win w=window ("Chrome Legacy Window", "Chrome_RenderWidgetHostHWND", wg);
if (w==0){messagebox ("error w");}
activate(wg);
keydown(LWIN);
key(UP);
keyup(LWIN);
keydown(LWIN);
key(DOWN);
keyup(LWIN);
pause(1000);
wg.widthclient = (1024);
wg.heightclient = (768);
moveclient(wg);
if (wg==0){messagebox ("error moveclient");}
pause(1000);
int xp[100][100];
loadimage (#xp[0][0], pathfolder()+"xp.bmp");
int x[1], y[1];
XP:;
pause(10000);
messagebox (findimage(-1, #xp[0][0], -1, #x[0], #y[0], 0, 0, w.widthclient, w.heightclient, 10, 10, 10, 10, 10, 10, 10, 1, w));
if(findimage(-1, #xp[0][0], -1, #x[0], #y[0], 0, 0, w.widthclient, w.heightclient, 10, 10, 10, 10, 10, 10, -1, 1, w)==0)
{
messagebox ("Не вижу ХП или ХП неполное");
pause(rand (5000, 8000));
goto XP;
}
else
{
messagebox ("Координаты " + #x[0] + " " + #y[0]);
messagebox ("Хп полное");
sendmouse(LEFT, rand (815, 871), rand (14, 24), w);
pause(rand (3000, 5000));
sendmouse(LEFT, rand (701, 789), rand (66, 81), w);
pause(rand (3000, 5000));
}
Второй день голову ломаю, Подскажите пожалуйста в чем ошибка?(Отредактировано автором: 12 Июля, 2020 - 18:05:55) |
|
|
Zireael |
Отправлено: 12 Июля, 2020 - 18:02:58
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: то есть если поставлю - 1 вернёт -1 поставлю 1 вернёт 1.
Цитата: В случае ошибка возвращает:
-1 размер масива в который записываются X координаты меньше найденых изабражений
-2 размер масива в который записываются Y координаты меньше найденых изабражений
-3 Область поиска меньше искомого рисунка по X
-4 Область поиска меньше искомого рисунка по Y
Т. е. при -1 ищет все картинки. Массивы x и y размером 1, если найдётся больше одной картинки, то функция вернёт ошибку -1.
При первом параметре 1 возвращает 1, значит найдена одна картинка.
Цитата: И кроме этого выдает ошибку при получении координат найденного изображения.
messagebox ("Координаты " + #x[0] + " " + #y[0]);
CODE:messagebox ("Координаты "+format(x[0])+" "+format(y[0])); |
|
|
Baltazar |
Отправлено: 12 Июля, 2020 - 20:30:57
|
Прохожий
Покинул форум
Сообщений всего: 12
Дата рег-ции: Июль 2020
Репутация: 0
|
Спасибо большое за разъяснения! Теперь показывает координаты x 0 y 0 И так как поставил 1 первым аргументом возвращает 1, то есть нашёл 1 совпадение. вот только по этим координатам не тот рисунок и совпадений не может быть больше 1, потому как нет на экране ничего похожего на полоску ХП и даже если на экране нет полоски ХП или оно не полное, он все равно находит совпадение по координатам x 0 y 0. Где то ещё есть ошибка. Буду благодарен за любую помощь.
(Добавление)
Вот код
win wg=window ("Áîéöîâñêèé êëóá - Google Chrome", "Chrome_WidgetWin_1", -1);
if (wg==0){messagebox ("error wg"}
win w=window ("Chrome Legacy Window", "Chrome_RenderWidgetHostHWND", wg);
if (w==0){messagebox ("error w"}
activate(wg);
keydown(LWIN);
key(UP);
keyup(LWIN);
keydown(LWIN);
key(DOWN);
keyup(LWIN);
pause(1000);
wg.widthclient = (1024);
wg.heightclient = (768);
moveclient(wg);
if (wg==0){messagebox ("error moveclient"}
pause(1000);
int xp[100][100];
loadimage (#xp[0][0], pathfolder()+"xp.bmp"
int x[1], y[1];
XP:;
pause(10000);
messagebox (findimage(1, #xp[0][0], -1, #x[0], #y[0], 0, 0, w.widthclient, w.heightclient, 0, 0, 0, 0, 0, 0, -1, 1, w));
if(findimage(1, #xp[0][0], -1, #x[0], #y[0], 0, 0, w.widthclient, w.heightclient, 0, 0, 0, 0, 0, 0, -1, 1, w)==0)
{
messagebox ("Не вижу ХП или ХП неполное"
pause(rand (5000, 8000));
goto XP;
}
else
{
messagebox ("Координаты "+format(x[0])+" "+format(y[0]));
messagebox ("ХП полное"
sendmouse(LEFT, rand (815, 871), rand (14, 24), w);
pause(rand (3000, 5000));
sendmouse(LEFT, rand (701, 789), rand (66, 81), w);
pause(rand (3000, 5000));
}(Отредактировано автором: 12 Июля, 2020 - 20:48:02) |
|
|
Zireael |
Отправлено: 12 Июля, 2020 - 21:06:14
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: findimage(1, #xp[0][0], -1, #x[0], #y[0], 0, 0, w.widthclient, w.heightclient, 0, 0, 0, 0, 0, 0, -1, 1, w)
Процент совпадения не может быть отрицательным. От 0 до 100.
Зачем вообще нужен findimage для поиска хп? scanpixel или findcolor подойдут. |
|
|
|