Ошибка чудная.
readtext то ищет то не ищет, и зависит его успех от других верно-написанных строчек кода.
Так, например, используя эту функцию, если закомментировать вывод rectangle, то вторая функция readtext заработает нормально, а первая все еще будет глючить находя всего 1 символ в довольно сложной области.
Я не знаю с чего начинать описывать проблему! readtext то работает - то не работает, но прямой зависимости нет! Могу только сказать что есть зависимость от других строчек кода - но код большой, и отследить проблему сложно. Сейчас пробую вынести все самое важное для работы readtext в отдельный лист, что бы попробовать отследить проблему. Может кто-то сталкивался с подобным? readtext находит один символ величиной с область поиска и все, что-то меняю в кожде независимое от readtext - вдруг начинает работать верно. ::blink.gif::
////////////////////////////DISPLAY///////////////////////////
// // // // // // // // // // // // // // // // ПЕРЕМЕННЫЕ
// // // // // // // // // // // // // // // //
// // // // // // // // // // // // // // // ////////////////////////////////////////////////////////
//битность и разрешение экрана X/Y
int col_display, x_display, y_display;
//Область экрана
int s_disp_standart=1219; double s_d, d_disp; //коэфциент отклонениния от заданного разрешения
//Область игры
int S_X0=0, S_Y0=0,
S_X1=1920, S_Y1=1080;
//определение области игры
int AoP_X0[998], AoP_Y0[998], AoP_X1[998], AoP_Y1[998], LAoP_X0=0, LAoP_Y0=0, LAoP_X1=0, LAoP_Y1=0;
int LS_X0, LS_Y0, LS_X1, LS_Y1;
int Smbl_X0[1024], Smbl_Y0[1024], Smbl_w1[1024], Smbl_h1[1024];
function AreaOfPlay2()
{
int i_AoP, AoP_sum;
if (er2>1) log(ind+".AreaOfPlay2 ..strt");
getdisplay(col_display, x_display, y_display);
log("resolution Display x/y= "+ format(x_display) +"/" + format(y_display));
if (er4>1) rectangle(999, 1, 1, x_display-2, y_display-2, 0, 2, 772211, -1, 0, 0);
log("wait.. ");
AoP_sum=FHC_LocalObjects(80, 1, 777888, 5567888, 2, 2, x_display-1, y_display-1, #AoP_X0[0], #AoP_Y0[0], #LAoP_X0, #LAoP_Y0, #LAoP_X1, #LAoP_Y1);
log("topframe_sum= "+ format(AoP_sum) );
// sleep(5555);
if (AoP_sum>0){
//loadsymbolbase (pathfolder()+"aop_frm_ext.sib");
S_X0=AoP_X0[AoP_sum-1]-AoP_X0[AoP_sum-1]/6;
S_Y0=AoP_Y0[0]-100; if (S_Y0<10) S_Y0=10;
S_X1=AoP_X0[AoP_sum-1]+AoP_X0[AoP_sum-1]/6; if (S_X1>x_display-1) S_X1=x_display-1;
S_Y1=AoP_Y0[0]+35;
int FS_sum =FS_LocalSymbols(1, 777888, 5567888, S_X0, S_Y0, S_X1, S_Y1, #Smbl_X0[0], #Smbl_Y0[0], #Smbl_w1[0], #Smbl_h1[0], #LS_X0, #LS_Y0, #LS_X1, #LS_Y1); //#AoP_smbl_width[0], #AoP_smbl_height[0], #correct[0]..
int FSc_Xmax=0;
for (i_AoP=0; i_AoP<FS_sum; i_AoP++){
if (symbolcorrect(i_AoP)>=0.37){
if (Smbl_X0[i_AoP]>FSc_Xmax) FSc_Xmax=i_AoP;
} //if
}
int smbl_ext_X0=Smbl_X0[FSc_Xmax], smbl_ext_Y0=Smbl_Y0[FSc_Xmax]-Smbl_h1[FSc_Xmax];
S_X0=AoP_X0[AoP_sum-1];
S_Y0=AoP_Y0[0]-100; if (S_Y0<10) S_Y0=10;
S_X1=AoP_X0[AoP_sum-1]+AoP_X0[AoP_sum-1]/6; if (S_X1>x_display-1) S_X1=x_display-1;
S_Y1=AoP_Y0[0]+35;
FS_sum =FS_LocalSymbols(1, 777888, 5567888, S_X0, S_Y0, S_X1, S_Y1, #Smbl_X0[0], #Smbl_Y0[0], #Smbl_w1[0], #Smbl_h1[0], #LS_X0, #LS_Y0, #LS_X1, #LS_Y1); //#AoP_smbl_width[0], #AoP_smbl_height[0], #correct[0]..
FSc_Xmax=0;
for (i_AoP=0; i_AoP<FS_sum; i_AoP++){
if (symbolcorrect(i_AoP)>=0.37){ //ïðîâåðêà êîððåêòíîñòè
if (Smbl_X0[i_AoP]>FSc_Xmax) FSc_Xmax=i_AoP;
} //if
}
int smbl_frm_X0=Smbl_X0[FSc_Xmax], smbl_frm_Y0=Smbl_Y0[FSc_Xmax]-Smbl_h1[FSc_Xmax];
}
}
function FS_LocalSymbols(int _i_SL, int _col_Sfrm1, int _Lcol_Sfrm1, int _FSL_X0, int _FSL_Y0, int _FSL_X1, int _FSL_Y1, int#_Smbl_X0, int#_Smbl_Y0, int#_Smbl_w1, int#_Smbl_h1, int#_LS_X0, int#_LS_Y0, int#_LS_X1, int#_LS_Y1)
{
int i_1SL, i_2SL, SL_time0, SL_time9;
//symbol_sum=readtext (RU| MARK, #Textt, 12, 1, -1, -1, -1, -1, -1, 0, -1, _FSL_X0, _FSL_Y0, _FSL_X1, _FSL_Y1, -1);
//messagebox (Textt);
//SL_time9=gettime(); //подсчет
//if ( er9>0) {log(ind+".find_LocalSymbols ..strt");}
//if ( er9>1) { rectangle(998, _FSL_X0, _FSL_Y0, _FSL_X1, _FSL_Y1, 0, 1, col_preli, -1, 0, 0);}
//for (i_1SL=0; i_1SL<_i_SL; i_1SL++){ //циклы, до удачного поиска
SL_time0=gettime(); //отсчет
symbol_sum=readtext (RU| MARK, #Textt, 12, 1, -1, -1, -1, -1, -1, 0, -1, _FSL_X0, _FSL_Y0, _FSL_X1, _FSL_Y1, -1);
SL_time9=gettime(); //подсчет
if ( er9>1) log("symbol_SUM= "+format(symbol_sum) +" || "+format(SL_time9-SL_time0) +"ms" );
log("Textt= " +Textt);
if (symbol_sum>997 && symbol_sum<0) symbol_sum=997;
for (i_2SL=0; i_2SL<symbol_sum; i_2SL++){
if (symbolcorrect(i_2SL)>=0.37){ //проверка корректности
correct_symbol[i_2SL]=symbolcorrect(i_2SL);
_Smbl_X0[i_2SL]=symbolxpos(i_2SL);
_Smbl_Y0[i_2SL]=symbolypos(i_2SL); //(i_2SL) - Возвращает позицию символа по X от начала зоны поиска. Левый- нижний угол
_Smbl_w1[i_2SL]=symbolwidth(i_2SL); // - Возвращает ширину символа
_Smbl_h1[i_2SL]=symbolheight(i_2SL); // - Возвращает высоту символа
if (er9>2){
log("symbol correct"+format(i_2SL) +"= "+format(correct_symbol[i_2SL]) );
log("symbol X0_"+format(i_2SL) +"= "+format(_Smbl_X0[i_2SL]) );
log("symbol Y0_"+format(i_2SL) +"= "+format(_Smbl_Y0[i_2SL]) );
log("symbol w1_"+format(i_2SL) +"= "+format(_Smbl_w1[i_2SL]) );
log("symbol h1_"+format(i_2SL) +"= "+format(_Smbl_h1[i_2SL]) );
rectangle(997-i_2SL, _FSL_X0 +_Smbl_X0[i_2SL], _FSL_Y0 +_Smbl_Y0[i_2SL]-_Smbl_h1[i_2SL], _FSL_X0+_Smbl_X0[i_2SL]+_Smbl_w1[i_2SL], _FSL_Y0+_Smbl_Y0[i_2SL], 0, 1, _col_Sfrm1, -1, 0, 0);
}
} //if
}
messagebox (Textt);//тест
//}//end.. for i_1SL
//m_ext_gw: ;
if (er9>1) {sleep(222*er9_slp); disable_item("rectangle", 998);} // выкл обл объктов
if (er9>2 && FHC_sum>0){
for (i_2SL=0; i_2SL<FHC_sum; i_2SL++) { // выкл найд объектов
disable_item("rectangle", 997-i_2SL);
} }
if (er9>0) log(ind+"!end");
return(FHC_sum);
}
(Добавление)
Может кто-то поможет с целым исходником за профит?
(Добавление)
короче закоментировал rectangle, вызываемый из draw.dll от Zirael, и сделал повторный запуск 1 поиска. Теперь readtext первый раз отрабатывает в холостую, неправильно, а второй и третий, ищет что нужно...
1. Kutuz_off - 21 Октября, 2020 - 02:23:09 - перейти к сообщению
2. Kutuz_off - 21 Октября, 2020 - 08:44:37 - перейти к сообщению
Разобрался.
Если используется draw.dll, нужно следить что бы невидимое окно для отрисовок не перекрывало работу функции readtext.
Если используется draw.dll, нужно следить что бы невидимое окно для отрисовок не перекрывало работу функции readtext.