-- Fake raster scroll -- init function love.load() -- set filter love.graphics.setDefaultFilter("nearest", "nearest") -- set canvas size scr_w, scr_h = 1280, 720 canvas = love.graphics.newCanvas(scr_w, scr_h) -- get window width and height wdw_w, wdw_h = love.graphics.getDimensions() scr_scale = math.min((wdw_w / scr_w), (wdw_h / scr_h)) scr_ofsx = (wdw_w - (scr_w * scr_scale)) / 2 scr_ofsy = (wdw_h - (scr_h * scr_scale)) / 2 -- load image img = love.graphics.newImage("bg1.png") img2 = love.graphics.newImage("bg2.png") -- make Quad (raster) imgs = {} bg_x_list = {} for i = 1, img:getHeight() do local x = 0 local y = i - 1 imgs[i] = love.graphics.newQuad(x, y, img:getWidth(), 1, img:getDimensions()) bg_x_list[i] = 0 end bg_x = 0 end -- update function love.update(dt) local w0 = 684 local w1 = 1195 local mx = love.mouse.getX() local d = mx - (scr_w / 2) bg_x = (bg_x + 2 * d * dt) % w0 -- set bg_x_list local x0 = -bg_x local x1 = -bg_x * w1 / w0 for i = 1, img:getHeight() do local y = i - 1 bg_x_list[i] = x0 + y * (x1 - x0) / (img:getHeight() - 1) end end -- draw function love.draw() -- set canvas love.graphics.setCanvas(canvas) -- fill BG color love.graphics.setColor(0, 0, 1.0) love.graphics.rectangle("fill", 0, 0, scr_w, scr_h) -- draw bg upper love.graphics.setColor(1.0, 1.0, 1.0) love.graphics.draw(img2, -bg_x, 0) -- draw raster local y = scr_h - img:getHeight() love.graphics.setColor(1.0, 1.0, 1.0) for i = 1, img:getHeight() do love.graphics.draw(img, imgs[i], bg_x_list[i], (y + i - 1)) end -- unset canvas love.graphics.setCanvas() -- draw canvas to window love.graphics.setColor(1.0, 1.0, 1.0) love.graphics.draw(canvas, scr_ofsx, scr_ofsy, 0, scr_scale, scr_scale) -- print FPS love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 10, 10) end function love.keypressed(key, isrepeat) -- ESC to exit if key == "escape" then love.event.quit() end end