Love2d:Tips - hiz1/lua GitHub Wiki

Love2dプロジェクトのexe化

https://love2d.org/wiki/Game_Distribution_(日本語)

  • love2dプロジェクトを、フォルダ内のファイルをすべてZipに圧縮(プロジェクトフォルダは含めない)
  • Zipファイルの拡張子をloveに変更。
  • 以下のコードでexe化。copy /b "C:\Program Files (x86)\love-0.10.2-win32\love.exe"+[project].love [project].exe

exe化する場合の注意

dofileでLuaファイルを読み込む場合、exeと同じフォルダに読み込むLuaファイルを置く必要がある。
requireでLuaファイルを読み込む場合は不要。

ファイルを読み込む場合、love.filesystem.readを使用すること。
他のメソッドで読み込むとexe実行した際にエラーが発生する。

フルスクリーン対応

以下のコードをlove.loadに追加。

love.window.setFullscreen( true, 'exclusive' )

終了はAlt+F4。ESCキーで終了できるようにするには以下のコードを追加。

function love.keypressed(key, scancode, isrepeat) 
  if key == 'escape' then
    love.event.quit( )
  end
end

フルスクリーンをF4キーで切り替えるには以下のコードをlove.keypressedに追加。
※ love.loadで変数fullScreenを初期化すること。

if key == 'f4' then
  fullScreen = not fullScreen
  love.window.setFullscreen( fullScreen, 'exclusive' )
end

リソース自動読み込み

Gist

スプライト

--[[
  Sprite管理
  ※ ファイル名末尾の_YxXから、パターン数を取得する。
]]
Sprite = {
  img = nil,
  ptn = nil,
  quads = nil,
  new = function(path)
    local obj = {}
    setmetatable(obj, {__index = Sprite})
    -- 画像読み込み
    obj.img = love.graphics.newImage(path)
    local matchGrp = {0,0,0}
    local i = 1
    local yn, xn = string.match(path, "_(%d+)x(%d+)")
    local name = matchGrp[1]
    -- パターン数取得
    obj.ptn = {tonumber(yn), tonumber(xn)}
    local w = obj.img:getWidth() / xn
    local h = obj.img:getHeight() / yn
    -- パターンごとのQuad作成
    obj.quads = {}
    for y = 1, yn do
      table.insert(obj.quads, {})
      for x = 1, xn do
        table.insert(
          obj.quads[y], 
          love.graphics.newQuad(
            (x-1)*w, (y-1)*h, 
            w, h, 
            obj.img:getWidth(), obj.img:getHeight())
          )
      end
    end
    return obj
  end,
  draw = function(self, yptn, xptn, x, y, sx, sy, ox, oy, kx, ky)
    assert(1 <= xptn and xptn <= self.ptn[2]) 
    assert(1 <= yptn and yptn <= self.ptn[1]) 
    love.graphics.draw(self.img, self.quads[yptn][xptn], x, y, sx, sy, ox, oy, kx, ky)
  end
  }

Animation管理

Gist

デバッグモード

deug.debug()でデバッグモードに入る。使い方は要調査。