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

Страниц (2): [1] 2 »
 

1. Adomb - 01 Августа, 2015 - 07:15:11 - перейти к сообщению
Здравствуйте.
Вот код.
код (Отобразить)

Не получается нормально управлять, таймеры не включаются, кроме первых шести. Что я делаю не так?
(Добавление)
Так же, если присвоить, допустим flag_check0[14]=1, чтоб включена галка была по умолчанию, при запуске скрипта это состояние присваивается ей через раз, то есть то пустая, то включённая загружается в диалог.
2. Kibor - 01 Августа, 2015 - 08:21:36 - перейти к сообщению
 Adomb пишет:
Не получается нормально управлять, таймеры не включаются, кроме первых шести. Что я делаю не так?

Дело в том, что в таймере 98 каждые 2000 мсек вызываются enabletimer для таймеров которым галки стоят.. а при вызове enabletimer обнуляется время отсчета таймера.
получаем...
таймер 9 имеет задержку 2800.. при включение галки таймера его время обнулили и должно пройти 2800 пока он не сработает. а оно не может пройти потому что через 2000 (98 тайм) опять вызовет enabletimer(9) и время обнулит..
enabletimer надо вызывать один раз для включения, так как при втором вызове она обнулит время..

Сделать эт можно так в таком как тут случае..

В начало кода перед createdialog
CODE:

int flag[16];
for (int n=1; n<16; n++) flag[n]=flag_check0[n-1];

В таймер 98.. пример одной строки..

CODE:
if (flag_check0[8]==1)
{
if (flag[9]==0)enabletimer(9);
flag[9]=1;
}
else {disabletimer(9); flag[9]=0;}


 Adomb пишет:
если присвоить, допустим flag_check0[14]=1, чтоб включена галка была по умолчанию, при запуске скрипта это состояние присваивается ей через раз

Есть такое.. Это в самом Кибор запомнились значения прошлого запуска и переключает.. надо исправить.
Если сейчас просто собрать в EXE и запускать один раз как EXE то будет нормально..
(Добавление)
В таймер 98 лучше так поставить код..

CODE:
CREATE_TIMER(98, 2000) //óïðàâëåíèå
{
/*
if (flag_check0[0]>0)enabletimer(1); else disabletimer(1);
if (flag_check0[1]>0)enabletimer(2); else disabletimer(2);
if (flag_check0[2]>0)enabletimer(3); else disabletimer(3);
if (flag_check0[3]>0)enabletimer(4); else disabletimer(4);
if (flag_check0[4]>0)enabletimer(5); else disabletimer(5);
if (flag_check0[5]>0)enabletimer(6); else disabletimer(6);
if (flag_check0[6]>0)enabletimer(7); else disabletimer(7);
if (flag_check0[7]>0)enabletimer(8); else disabletimer(8);
if (flag_check0[8]>0)enabletimer(9); else disabletimer(9);
if (flag_check0[9]>0)enabletimer(10); else disabletimer(10);
if (flag_check0[10]>0)enabletimer(11); else disabletimer(11);
if (flag_check0[11]>0)enabletimer(12); else disabletimer(12);
if (flag_check0[12]>0)enabletimer(14); else disabletimer(14);
if (flag_check0[13]>0)enabletimer(13); else disabletimer(13);
if (flag_check0[14]>0)enabletimer(15); else disabletimer(15);
*/
for (int g=0; g<14; g++)
{
if (flag_check0[g]==1)
{
if (flag[g+1]==0)enabletimer(g+1);
flag[g+1]=1;
}
else {disabletimer(g+1); flag[g+1]=0;}
}
}
3. Adomb - 01 Августа, 2015 - 10:51:42 - перейти к сообщению
Kibor, циклом for мы каждой переменной flag присваиваем состояние flag_check0`ов на момент запуска, 0 или1. А затем уже, при обработке таймером управления состояния галочек в диалоге, используем flag`и, чтобы программа понимала "трогать" нужный таймер или нет.
А так не правильно цикл будет написать?
CODE:
int flag[14];
for (int n=0; n<15; n++) flag[n]=flag_check0[n];

flag`ов 15 штук получается, по количеству flag_check0` ов.
И ещё вопрос.
Без этого цикла, по идее же строки
CODE:
if (flag_check0[8]==1)
{
if (flag[9]==0)enabletimer(9);
flag[9]=1;
}
else {disabletimer(9); flag[9]=0;}

тоже в итоге будут работать? Присвоится flag`ам единица , а на второй-третий проход подхватит управление, так сказать. Верно?
(Добавление)
 Adomb пишет:
А так не правильно цикл будет написать?
CODE:
int flag[15];
for (int n=0; n<15; n++) flag[n]=flag_check0[n];

поправил int flag[14]; на int flag[15]; Улыбка
4. Kibor - 01 Августа, 2015 - 11:37:57 - перейти к сообщению
этих пирюэтов не было бы с смещением индекса, если бы таймеры нумеровались с 0, а не с 1.
правильно задавать таймеры и все все все что есть с 0. тогда все совпадать будет и не будет такого. в этом случае я просто подстроил код под этот скрипт..
(Добавление)
 Adomb пишет:
Без этого цикла, по идее же строки
CODE:
if (flag_check0[8]==1)
{
if (flag[9]==0)enabletimer(9);
flag[9]=1;
}
else {disabletimer(9); flag[9]=0;}

тоже в итоге будут работать?


не будет. по умолчанию переменные не 0 а мусор
5. Adomb - 01 Августа, 2015 - 11:48:59 - перейти к сообщению
Ясно
Тогда с комбо, к примеру, так будет правильно?
CODE:
int n=10 //количество комбо в диалоге
int flag[n-1];


if (flag_combo0[0]==0)
{
if (flag[0]!=0){disabletimer(1);disabletimer(2);}
flag[0]=0;
}

if (flag_combo0[0]==1)
{
if (flag[0]!=1){enabletimer(1);disabletimer(2);}
flag[0]=1;
}

if (flag_combo0[0]==2)
{
if (flag[0]!=2){enabletimer(2);disabletimer(1);}
flag[0]=2;
}

...

(Добавление)
 Kibor пишет:
по умолчанию переменные не 0 а мусор


Но при проходе
CODE:
if (flag_check0[8]==1)
{
if (flag[9]==0)enabletimer(9);
flag[9]=1;
}

всё равно инициализируются ведь, а при следущих проходах - подхватятся, разве не так?
(Добавление)
если таймер считывает с диалога состояния чекбоксов каждые 2 секунды к примеру, то ведь не критично
6. Kibor - 01 Августа, 2015 - 11:53:58 - перейти к сообщению
 Adomb пишет:
всё равно инициализируются ведь, а при следущих проходах - подхватятся, разве не так?

if (flag[9]==0)enabletimer(9);
flag[9]=1;
возможно, но все равно не правильно. а если второго подхода не будет? может это не таймер будет а функция? или таймер отключат.
надо инициализировать.
7. Adomb - 01 Августа, 2015 - 11:56:26 - перейти к сообщению
 Kibor пишет:
возможно, но все равно не правильно. а если второго подхода не будет? может это не таймер будет а функция? или таймер отключат.
надо инициализировать.

Ну это я понимаю ))
Как тогда быть с комбо, потому, что я выше написал про комбо, получается не красиво. )
8. Kibor - 01 Августа, 2015 - 11:57:10 - перейти к сообщению
 Adomb пишет:
int flag[n-1];

уже не правильно. ошибка. только числа.

и будет правильно или нет будет видно после полного кода. с контролами
9. Adomb - 01 Августа, 2015 - 12:01:01 - перейти к сообщению
 Kibor пишет:
уже не правильно. ошибка. только числа.

хорошо, понял.
 Kibor пишет:
и будет правильно или нет будет видно после полного кода. с контролами

ну при условии, что таймер считывания состояния диалога не отключается пока работает скрипт и считывает каждые 2 секунды, то с комбо можно так устроить логику.
10. Kibor - 01 Августа, 2015 - 12:02:54 - перейти к сообщению
 Adomb пишет:
Так же, если присвоить, допустим flag_check0[14]=1, чтоб включена галка была по умолчанию, при запуске скрипта это состояние присваивается ей через раз, то есть то пустая, то включённая загружается в диалог.


пока это можно решить присваивая флаги после создания диалога
CODE:
pause(100);
flag_check0[0]=1; flag_check0[1]=0; flag_check0[2]=0; flag_check0[3]=0; flag_check0[4]=0; flag_check0[5]=0; flag_check0[6]=0;
flag_check0[7]=0; flag_check0[8]=0; flag_check0[9]=0; flag_check0[10]=0; flag_check0[11]=0; flag_check0[12]=0; flag_check0[13]=0; flag_check0[14]=0;

Powered by ExBB FM 1.0 Final