2018/05/03(木) [n年前の日記]
#1 [love2d][raspberrypi] Raspbian Stretch上でlove2dを動かせないか試行錯誤
Raspberry Pi Zero W + Raspbian jessie 上なら、SDL2 と love2d 11.1 をビルドすることで love2d が動かせることを確認できたのだけど。
Raspberry Pi Zero W + Raspbian stretch 上では、同じ手順でビルドしても、love2d で音を鳴らそうとした瞬間に変なエラーを出して落ちてしまうのでアレだったわけで。
Raspberry Pi Zero W + Raspbian stretch 上では、同じ手順でビルドしても、love2d で音を鳴らそうとした瞬間に変なエラーを出して落ちてしまうのでアレだったわけで。
◎ 試行錯誤その1。 :
以下のページで、Raspbian Stretch Lite 上で SDL2 と love2d をビルドして動かしてる事例が紹介されていたので、試してみたり。
_LOVE on Raspbian Stretch lite (without X)
ダメだった。やはり妙なエラーを出して落ちてしまう。
上記は、Raspbian Stretch Lite、つまり、 _X Window を動かしてない環境での事例なので、X Window を動かしてる Raspbian Stretch では、状況が違ってくるのかもしれない。
_LOVE on Raspbian Stretch lite (without X)
ダメだった。やはり妙なエラーを出して落ちてしまう。
上記は、Raspbian Stretch Lite、つまり、 _X Window を動かしてない環境での事例なので、X Window を動かしてる Raspbian Stretch では、状況が違ってくるのかもしれない。
◎ 試行錯誤その2。 :
その後もググってたら、どうして love2d がエラーを出して落ちるのか、原因を突き止めた記事に遭遇。素晴らしい。
_LOVE (Love2D) を Raspbian Stretch で動かす: Digitalians' Alchemy
そうか…OpenAL が犯人だったのか…。
しかも、ありがたいことに、SDL2 や love2d をビルドするためのスクリプトまで公開されているようで。これは助かる。マジで助かる…。
_Digitalians' Alchemy | LOVE (Love2D) プログラミング | インストール
ビルドするための love2d-build.sh をDLして、love2d のバージョンを、0.10.2 から 11.1 に変更して、手元の環境でビルドしてみたり。4〜5時間ぐらいかかるけど…。
ビルドが終わると、/usr/local/games/love/ 以下に、一式がインストールされる模様。
/usr/local/games/love/run_love.sh を使って、例のシューティングゲームもどきサンプルを動かしてみた。
_mieki256/love2d_stg_sample02: love2d sample. top view scroll shooting game.
動いた。今度は落ちなかった。ありがたい。
つまり、SDL2 を OpenGL無効、OpenGLES有効でビルドして、OpenALもビルドし直して、love2d 11.1 もビルドすれば、Raspberry Pi Zero W + Raspbian stretch 上でも love2d は動く、ということが分かった。
_LOVE (Love2D) を Raspbian Stretch で動かす: Digitalians' Alchemy
そうか…OpenAL が犯人だったのか…。
しかも、ありがたいことに、SDL2 や love2d をビルドするためのスクリプトまで公開されているようで。これは助かる。マジで助かる…。
_Digitalians' Alchemy | LOVE (Love2D) プログラミング | インストール
ビルドするための love2d-build.sh をDLして、love2d のバージョンを、0.10.2 から 11.1 に変更して、手元の環境でビルドしてみたり。4〜5時間ぐらいかかるけど…。
curl -L http://d-alchemy.xyz/software/love/love2d-build.sh >love2d-build.sh vi love2d-build.sh
LOVE_VERSION=love-0.10.2 ↓ LOVE_VERSION=love-11.1
./love2d-build.sh
ビルドが終わると、/usr/local/games/love/ 以下に、一式がインストールされる模様。
/usr/local/games/love/run_love.sh を使って、例のシューティングゲームもどきサンプルを動かしてみた。
_mieki256/love2d_stg_sample02: love2d sample. top view scroll shooting game.
動いた。今度は落ちなかった。ありがたい。
つまり、SDL2 を OpenGL無効、OpenGLES有効でビルドして、OpenALもビルドし直して、love2d 11.1 もビルドすれば、Raspberry Pi Zero W + Raspbian stretch 上でも love2d は動く、ということが分かった。
◎ Xの端末上でキー入力が再生されてしまう問題。 :
上記の版を使って love2d を動かしたけれど、Xの端末(ターミナル)上で、キー入力が再生されてしまうことに気づいた。
例えば love2d を動かして、キー入力でアレコレ動かした後、ESCキーで終了すると、戻ってきた際に打ったキーがターミナル上でダーッと入力されて非常に危ないわけで。
なので、もしかすると shut-term-keys を通して love2d を動かしたほうがいいのかもしれず。
_mieki256's diary - 端末へのキー入力を無視してくれる shut-term-keys をRaspberry Pi Zero Wにインストールしてみたり
_inoremap/shut-term-keys: Workaround for keystrokes leaking into terminal on Raspbian
上記の版の love2d なら、run_love.sh の中で、以下のような指定をすればいい。
これで、love2d上でキー入力をしても、X + 端末に戻ってきた際にキー入力が再生されずに済んだ。
例えば love2d を動かして、キー入力でアレコレ動かした後、ESCキーで終了すると、戻ってきた際に打ったキーがターミナル上でダーッと入力されて非常に危ないわけで。
なので、もしかすると shut-term-keys を通して love2d を動かしたほうがいいのかもしれず。
_mieki256's diary - 端末へのキー入力を無視してくれる shut-term-keys をRaspberry Pi Zero Wにインストールしてみたり
_inoremap/shut-term-keys: Workaround for keystrokes leaking into terminal on Raspbian
上記の版の love2d なら、run_love.sh の中で、以下のような指定をすればいい。
#!/bin/sh export SDL_VIDEO_GL_DRIVER=/opt/vc/lib/libbrcmGLESv2.so export SDL_VIDEO_EGL_DRIVER=/opt/vc/lib/libbrcmEGL.so stty -echo LD_LIBRARY_PATH=/usr/local/games/love/lib:$LD_LIBRARY_PATH shut-term-keys /usr/local/games/love/bin/love "$@" stty echo/usr/local/games/love/bin/love の前に、shut-term-keys を追加してる。
これで、love2d上でキー入力をしても、X + 端末に戻ってきた際にキー入力が再生されずに済んだ。
[ ツッコむ ]
以上です。