カメラの位置の設定

カメラの位置を設定するときにはsetPosition関数を使用します。

local gamera = require 'gamera'

function love.load()
  cx, cy = 0, 0

  camera = gamera.new(0, 0, 1200, 800)
  camera:setPosition(cx, cy)

  cvs = createTestBackground()
end

function love.draw()
  camera:draw(function(l, t, w, h)
    love.graphics.draw(cvs, 0, 0)
  end)
end

function love.keypressed(key, scancode, isrepeat)
  if key == "left" then
    cx = cx - 120
  elseif key == "right" then
    cx = cx + 120
  elseif key == "up" then
    cy = cy - 80
  elseif key == "down" then
    cy = cy + 80
  end

  camera:setPosition(cx, cy)
end

-- ===========================================
-- テスト用背景の作成
-- ===========================================
function createTestBackground()
  cvs = love.graphics.newCanvas(1200, 800)

  love.graphics.setCanvas(cvs)
  local lenW = cvs:getWidth() / 40 - 1
  local lenH = cvs:getHeight() / 40 - 1

  for i = 0, lenH do
    for j = 0, lenW do
      if i == 0 or i == lenH or j == 0 or j == lenW then
        love.graphics.setColor(0.0, 0.0, 0.0)
      elseif i == 1 then
        love.graphics.setColor(0.3, 0.3, 0.3)
      else
        love.graphics.setColor(0.7, 0.5, 0.35)
      end

      local x, y = j * 40, i * 40
      love.graphics.rectangle("fill", x, y, 40, 40)
    end
  end
  love.graphics.setCanvas()
  love.graphics.setColor(1, 1, 1)

  return cvs
end
カメラの位置の設定

テスト用にRPGの部屋っぽい背景を描画させています。キーボードの上下左右を押すとカメラの位置を移動します。カメラの移動によって画面の表示を変更しているため、背景画像の描画位置は変更していません(14行目)。