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

Страниц (6): [1] 2 3 4 5 6 »
 

1. Junior - 24 Мая, 2018 - 13:28:21 - перейти к сообщению

Нужна помощь в освоении функций. На данный момент это findimage.


Не могу разобраться с синтаксисом этой функции.

CODE:
win wind = window ("Безымянный — Блокнот", "Notepad", -1);
wind.leftclient=1; wind.topclient=50;
moveclient(wind);
int lClient=wind.leftclient;
int tClient=wind.topclient;
int wClient=wind.widthclient;
int hClient=wind.heightclient;


int col_KIB, ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;
int bloknot[33][16];

start_();
outofbase_();


function start_()
{
getdisplay(32, wClient, hClient);
load_image_();
pause(1000);
}

function outofbase_()
{
if (findimage(1, #bloknot[0][0], 0, #xbase[0], #ybase[0], lClient, tClient, wClient, hClient, wind)<1)
{
pause(200);
textout(1, 120,90, "Something wrong", 0);
} else {
mousemove(x_base[0], y_base[0]);
pause(100);
}
}

function load_image_()
{
loadimage (#bloknot[0][0], "D:\bot_eve_kibor\file.bmp");//изображение кнопки(надписи) меню: "файл"
}


В результате этого выходит ошибка:

 Цитата:

---------------------------
Kibor
---------------------------
Ошибка в:

findimage(1,#outofbase1[0][0],0,#xbase[0]ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННээээ,#ybase[0]ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННээээ,1,50,730,635,WINS[0])<1goto22
---------------------------
ОК
---------------------------

Что я делаю не так ? Пробовал менять в самих параметрах этой функции, вне её всякое пробовал, выдаёт разные ошибки, но всегда ругается именно на строку с findimage.

И вопрос по переменным, почему в некоторых случаях используется решётка "#" а в некоторых нет, как ими правильно оперировать, куда надо дописывать "#", куда не надо и как их объявлять(переменные такие)?
2. Kibor - 24 Мая, 2018 - 13:39:51 - перейти к сообщению
getdisplay(32, wClient, hClient);
ошибки


xbase ybase
нет объявления
3. Junior - 24 Мая, 2018 - 19:32:08 - перейти к сообщению
 Kibor пишет:
getdisplay(32, wClient, hClient);
ошибки


xbase ybase
нет объявления


Сделал(объявил переменные, поставил значения в getdisplay, даже добавил разбег в findimage), вроде заработало, но не находит картинку Недовольство, огорчение
CODE:
win wind = window ("Безымянный — Блокнот", "Notepad", -1);
wind.leftclient=1; wind.topclient=50;
moveclient(wind);
int lClient=wind.leftclient;
int tClient=wind.topclient;
int wClient=wind.widthclient;
int hClient=wind.heightclient;


int xbase[0];//объявил
int ybase[0];//объявил
int bloknot[33][16];

start_();
outofbase_();


function start_()
{
getdisplay(32, 1920, 1080); //поменял. есть какая то встроенная глобальная переменная, чтобы выдёргивать разрешение экрана?
load_image_();
pause(1000);
}

function outofbase_()
{
pause(200);
if (findimage(1, #bloknot[0][0], 0, #xbase[0], #ybase[0], lClient, tClient, wClient, hClient, 20, 20, 20, 20, 20, 20, 100, 0, wind)<1) //добавил разбег по цветам
{
pause(200);
textout(1, 120,90, "Something wrong", 0);
messagebox("Не получилось");
} else {
mousemove(xbase[0], ybase[0]);
pause(100);
messagebox("Получилось");
}
}

function load_image_()
{
loadimage (#bloknot[0][0], "D:\bot_eve_kibor\file.bmp");
}
4. Zireael - 24 Мая, 2018 - 19:51:24 - перейти к сообщению
Блокнот не самый удачный вариант. Для начала проще на рабочем столе найти какой-то ярлык.
 Цитата:
int xbase[0];//объявил
int ybase[0];//объявил

Нужно размер указывать.
CODE:
int xbase[5]; // массив на 5 элементов
int ybase[5];

 Цитата:
getdisplay(32, 1920, 1080); //поменял. есть какая то встроенная глобальная переменная, чтобы выдёргивать разрешение экрана?

CODE:
int color, x, y;
getdisplay(color, x, y);
messagebox(x);
messagebox(y);
5. Junior - 24 Мая, 2018 - 20:21:04 - перейти к сообщению
 Zireael пишет:
Блокнот не самый удачный вариант. Для начала проще на рабочем столе найти какой-то ярлык.
 Цитата:
int xbase[0];//объявил
int ybase[0];//объявил

Нужно размер указывать.
CODE:
int xbase[5]; // массив на 5 элементов
int ybase[5];

 Цитата:
getdisplay(32, 1920, 1080); //поменял. есть какая то встроенная глобальная переменная, чтобы выдёргивать разрешение экрана?

CODE:
int color, x, y;
getdisplay(color, x, y);
messagebox(x);
messagebox(y);


Упростил ещё больше

CODE:
int xbase[1];//îáúÿâèë
int ybase[1];//îáúÿâèë
int bloknot[47][50];

start_();
outofbase_();


function start_()
{
getdisplay(32, 1920, 1080); //ïîìåíÿë. åñòü êàêàÿ òî âñòðîåííàÿ ãëîáàëüíàÿ ïåðåìåííàÿ, ÷òîáû âûä¸ðãèâàòü ðàçðåøåíèå ýêðàíà?
load_image_();
pause(1000);
}

function outofbase_()
{
pause(200);
findimage(1, #bloknot[0][0], 0, #xbase[0], #ybase[0], 0, 0, 1920, 1080, 20, 20, 20, 20, 20, 20, 100, 1, -1)
pause(200);
string xy=format(xbase[0])+" "+ybase[0]);
mousemove(xbase[0], ybase[0]);
messagebox(xy);
pause(100);
}
}

function load_image_()
{
loadimage (#bloknot[0][0], "D:\bot_eve_kibor\ikonka.bmp");
}


всё равно не находит
(Добавление)
там где объявил стринговую переменную немного ошибся, забыл дописать "format("
после исправления, меседжбокс выдаёт

---------------------------
Kibor
---------------------------
-842150451 -842150451
---------------------------
ОК
---------------------------
6. Kibor - 24 Мая, 2018 - 20:37:48 - перейти к сообщению
Получение помощи непосредственно в программе Кибор






 Цитата:
int xbase[1];//îáúÿâèë
int ybase[1];//îáúÿâèë
int bloknot[47][50];

start_();
outofbase_();


function start_()
{
getdisplay(32, 1920, 1080); //ïîìåíÿë. åñòü êàêàÿ òî âñòðîåííàÿ ãëîáàëüíàÿ ïåðåìåííàÿ, ÷òîáû âûä¸ðãèâàòü ðàçðåøåíèå ýêðàíà?
load_image_();
pause(1000);
}

function outofbase_()
{
pause(200);
findimage(1, #bloknot[0][0], 0, #xbase[0], #ybase[0], 0, 0, 1920, 1080, 20, 20, 20, 20, 20, 20, 100, 1, -1);
pause(200);
string xy=format(xbase[0])+" "+ybase[0]);
mousemove(xbase[0], ybase[0]);
messagebox(xy);
pause(100);
}
}

function load_image_()
{
loadimage (#bloknot[0][0], "D:\bot_eve_kibor\ikonka.bmp");
}
7. Junior - 24 Мая, 2018 - 22:35:03 - перейти к сообщению
Прожал ссылку для получения "справки"
 Цитата:
Работа с системой.
Для

определения параметров экрана

можно воспользоваться функцией getdisplay:

getdisplay(color, x, y);
Все параметры имеют тип int.
В первый записывается глубина цвета.
Во второй разрешение экрана по горизонтали.
В третий разрешение экрана по вертикали.
В случае ошибки возвращает 0. В случае удачного определения 1.

Отсюда я понимаю, что эта функция нужна чтобы получить параметры экрана, однако дальше идёт заполнение параметров функции, т.е. я должен вбить 3 цифры, но какие надо вбивать? Разрешение экрана моего монитора в настоящий момент, область экрана, которую я хочу проверить, размер клиентского окна, к которому привязан бот? Т.е. это уже в любом случае не определение параметров экрана, а сравнение с заданными в функции параметрами. Хорошо, вбиваю
CODE:
getdisplay(8, 1920, 1080);
Цифры брал так: правой кнопкой мыши жмакаю по рабочему столу, параметры экрана, дополнительные параметры, вижу там данные: разрядность 8-bit(но даже если ставить другие, результат не меняется), разрешение и активное разрешение 1920х1080. Делаю проверку:
CODE:
int dspl=getdisplay(8, 1920, 1080);
string splstr=format(dspl);
messagebox(splstr);

В случае совпадения должно выйти сообщение с единичкой, однако выходит это:
 Цитата:

---------------------------
Kibor
---------------------------
-842150451
---------------------------
ОК
---------------------------


То же число, кстати, выдаёт и при выводе xbase и ybase

1. Мне не понятно как работать с этой функцией, нет элементарного 2-3 строчного примера, 100% срабатывающего, чтобы воткнуть себе и поиграть/понять как оно устроено.

2. В моей проблеме с нахождением картинки эта функция играет какую то роль, файндимайдж сильно завязана на гетдисплей? Либо же она сугубо проверочная и на данном этапе в моём случае она(getdisplay) не нужна?

По поводу запятой полностью согласен, балбес невнимательный.
8. Kibor - 25 Мая, 2018 - 00:57:48 - перейти к сообщению
 Цитата:
В первый записывается глубина цвета.
Во второй разрешение экрана по горизонтали.
В третий разрешение экрана по вертикали.

Как в числа можно записать?
Туда надо вводить переменные, в которые эта функция запишет параметры нашего экрана.

int color, x, y;
getdisplay(color, x, y);

в x будет ширина, в y высота разрешения.
Их потом использовать в программе, а не вводить числа которые мы узнали в параметрах нашего экрана.
Zireael уже дал код этой функции с пояснениями.
9. Junior - 25 Мая, 2018 - 02:14:30 - перейти к сообщению
Мы друг друга по-моему совершенно не понимаем.
Мне не принципиален вывод переменных месседжбоксом переменных с разрешением на экран, это просто для проверки какие данные я получаю. Меня интересует 2 вещи.
1. Почему int dspl=getdisplay(8, 1920, 1080)(если вам будет проще понять то int color=8, int x=1920, int y=1080; int dspl=getdisplay(color, x, y) ) переменная dspl вместо "0" и "1"(как написано в хелпе) возвращает -842150451.

2. На сколько нужна getdisplay(); и нужна ли она вообще при использовании findimage();

Есть возможность пообщаться ? Скайп или дискорд в личку если можно.
10. Kibor - 25 Мая, 2018 - 02:45:03 - перейти к сообщению
 Junior пишет:
Мы друг друга по-моему совершенно не понимаем.

Это вы не понимаете открытых указаний на ошибку.
 Junior пишет:
возвращает -842150451.

Потому что у вас в getdisplay ошибка, о чем неоднократно уже говорилось тут.
Исправьте ее и будет как надо.

 Junior пишет:
На сколько нужна getdisplay(); и нужна ли она вообще при использовании findimage();

Справку читали по getdisplay и findimage?
В findimage надо указывать зону поиска. Если она весь экран, то getdisplay позволяет узнать разрешение экрана данного компьютера. И будет работать на любом разрешение без переделки самого скрипта.

Powered by ExBB FM 1.0 Final