Таймер
Для асинхронных событий, привязанных к реальному времени, в INSTEAD есть возможность использовать таймер. На самом деле, вам следует хорошо подумать, стоит ли в приключенческой игре использовать таймер. Обычно, игроком это воспринимается не слишком благосклонно. С другой стороны, таймер вполне можно использовать для управления музыкой или в оформительских целях.
Для использования таймера, вам следует подключить модуль "timer".
require "timer"
Таймер программируется с помощью объекта 'timer'.
- timer:set(мс) -- задать интервал таймера в миллисекундах;
- timer:stop() -- остановить таймер.
При срабатывании таймера, вызывается обработчик game.timer. Если game.timer возвращает false, сцена не перерисовывается. В противном случае, возвращаемое значение выводится как реакция.
Вы можете делать локальные для комнаты обработчики 'timer'. Если в комнате объявлен обработчик 'timer', он вызывается вместо 'game.timer'. Если он возвращает false -- вызывается game.timer.
Например:
game.timer = function(s)
if time() > 10 then
return false
end
snd.play 'gfx/beep.ogg';
p ("Timer:", time())
end
function init()
timer:set(1000) -- раз в секунду
endroom {
enter = function(s)
timer:set(1000);
end;
timer = function(s)
timer:stop();
walk 'комната2';
end;
nam = 'Проверка таймера';
dsc = [[Ждите.]];
}Состояние таймера попадает в файл сохранения, таким образом, вам не нужно заботиться о его восстановлении.
Вы можете вернуть из таймера специальный статус:
return true, false
В этом режиме перерисуется только область инвентаря. Это можно использовать для статусов вроде часов.
Кроме того, в INSTEAD существует возможность отслеживать интервалы времени в миллисекундах. Для этого используйте функцию instead.ticks(). Функция возвращает число миллисекунд, прошедшее с момента старта игры.