Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
2.4. Как сделать, чтобы цикл выполнялся параллельно остальному коду, а не прерывал его?
В: Как сделать, чтобы цикл выполнялся параллельно остальному коду, а не прерывал его?
Дело в том, что в цикле много операций, и пока он не выполнится, игра висит. Можно ли сделать так, чтобы цикл выполнялся, но игра продолжалась?
О:
В этом случае нужно использовать локацию-счётчик. Если игра может продолжаться даже пока цикл не выполнен, то локация-счётчик позволит распределить вычисления цикла во времени. Однако, `это вовсе не означает, что код локации-счётчика выполняется параллельно коду остальной игры`. Плеер только лишь прерывает выполнение основного кода (с определённой периодичностью) и выполняет код на локации-счётчике, затем продолжает выполнение основного кода.
Для начала нужно создать локацию-счётчик:
- создаём локацию, название может быть любым, например "реалтайм".
- указываем плееру, какую локацию ему нужно использовать, как локацию-счётчик. Пишем, например на самой первой локации в игре:
По умолчанию обращение к локации-счётчику выполняется каждые пол секунды. Если нужно изменить период обращения, воспользуйтесь оператором `settimer`. В качестве аргумента этому оператору указывается период обращения к локации-счётчику в миллисекундах:
settimer 100
На локации счётчике пишем непосредственно код для циклических вычислений:
! необходимо переменной цикл_вкл присвоить единицу
if цикл_вкл=1:
! если цикл запущен
! увеличиваем частоту обращения к локации-счётчику
settimer 10
if i<1000:
! если значение счётчика не достигло предела
! выполняем требуемые операции
! здесь заполняем массив
data[i]=i
! увеличиваем счётчик
i=i+1
else
! если значение счётчика достигло предела
! останавливаем выполнение цикла
цикл_вкл=0
! уменьшаем частоту обращения к локации-счётчику
settimer 500
end
end
! все перечисленные переменные - глобальные