Love2DのHTML5出力
環境はManjaroLinuxです。
Love(11.5)、nodeを使います。
Love2Dのゲームの準備
- 公式サイトからzipを持ってきて展開する。
- そのフォルダ内にmain.luaというファイルを作り
love.update
、love.draw
を書く。 - ターミナルを開き、そのフォルダで
love .
とするとゲームを実行できる。
lume.lua(高階関数やユーティリティ関数)、maid64(Canvasのサイズを固定にする為使う)、tween.lua(アニメーション。補間)、bump.lua(AABB当たり判定)などのライブラリを使う。
PROJECTNAME.love
ファイルを作る
ソースコードとアセットをzipファイルに固めて拡張子を.love
にする
このファイルを配るだけで、『各プラットフォームにlove2dをインストールしてもらえば』ゲームを動かせる
自分はソースコードからアセットのファイル名を集めるようにした。
zip -q -9 -u PROJECTNAME.love main.lua ...
HTML5出力する
npmでlove.jsをインストールしておく
下のコマンドでPROJECTNAMEフォルダが作られ、そこにいくつかのファイルができる。
npx love.js #{PROJECTNAME}.love html\_#{PROJECTNAME} -c -t \"#{PROJECTNAME..' -v '..VERSION}\"
- 適当なweb サーバーを起動
python -m http.server 8000
- ブラウザで
localhost:8000
を開く
さらに
cd #{PROJECTNAME} && node ../globalizeFS.js
すると、love.filesystemが使える。(=ゲームでsave loadができる)
出力されたフォルダごとgithubにアップロードするだけで、ゲームを公開することができる
各プラットフォームでの差異
Windows
- love.exeにcat でPROJECTNAME.loveをくっつけると実行ファイルができる!
dllをまとめることはできないようだ
Android
- quit イベントが来ない?
- 画面を消してもゲームは止まらない(バッテリー消費し続ける)?
HTML5
- jit ではない
- getOS は'Web'と設定される
- DLL/soファイルがloveファイル内にあっても良いが、呼び出さないように場合分けしておく
- 文字列でユニコードリテラルが認識されない
- 座標がずれる(maid64を改造して対応した)