Допустим, у меня таймер должен срабатывает каждые 5 минут (300 000 мс). Если я его останавливаю с помощью функции disabletimer (например если нашлась определенная картинка с помощью findimage), а потом снова запускаю через какое-либо время с помощью функции enabletimer , то время таймера начнет отсчет заново или с той миллисекунды, на которой таймер остановился?
И если отсчет начинается заново, как можно сделать, чтобы он начинался с той миллисекунды, на которой был выключен?
Можно например, записать время, на котором остановился таймер, а потом через sendtimer изменить старое время на новое?
Или можно проще?
1. Kostick - 06 Ноября, 2022 - 12:06:52 - перейти к сообщению
2. Zireael - 06 Ноября, 2022 - 13:55:12 - перейти к сообщению
Цитата:
снова запускаю через какое-либо время с помощью функции enabletimer , то время таймера начнет отсчет заново или с той миллисекунды, на которой таймер остановился?
Заново.
Для примера. Каждые 5 секунд переменная x увеличивается на 1, при нажатии клавиши z таймер останавливается, при повторном нажатии z продолжает работу, с того момента когда был остановлен.
CODE:
int Cooldown = 5000; // время срабатывания таймера
int Timer = gettime() + Cooldown;
int TimerLast = 0;
int TimerLastFlag = 0;
int TimerStop = 0;
int x = 0;
enabletimer(0);
loop()
{
if(getkeystate(90)) // если нажата клавиша Z
{
while(getkeystate(90))sleep(10); // ждать пока нажата клавиша Z
if(TimerStop==0)TimerStop = 1; // таймер не остановлен
else TimerStop = 0;
}
textout(0, 200, 60, "x = " + format(x), 1);
sleep(100);
}
CREATE_TIMER(0, 30)
{
if(TimerStop != 0) // если таймер остановлен
{
if(TimerLastFlag == 0) // если время остановки таймера ещё не записано
{
TimerLastFlag = 1;
TimerLast = Timer - gettime(); // записать время остановки таймера
}
return;
}
else // таймер работает
{
if(TimerLastFlag == 1) // если время остановки было записано
{
TimerLastFlag = 0; // время не записано
Timer = gettime() + TimerLast; // установить время срабатывания таймера
}
}
textout(1, 200, 80, format(Timer - gettime()), 1);
if(Timer < gettime()) // пришло время для срабатывания таймера
{
Timer = gettime() + Cooldown; // установить новое время
// нужные действия каждые 5 секунд
x++;
}
}
int Timer = gettime() + Cooldown;
int TimerLast = 0;
int TimerLastFlag = 0;
int TimerStop = 0;
int x = 0;
enabletimer(0);
loop()
{
if(getkeystate(90)) // если нажата клавиша Z
{
while(getkeystate(90))sleep(10); // ждать пока нажата клавиша Z
if(TimerStop==0)TimerStop = 1; // таймер не остановлен
else TimerStop = 0;
}
textout(0, 200, 60, "x = " + format(x), 1);
sleep(100);
}
CREATE_TIMER(0, 30)
{
if(TimerStop != 0) // если таймер остановлен
{
if(TimerLastFlag == 0) // если время остановки таймера ещё не записано
{
TimerLastFlag = 1;
TimerLast = Timer - gettime(); // записать время остановки таймера
}
return;
}
else // таймер работает
{
if(TimerLastFlag == 1) // если время остановки было записано
{
TimerLastFlag = 0; // время не записано
Timer = gettime() + TimerLast; // установить время срабатывания таймера
}
}
textout(1, 200, 80, format(Timer - gettime()), 1);
if(Timer < gettime()) // пришло время для срабатывания таймера
{
Timer = gettime() + Cooldown; // установить новое время
// нужные действия каждые 5 секунд
x++;
}
}
3. Kostick - 07 Ноября, 2022 - 04:04:54 - перейти к сообщению
Zireael пишет:
Цитата:
снова запускаю через какое-либо время с помощью функции enabletimer , то время таймера начнет отсчет заново или с той миллисекунды, на которой таймер остановился?
Заново.
Для примера. Каждые 5 секунд переменная x увеличивается на 1, при нажатии клавиши z таймер останавливается, при повторном нажатии z продолжает работу, с того момента когда был остановлен.
CODE:
int Cooldown = 5000; // время срабатывания таймера
int Timer = gettime() + Cooldown;
int TimerLast = 0;
int TimerLastFlag = 0;
int TimerStop = 0;
int x = 0;
enabletimer(0);
loop()
{
if(getkeystate(90)) // если нажата клавиша Z
{
while(getkeystate(90))sleep(10); // ждать пока нажата клавиша Z
if(TimerStop==0)TimerStop = 1; // таймер не остановлен
else TimerStop = 0;
}
textout(0, 200, 60, "x = " + format(x), 1);
sleep(100);
}
CREATE_TIMER(0, 30)
{
if(TimerStop != 0) // если таймер остановлен
{
if(TimerLastFlag == 0) // если время остановки таймера ещё не записано
{
TimerLastFlag = 1;
TimerLast = Timer - gettime(); // записать время остановки таймера
}
return;
}
else // таймер работает
{
if(TimerLastFlag == 1) // если время остановки было записано
{
TimerLastFlag = 0; // время не записано
Timer = gettime() + TimerLast; // установить время срабатывания таймера
}
}
textout(1, 200, 80, format(Timer - gettime()), 1);
if(Timer < gettime()) // пришло время для срабатывания таймера
{
Timer = gettime() + Cooldown; // установить новое время
// нужные действия каждые 5 секунд
x++;
}
}
int Timer = gettime() + Cooldown;
int TimerLast = 0;
int TimerLastFlag = 0;
int TimerStop = 0;
int x = 0;
enabletimer(0);
loop()
{
if(getkeystate(90)) // если нажата клавиша Z
{
while(getkeystate(90))sleep(10); // ждать пока нажата клавиша Z
if(TimerStop==0)TimerStop = 1; // таймер не остановлен
else TimerStop = 0;
}
textout(0, 200, 60, "x = " + format(x), 1);
sleep(100);
}
CREATE_TIMER(0, 30)
{
if(TimerStop != 0) // если таймер остановлен
{
if(TimerLastFlag == 0) // если время остановки таймера ещё не записано
{
TimerLastFlag = 1;
TimerLast = Timer - gettime(); // записать время остановки таймера
}
return;
}
else // таймер работает
{
if(TimerLastFlag == 1) // если время остановки было записано
{
TimerLastFlag = 0; // время не записано
Timer = gettime() + TimerLast; // установить время срабатывания таймера
}
}
textout(1, 200, 80, format(Timer - gettime()), 1);
if(Timer < gettime()) // пришло время для срабатывания таймера
{
Timer = gettime() + Cooldown; // установить новое время
// нужные действия каждые 5 секунд
x++;
}
}
Ого, красиво. Благодарю.