Отрисовка в фон
Функция sprite.scr() возвращает спрайт - фон. Вы можете выполнять отрисовку в этот спрайт в любом обработчике, например, в таймере. Тем самым добиваясь изменения фона на лету, без применения модуля theme. Например:
--$Author: Andrew Lobanov
require 'sprite'
require 'theme'
require 'timer'
declare {
x = 0,
y = 0,
dx = 10,
dy = 10,
}
const {
w = theme.scr.w(),
h = theme.scr.h(),
}
instead.fading = false
local bg, red, green
function init()
theme.set('scr.col.bg', '#000000')
theme.set('win.col.fg', '#aaaaaa')
theme.set('win.col.link', '#ffaa00')
theme.set('win.col.alink', '#ffffff')
bg = sprite.new(w, h)
bg:fill('black')
red = sprite.new(w, h)
red:fill('#ff0000')
red = red:alpha(128)
green = sprite.new(w, h)
green:fill('#00ff00')
green = green:alpha(64)
bg:copy(sprite.scr())
timer:set(25)
end
function game:timer()
bg:copy(sprite.scr())
red:draw(sprite.scr(), x, 0, 128)
green:draw(sprite.scr(), 0, y, 64)
x = x + dx
if x >= w or x == 0 then
dx = -dx
end
y = y + dy
if y >= h or y == 0 then
dy = -dy
end
return false -- Важно!
end
room {
nam = 'main',
disp = 'Test. Test? Test!',
decor = 'Lorem ipsum';
}Внимание! Интерпретатор INSTEAD в режиме использования предмета на предмет переводит себя в режим "паузы". Это значит, что в тот момент когда выбран предмет из инвентаря (курсор изменил вид на шестерёнки) события таймера перестают обрабатываться до тех пор, пока игрок не применит предмет. Это сделано для того, чтобы не разрывать такт игры. Если для вашего творческого замысла такое поведение является помехой (например, вам не нравится тот факт, что анимация фона замирает), вы можете изменить его с помощью вызова:
instead.wait_use(false)
Как обычно, поместите вызов в init() или start() функцию.