Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Отдельная тема по сокращению кода.

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

41. 007wan - 06 Сентября, 2019 - 06:55:16 - перейти к сообщению
 Zireael пишет:
 Цитата:
while(WindowFromPoint(Mouse_x, Mouse_y) == Object_Checkbox[i] || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button1 || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button2)

Не нужно 3 раза вызывать функцию WindowFromPoint. Присвоить результат переменной и сравнивать.
 Цитата:
int handle=WindowFromPoint(Mouse_x, Mouse_y);
while(handle == Object_Checkbox[i] || handle == ...)

 Цитата:
while(WindowFromPoint(Mouse_x, Mouse_y) == Object_Checkbox[i] || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button1 || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button2)
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
break;
}

И зачем нужен while, если он постоянно прерывается через break без всяких условий?
 Цитата:
Load_Settings();

Можно добавить в таймер 0, только дописать условие через gettime чтобы срабатывало каждые 500 мсек.
Так как лучше, я без понятия. Капец, удмал сегодня вспомню что имелось ввиду, а так и храню теперь и не пойму. Пишем ошибка.
42. 007wan - 13 Сентября, 2019 - 07:37:37 - перейти к сообщению
 Zireael пишет:

Не нужно 3 раза вызывать функцию WindowFromPoint. Присвоить результат переменной и сравнивать.
Не совсем понял ну при свою я и что, а Куда другой for девать?
CODE:
CREATE_TIMER(3, 10)
{
getmouse(Mouse_x, Mouse_y);

for (int i=0; i<sizearray(Object_Checkbox); i++)
{
while(WindowFromPoint(Mouse_x, Mouse_y) == Object_Checkbox[i] || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button1 || WindowFromPoint(Mouse_x, Mouse_y) == Object_Button2)
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
break;
}
}
}

(Добавление)
 007wan пишет:
И зачем нужен while, если он постоянно прерывается через break без всяких условий?
Без Break у меня раньше сильно лагало, что жуть какая, а сейчас он выходит из цикла на передышку и даже быстрее скрипт стал работать из-за такой мелочи.
(Добавление)
Не работает.
CODE:
for (int i=0; i<sizearray(Object_Checkbox); i++)
{
int Handle_Controls = WindowFromPoint(Mouse_x, Mouse_y);
while(Handle_Controls == Object_Checkbox[i])
{
SetCursor(Object_Cursor1);
sleep(10);
getmouse(Mouse_x, Mouse_y);
}
}

Какой смысл получать хэндл, если он может не найти нужный наведенный контрол и ему придется снова цикл делать?
(Добавление)
Так лучше и правильнее?
Код (Отобразить)

(Добавление)
Точнее.
ДО (Отобразить)
ПОСЛЕ (Отобразить)
43. Zireael - 13 Сентября, 2019 - 17:44:57 - перейти к сообщению
 Цитата:
Так лучше и правильнее?

Неправильно. Подумайте над этим:
CODE:
int a=0;
while(a<100)
{
a++;
}
messagebox(a);

CODE:
int a=0;
while(a<100)
{
a++;
break; // сразу выход, тогда зачем нужен цикл?
}
messagebox(a);
44. 007wan - 14 Сентября, 2019 - 01:11:06 - перейти к сообщению
 Zireael пишет:
 Цитата:
Так лучше и правильнее?

Неправильно. Подумайте над этим:
CODE:
int a=0;
while(a<100)
{
a++;
}
messagebox(a);

CODE:
int a=0;
while(a<100)
{
a++;
break; // сразу выход, тогда зачем нужен цикл?
}
messagebox(a);
Не хочу писать, но ты не прав на счет break; Я же код запустил и вижу, что ты не прав.
Этот код (Отобразить)
Код выше. Без break курсор сменится на одном контроле и больше не сможет возвратится в исходное состояние, а break прерывает цикл и он возвращает обычный курсор, когда не наведен на контрол. Другими словами: без break(Навели на контрол - поменялась рука, убрали наведение с контрола - рука не меняется на стандартную, а с break когда убрали мышь с контрола - то всё норм, рука вернулась обычная
(Добавление)
Может я чего-то не понимаю, не так создал код, так как правильнее? for и while не мешаются.
(Добавление)
Ты понимаешь, что суть SetCursor(Object_Cursor1); менять курсор, а при перемещении мыши - возвращать стандартный(стрелку). А while и for удерживают его, когда наведешь на кнопку или наведешь и переместишь мышь в зоне кнопки, а потом если не в зоне кнопки, то АВТОМАТИЧЕСКИ возвращает стрелку курсора, до тех пор пока не дана команда SetCursor(Object_Cursor1);, а если она дана, то меняет курсор и тд
(Добавление)
Если есть лучше код, то я слушаю. Потому что я знаю как это работает и считаю, что break тут нужен, есть лучше идея? Давай проверим...
45. Zireael - 14 Сентября, 2019 - 02:47:09 - перейти к сообщению
Заменить while на if, убрать getmouse, тот что в цикле.
46. 007wan - 14 Сентября, 2019 - 02:51:44 - перейти к сообщению
 Zireael пишет:
Заменить while на if, убрать getmouse, тот что в цикле.

ПОСЛЕ2 (Отобразить)
А реально теперь break; не нужен. Но не могу пока точно сказать как это скажется, когда запустится другой таймер и бот в целом, когда будет искать изображения итд, до этого с while, break сильно лагало, а сейчас не знаю. Скоро проверю, когда сделаю сокращение кода и упрощения.
(Добавление)
Я кстати, убрал таймер с загрузкой настроек в реальном времени, лучше тогда придется остановить бот, запустить и он загрузит их снова 1 раз или же по таймеру, который будет запущен для поиска изображений
47. Zireael - 14 Сентября, 2019 - 03:02:44 - перейти к сообщению
 Цитата:
А реально теперь break; не нужен

Не нужен он был в while, а в if нужен.

Powered by ExBB FM 1.0 Final