2017/11/01(水) [n年前の日記]
#1 [love2d][lua][raspberrypi] love2dでフルスクリーン表示のテスト
love2dでフルスクリーン表示ができそうか動作確認中。
まずは、Windows10 x64 + love2d 0.10.2上で実験。
まずは、Windows10 x64 + love2d 0.10.2上で実験。
◎ フルスクリーン表示の標準的な指定の仕方について。 :
love2d は、フルスクリーン表示を指定できる。まずは、標準的な指定方法を試してみる。
使用した画像は以下。License : CC0 ってことで。
_bg_640x480.png
_spaceship_001_64x64.png
ソースは以下。
_conf.lua
_main.lua
結果はこんな感じに。予想通りの表示になった。
使用した画像は以下。License : CC0 ってことで。
_bg_640x480.png
_spaceship_001_64x64.png
ソースは以下。
_conf.lua
function love.conf(t) t.window.width = 640 t.window.height = 480 t.window.title = "Move Sprite Example 02" t.window.vsync = true t.window.fullscreen = true t.window.fullscreentype = "exclusive" endconf.lua の中で以下を指定してるので…。
- t.window.fullscreen = true
- t.window.fullscreentype = "exclusive"
_main.lua
-- sprite move example 02 function love.load() -- init -- get window width and height scrw = love.graphics.getWidth() scrh = love.graphics.getHeight() -- load image bgimg = love.graphics.newImage("bg_640x480.png") playerimg = love.graphics.newImage("spaceship_001_64x64.png") -- player work player = {} player.x = scrw / 2 player.y = scrh / 2 player.speed = 250 player.imgw = playerimg:getWidth() player.imgh = playerimg:getHeight() end function love.update(dt) -- update -- key check local ang = -1 if love.keyboard.isDown("left") then ang = 180 elseif love.keyboard.isDown("right") then ang = 0 end if love.keyboard.isDown("up") then if ang < 0 then ang = 270 elseif ang == 0 then ang = 270 + 45 else ang = 180 + 45 end elseif love.keyboard.isDown("down") then if ang < 0 then ang = 90 elseif ang == 0 then ang = 45 else ang = 180 - 45 end end if ang >= 0 then local spd = player.speed * dt local ra = math.rad(ang) player.x = player.x + (spd * math.cos(ra)) player.y = player.y + (spd * math.sin(ra)) end -- move area check local wh = player.imgw / 2 local hh = player.imgh / 2 local xmin = wh local ymin = hh local xmax = scrw - wh local ymax = scrh - hh player.x = math.min(math.max(player.x, xmin), xmax) player.y = math.min(math.max(player.y, ymin), ymax) end function love.draw() -- draw BG love.graphics.setColor(255, 255, 255, 255) love.graphics.draw(bgimg, 0, 0) -- love.graphics.rectangle("fill", 0, 465, scrw, 150) love.graphics.setColor(255, 255, 255, 255) -- draw player ofsx = player.imgw / 2 ofsy = player.imgh / 2 love.graphics.draw(playerimg, player.x - ofsx, player.y - ofsy) 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
結果はこんな感じに。予想通りの表示になった。
◎ Raspberry Pi Zero W上で動かすと上手く行かない。 :
上記のソースを、Raspberry Pi Zero W + raspbian stretch + OpenGL ESを使うSDL2 + love2d 0.10.2 で動かしてみる。画面解像度は、1280x720。
酷い結果になった。conf.lua 内で指定したウインドウサイズは無視されて、画面解像度(=1280x720)がウインドウサイズとして取得されてしまっている模様。
酷い結果になった。conf.lua 内で指定したウインドウサイズは無視されて、画面解像度(=1280x720)がウインドウサイズとして取得されてしまっている模様。
◎ 解決策。 :
解決策をググってたら、以下の記事に遭遇した。
_Love2D - Raspberry Pi Forums
_Canvas - LOVE
_love.graphics.setCanvas - LOVE
_Canvas:renderTo - LOVE
_love.graphics.draw - LOVE
ということで、その方法を試してみる。
_conf.lua
_main.lua
結果はこうなった。
アスペクト比の計算をサボってるので、4:3の画面が16:9で引き延ばされて、横に長い見た目になってしまっているけど…。少なくとも、画面一杯に引き延ばして描画することは可能っぽい。
_Love2D - Raspberry Pi Forums
(edit- nevermind, created a workaround!)「仮想スクリーンとして canvas を用意して、そこに描画してから canvas を拡大描画したらそれらしくなった」と言ってるのかな…?
create a low res 'virtual' screen with a canvas.
set its filtering mode to 'nearest' draw all game stuff to there at the end, draw that canvas (scaled up) to the actual high res screen.
result = low res sharp fat pixels on a high res screen.
_Canvas - LOVE
_love.graphics.setCanvas - LOVE
_Canvas:renderTo - LOVE
_love.graphics.draw - LOVE
ということで、その方法を試してみる。
_conf.lua
function love.conf(t) -- t.window.width = 1280 -- t.window.height = 720 t.window.vsync = true t.window.fullscreen = true -- t.window.fullscreentype = "exclusive" end
_main.lua
-- fullscreen disp 01 function love.load() -- init -- set filter love.graphics.setDefaultFilter("nearest", "nearest") scr_w = 640 scr_h = 480 canvas = love.graphics.newCanvas(scr_w, scr_h) -- get window width and height wdw_w = love.graphics.getWidth() wdw_h = love.graphics.getHeight() -- load image bgimg = love.graphics.newImage("bg_640x480.png") playerimg = love.graphics.newImage("spaceship_001_64x64.png") -- player work player = {} player.x = scr_w / 2 player.y = scr_h / 2 player.speed = 250 player.imgw = playerimg:getWidth() player.imgh = playerimg:getHeight() end function love.update(dt) -- update -- key check local ang = -1 if love.keyboard.isDown("left") then ang = 180 elseif love.keyboard.isDown("right") then ang = 0 end if love.keyboard.isDown("up") then if ang < 0 then ang = 270 elseif ang == 0 then ang = 270 + 45 else ang = 180 + 45 end elseif love.keyboard.isDown("down") then if ang < 0 then ang = 90 elseif ang == 0 then ang = 45 else ang = 180 - 45 end end if ang >= 0 then local spd = player.speed * dt local ra = math.rad(ang) player.x = player.x + (spd * math.cos(ra)) player.y = player.y + (spd * math.sin(ra)) end -- move area check local wh = player.imgw / 2 local hh = player.imgh / 2 local xmin = wh local ymin = hh local xmax = scr_w - wh local ymax = scr_h - hh player.x = math.min(math.max(player.x, xmin), xmax) player.y = math.min(math.max(player.y, ymin), ymax) end function love.draw() -- set canvas love.graphics.setCanvas(canvas) -- draw BG love.graphics.setColor(255, 255, 255) love.graphics.draw(bgimg, 0, 0) -- love.graphics.rectangle("fill", 0, 465, scr_w, 150) love.graphics.setColor(255, 255, 255) -- draw player ofsx = player.imgw / 2 ofsy = player.imgh / 2 love.graphics.draw(playerimg, player.x - ofsx, player.y - ofsy) -- unset canvas love.graphics.setCanvas() -- draw canvas to window love.graphics.setColor(255, 255, 255) love.graphics.draw(canvas, 0, 0, 0, wdw_w / scr_w, wdw_h / scr_h) 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
結果はこうなった。
アスペクト比の計算をサボってるので、4:3の画面が16:9で引き延ばされて、横に長い見た目になってしまっているけど…。少なくとも、画面一杯に引き延ばして描画することは可能っぽい。
◎ 少し説明。 :
conf.lua 内では…。
この、conf.lua の内容で…。
main.lua 内では…。
canvas への描画は、以下でできるらしい。
ウインドウへのcanvasの描画は、love.graphics.draw() を使う。
- ウインドウサイズの指定をコメントアウト。
- フルスクリーン表示の種類の指定をコメントアウト。
この、conf.lua の内容で…。
- Raspberry Pi Zeor W 上では「とにかくフルスクリーン表示しろ」という指定になる。ウインドウサイズ = 画面解像度。
- Windows10 x64上では、ウインドウサイズはデフォルトの800x600になり、その800x600の画面がフルスクリーン表示される。
main.lua 内では…。
- 初期化処理(love.load()内)で canvas を作成。
- 描画処理(love.draw()内)では、canvas にゲーム画面を描いてから、その canvas をウインドウに拡大しつつ描画。
- 拡大縮小描画はクッキリした見た目にしたかったので、love.graphics.setDefaultFilter("nearest", "nearest") を記述して、nearestフィルタで拡大縮小するように指定。
canvas への描画は、以下でできるらしい。
love.graphics.setCanvas(canvas) (描画処理) love.graphics.setCanvas()
ウインドウへのcanvasの描画は、love.graphics.draw() を使う。
love.graphics.draw(描画したい画像・キャンバス等, 描画位置x, 描画位置y, 描画方向 , 横方向の拡大縮小率, 縦方向の拡大縮小率)
◎ もう少し説明。 :
luaでローカル変数を使いたい時は、local と頭につけるらしい。
三角関数は以下。
最大値、最小値を取り出すなら以下。
Luaは初めて触ってるわけだけど、このあたりは比較的素直な仕様だなと…。
local ang = 0
三角関数は以下。
- math.sin(ラジアン値)
- math.cos(ラジアン値)
- 度からラジアンの変換は、math.rad(角度)
- ラジアンから度への変換は、math.deg(ラジアン値)
最大値、最小値を取り出すなら以下。
- math.min(値1, 値2) : 最小値を返す。
- math.max(値1, 値2) : 最大値を返す。
Luaは初めて触ってるわけだけど、このあたりは比較的素直な仕様だなと…。
[ ツッコむ ]
#2 [love2d][lua][raspberrypi] 「jack server is not running or cannot be started」について
Raspberry Pi Zero W 上でSDL2関係のアレコレを動かそうとすると、「jack server is not running or cannot be started」と言われてしまう時があるのだけど。解決策をググってみて分かった点をメモ。
どうやら、コレって別にエラーが出てるわけではなくて、サウンドを鳴らす何かしらが「音を出す色んな仕組みにとりあえず打診してみたんだけど、jack君は無反応だったよ」と調査結果を報告してるだけ、らしい…。
回避策としては、jackd -d dummy とやらを実行しておけばメッセージは出なくなる模様。何をやってるのかさっぱり分からんけど。
以下、そのあたりの話について目についた記事をメモ。
_sound - Problem starting JACK server "Jack Server is not running or cannot be started" - Ask Ubuntu
_python - Raspberry Pi Radio Script Stopped Working "jack server is not running or cannot be started" - Stack Overflow
_python - PyAudio trying to use JACK - Stack Overflow
_python - jack server is not running or cannot be started - Stack Overflow
_[SOLVED] ALSA complaining about Jack Server
_Complains about jack server not running on Raspbian - Issue #10 - shichao-an/soundmeter
_Rassberry Pi and Jack audio - Raspberry Pi Forums
どうやら、コレって別にエラーが出てるわけではなくて、サウンドを鳴らす何かしらが「音を出す色んな仕組みにとりあえず打診してみたんだけど、jack君は無反応だったよ」と調査結果を報告してるだけ、らしい…。
回避策としては、jackd -d dummy とやらを実行しておけばメッセージは出なくなる模様。何をやってるのかさっぱり分からんけど。
以下、そのあたりの話について目についた記事をメモ。
_sound - Problem starting JACK server "Jack Server is not running or cannot be started" - Ask Ubuntu
_python - Raspberry Pi Radio Script Stopped Working "jack server is not running or cannot be started" - Stack Overflow
_python - PyAudio trying to use JACK - Stack Overflow
_python - jack server is not running or cannot be started - Stack Overflow
_[SOLVED] ALSA complaining about Jack Server
_Complains about jack server not running on Raspbian - Issue #10 - shichao-an/soundmeter
_Rassberry Pi and Jack audio - Raspberry Pi Forums
[ ツッコむ ]
#3 [hns] この日記ページでLua言語の色分け表示ができるように指定
この日記ページにプログラムソースを貼り付けて表示する際は、SyntaxHighlighter を使わせてもらっているのだけど。
_SyntaxHighlighter
Lua言語には対応してないわけで。対応させる方法はないのかなと。
色々ググってみたら、以下の記事で公開されてるファイルを使えば対応できるらしいと知り、試しに導入。
_SyntaxHighlighter Evolved Brush for other languages - mikrom
syntaxhighlighter-evolved-lua-brush.zip をDLして解凍。中に shBrushLua.js が入ってるので、scripts ディレクトにコピー。
hns の theme.ph を編集。以下を追加。
以下で公開されてる版でも動いてくれた。おそらく韓国の方が公開してるのかな…。
_SyntaxHighlighter 3.0.xx , lua brush shBrushLua.js
他にも色んな版を見かけたけど、どうも SyntaxHighlighter のバージョンによって使えるファイルが違うようで。他の scripts/shBrush*.js の中身を眺めて、似たような記述がされてるファイルを探さないといかんらしい。
_SyntaxHighlighter
Lua言語には対応してないわけで。対応させる方法はないのかなと。
色々ググってみたら、以下の記事で公開されてるファイルを使えば対応できるらしいと知り、試しに導入。
_SyntaxHighlighter Evolved Brush for other languages - mikrom
syntaxhighlighter-evolved-lua-brush.zip をDLして解凍。中に shBrushLua.js が入ってるので、scripts ディレクトにコピー。
hns の theme.ph を編集。以下を追加。
<script type="text/javascript" src="scripts/shBrushLua.js"></script>
以下で公開されてる版でも動いてくれた。おそらく韓国の方が公開してるのかな…。
_SyntaxHighlighter 3.0.xx , lua brush shBrushLua.js
他にも色んな版を見かけたけど、どうも SyntaxHighlighter のバージョンによって使えるファイルが違うようで。他の scripts/shBrush*.js の中身を眺めて、似たような記述がされてるファイルを探さないといかんらしい。
◎ Autoloaderが動かない。 :
以下によると、Autolaoder なる機能があるらしいけど。
_【Javascript】SyntaxHighlighter 3.0 の新機能と注意点 | blog.remora.cx
ローカルで試してみたけど、動かない…。
ググってみたら、以下の記事で説明が。
_SyntaxHighlighter(Ver3.x)の導入方法 | Sabakura Blog
そういうことだったのか…。window.onload を使う形に書き換えてみたら動いてくれた。助かった。
_【Javascript】SyntaxHighlighter 3.0 の新機能と注意点 | blog.remora.cx
ローカルで試してみたけど、動かない…。
ググってみたら、以下の記事で説明が。
_SyntaxHighlighter(Ver3.x)の導入方法 | Sabakura Blog
SyntaxHighlighterは、ページ読み込み後に動作させないと上手く機能しません。そのため、フッター部で読み込ませるか、もしくはヘッダ部に記述する場合は、window.onloadを使う必要があります。
そういうことだったのか…。window.onload を使う形に書き換えてみたら動いてくれた。助かった。
[ ツッコむ ]
2017/11/02(木) [n年前の日記]
#1 [lua][love2d][raspberrypi] love2dでインチキ多関節
love2dを勉強中。どのくらいスプライト相当が描画できそうか動作確認。
とりあえず、 _昔DXRubyを使って書いたインチキ多関節 を移植してみたり。こんな感じになった。
ただ、Pi Zero W上では、動きがちょっとガクガクしてる感じもする。
ひょっとすると、getFPS() が取得してるのは love.update() が呼ばれてる頻度で、描画はまた別なのかな。まあ、内部的には60FPS相当で処理できてるということなら、それはそれでいいか…。
何にせよ、Pi Zero上でリアルタイム系の2Dゲームを作ってみたい、てな場合、Lua + love2d は良い選択肢になりそうな予感。…OpenGL ESを有効にしたSDL2をビルドしないといかんあたりがハードルになりそうではあるけど。その版も apt でインストールできればいいのに。
とりあえず、 _昔DXRubyを使って書いたインチキ多関節 を移植してみたり。こんな感じになった。
- Windows10 x64 + Core i5 2500 + GeForce GTX 750 Ti 上では60FPSで動いた。
- Raspberry Pi Zero W 上でも60FPSで動いてくれた。
ただ、Pi Zero W上では、動きがちょっとガクガクしてる感じもする。
ひょっとすると、getFPS() が取得してるのは love.update() が呼ばれてる頻度で、描画はまた別なのかな。まあ、内部的には60FPS相当で処理できてるということなら、それはそれでいいか…。
何にせよ、Pi Zero上でリアルタイム系の2Dゲームを作ってみたい、てな場合、Lua + love2d は良い選択肢になりそうな予感。…OpenGL ESを有効にしたSDL2をビルドしないといかんあたりがハードルになりそうではあるけど。その版も apt でインストールできればいいのに。
◎ 使用画像とソース。 :
使用画像は以下。License : CC0 / Public Domain ってことで。
_bg_640x480.png
_ufo.png
ソースは以下。
_conf.lua
_main.lua
何かテキトーな名前のフォルダを作って、画像と *.lua を入れて、「love フォルダ名」で実行できる。
それにしても…。 _DXRuby版 と比べると、長いな…。
_bg_640x480.png
_ufo.png
ソースは以下。
_conf.lua
function love.conf(t) t.window.title = "Inchiki Takansetsu" t.window.width = 1280 t.window.height = 720 t.window.vsync = true -- t.window.fullscreen = true -- t.window.fullscreentype = "exclusive" end
_main.lua
-- Inchiki Takansetsu function love.load() -- init -- set filter love.graphics.setDefaultFilter("nearest", "nearest") scr_w = 640 scr_h = 480 canvas = love.graphics.newCanvas(scr_w, scr_h) -- get window width and height wdw_w = love.graphics.getWidth() wdw_h = love.graphics.getHeight() 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 bgimg = love.graphics.newImage("bg_640x480.png") img = love.graphics.newImage("ufo.png") img_w = img:getWidth() img_h = img:getHeight() -- work nmax = 64 bx = scr_w / 2 by = 0 startdeg = 0 poslist = {} for i=1,nmax do poslist[i] = {x=0, y=0} end -- framerate steady min_dt = 1 / 60 next_time = love.timer.getTime() end function love.update(dt) -- update next_time = next_time + min_dt -- get mouse position local mx, my = love.mouse.getPosition() mx = (mx - scr_ofsx) / scr_scale my = (my - scr_ofsy) / scr_scale local dw = mx - bx local dh = my - by local deg = startdeg local h = 100 for i=1,nmax do local ii = i - 1 local x = bx + (dw * ii / nmax) - (img_w / 2) local y = by + (dh * ii / nmax) - (img_h / 2) -- local hh = h * ii / nmax local hh = h x = x + hh * math.sin(math.rad(deg)) poslist[i].x = x poslist[i].y = y deg = deg + 8 end startdeg = startdeg + 360 * dt end function love.draw() -- set canvas love.graphics.setCanvas(canvas) -- draw BG love.graphics.setColor(255, 255, 255) love.graphics.draw(bgimg, 0, 0) love.graphics.setColor(255, 255, 255) -- draw objs for i=1,nmax do local x = poslist[i].x local y = poslist[i].y love.graphics.draw(img, x, y) end -- unset canvas love.graphics.setCanvas() -- draw canvas to window love.graphics.setColor(255, 255, 255) love.graphics.draw(canvas, scr_ofsx, scr_ofsy, 0, scr_scale, scr_scale) love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 10, 10) love.graphics.print("env: "..tostring(love.system.getOS()), 10, 40) if love.system.getOS() == "Windows" then -- wait local cur_time = love.timer.getTime() if next_time <= cur_time then next_time = cur_time else love.timer.sleep(next_time - cur_time) end end end function love.keypressed(key, isrepeat) -- ESC to exit if key == "escape" then love.event.quit() end end
何かテキトーな名前のフォルダを作って、画像と *.lua を入れて、「love フォルダ名」で実行できる。
それにしても…。 _DXRuby版 と比べると、長いな…。
◎ 少し説明。 :
Raspberry Pi Zero上でフルスクリーン表示をする関係で、一旦 canvas 内に描画してから、その canvas をウインドウに描画する、ということをしてる。先日書いたソースではアスペクト比がおかしい状態で引き延ばしてたけど、今回はアスペクト比をちゃんと維持するようにしてみた。love.load() の中で、canvasの拡大縮小率や描画座標を求めてる。
マウス座標の取得は、love.mouse.getPosition() でできるらしい。
Windows上ではFPS値がスゴイことになってたけど、どうやら本来は、時間を測って sleep を入れるべき、らしい。 _love.timer.sleep (日本語) - LOVE で、そのあたりのサンプルが提示されてる。ただ、Raspberry Pi上で動かした場合は、特に何もしなくても love.timer.getFPS() が 60FPS を返すので、今回は Windows上で動いてる時のみ、該当処理が行われるようにしてみた。
_love.system.getOS() で、OS種類が取得できる。
マウス座標の取得は、love.mouse.getPosition() でできるらしい。
local mx, my = love.mouse.getPosition()今回、canvas を拡大縮小して描画してるので、ソレを考慮してマウス座標を求めてる。
Windows上ではFPS値がスゴイことになってたけど、どうやら本来は、時間を測って sleep を入れるべき、らしい。 _love.timer.sleep (日本語) - LOVE で、そのあたりのサンプルが提示されてる。ただ、Raspberry Pi上で動かした場合は、特に何もしなくても love.timer.getFPS() が 60FPS を返すので、今回は Windows上で動いてる時のみ、該当処理が行われるようにしてみた。
_love.system.getOS() で、OS種類が取得できる。
- Windows10 x64上で動かしたら、"Windows" が返ってきた。
- Raspberry Pi上で動かしたら、"Linux" が返ってきた。
[ ツッコむ ]
#2 [lua][love2d] NTEmacs上にlua-modeを追加
昨日まで、lua + love2d のソースを
_Notepad++
で編集していたのだけど。どうも個人的に使い勝手がしっくりこない感じがしてきたので、emacs(NTEmacs 24.5.1) に lua-mode 等をインストールして環境整備を。ちなみに環境は Windows10 x64。
いやまあ、Notepad++ での編集も、それほど悪くないのだけど。ショートカットキー一発で、love2dを実行できるように設定できたりもするので…。フツーは Notepad++ のほうがオススメというか。
いやまあ、Notepad++ での編集も、それほど悪くないのだけど。ショートカットキー一発で、love2dを実行できるように設定できたりもするので…。フツーは Notepad++ のほうがオススメというか。
◎ lua-modeのインストール。 :
lua-mode は以下。…じゃないかな。たぶん。
_Lua-mode
M-x list-package で一覧を表示して、lua-mode 20170130版をインストール。(C-s で lua-mode を検索して、該当行でiキーを押してxキー)。
~/.emacs に以下を追加。
インデントレベルが3になってる模様。2にする。
これで、.lua を開いたら lua-mode になってくれた。
_Lua-mode
M-x list-package で一覧を表示して、lua-mode 20170130版をインストール。(C-s で lua-mode を検索して、該当行でiキーを押してxキー)。
~/.emacs に以下を追加。
;; ---------------------------------------- ;; lua-mode ;; This snippet enables lua-mode ;; This line is not necessary, if lua-mode.el is already on your load-path ;; (add-to-list 'load-path "/path/to/directory/where/lua-mode-el/resides") (autoload 'lua-mode "lua-mode" "Lua editing mode." t) (add-to-list 'auto-mode-alist '("\\.lua$" . lua-mode)) (add-to-list 'interpreter-mode-alist '("lua" . lua-mode))
インデントレベルが3になってる模様。2にする。
(setq lua-indent-level 2)
これで、.lua を開いたら lua-mode になってくれた。
◎ love2d用のマイナーモードをインストール。 :
love2d用のマイナーモード、love-minor-mode.el を公開してくれてる方が居るようで。これもありがたく使わせてもらおう…。
_ejmr/love-minor-mode: An Emacs minor mode for LOVE
love-minor-mode.el をDL。emacs からパスが通ってる場所に置く。
love-minor-mode.el 内で、love.exe の場所を決め打ちしてるところがあるので修正。「love.exe」で検索すれば見つかるはず。もっとも、love.exe にPATHが通ってる環境なら、.el 内を編集する必要はないけれど。
~/.emacs に以下を追加。
使い方は…。例えば main.lua 等を開いている状態で、M-x love-minor-mode を実行。「Love-minor-mode enabled」と表示されたら該当マイナーモードが有効になる。再度 M-x love-minor-mode と打てば無効になる。
M-p に love/play が割り当てられているので、main.lua を編集中に M-p を叩けば、love.exe を呼び出して実行してくれる。
_ejmr/love-minor-mode: An Emacs minor mode for LOVE
love-minor-mode.el をDL。emacs からパスが通ってる場所に置く。
love-minor-mode.el 内で、love.exe の場所を決め打ちしてるところがあるので修正。「love.exe」で検索すれば見つかるはず。もっとも、love.exe にPATHが通ってる環境なら、.el 内を編集する必要はないけれど。
~/.emacs に以下を追加。
;; love2d love-minor-mode (require 'love-minor-mode)
使い方は…。例えば main.lua 等を開いている状態で、M-x love-minor-mode を実行。「Love-minor-mode enabled」と表示されたら該当マイナーモードが有効になる。再度 M-x love-minor-mode と打てば無効になる。
M-p に love/play が割り当てられているので、main.lua を編集中に M-p を叩けば、love.exe を呼び出して実行してくれる。
[ ツッコむ ]
2017/11/03(金) [n年前の日記]
#1 [windows][raspberrypi] Windows上でRaspberry Piのエミュレータを動かしてみたり
Raspberry Pi Zero Wを使って何かしら動作確認をするたびに、Raspberry Pi Zero W機の電源を入れたりキーボードを引っ張り出すのが面倒臭いなと。
Windows上でエミュレーションできたら多少は快適にならないかと思えてきたので、Raspberry Piのエミュレータとやらを動かしてみようかなと。環境は、Windows10 x64。
どうやら、QEMUなる仮想PCを使うとエミュレーションができるらしい。
Windows上でエミュレーションできたら多少は快適にならないかと思えてきたので、Raspberry Piのエミュレータとやらを動かしてみようかなと。環境は、Windows10 x64。
どうやら、QEMUなる仮想PCを使うとエミュレーションができるらしい。
◎ 簡単に動かす方法。 :
以下が参考になった。
_Windows 用ラズパイエミュレータを使ってみた : まだプログラマーですが何か?
以下から、qemu.zip をDL。2012/07/26と古いけど…。
_Raspberry Pi emulation for Windows download | SourceForge.net
解凍して、D:\qemu として置いてみた。run.bat を実行。Raspberry Piの画面がたしかに出てきた。
raspbian のバージョンは wheezy らしい。ちなみに、wheezy → jessie → stretch の順で新しい。最新版は stretch。
_Windows 用ラズパイエミュレータを使ってみた : まだプログラマーですが何か?
以下から、qemu.zip をDL。2012/07/26と古いけど…。
_Raspberry Pi emulation for Windows download | SourceForge.net
解凍して、D:\qemu として置いてみた。run.bat を実行。Raspberry Piの画面がたしかに出てきた。
raspbian のバージョンは wheezy らしい。ちなみに、wheezy → jessie → stretch の順で新しい。最新版は stretch。
◎ source.listを変更。 :
手元の環境では、sudo apt-get update だの sudo apt-get upgrade 等を実行するとダウンロードの段階で固まってしまう。
/etc/apt/source.list を変更して、日本国内のサーバを指定すれば改善する時があるらしいので試したり。
_rasbianでapt-get updateがうまく行かない場合の可能性について - Live the Life you Love
ミラーサイトは以下。
_RaspbianMirrors - Raspbian
JAIST や Yamagata University のURLで置き換えたら、少なくともダウンロードは止まらなくなった。
/etc/apt/source.list を変更して、日本国内のサーバを指定すれば改善する時があるらしいので試したり。
_rasbianでapt-get updateがうまく行かない場合の可能性について - Live the Life you Love
ミラーサイトは以下。
_RaspbianMirrors - Raspbian
JAIST や Yamagata University のURLで置き換えたら、少なくともダウンロードは止まらなくなった。
◎ 比較的新しいQEMUとraspbian stretchのimgで試してみる。 :
どうせなら raspbian stretch を動かしてみるか…。と思ったけれど、stretch用のkernelが見つからない。jessie用で動くかな…。qemu も新しい版を試してみたいな…。
ということで、比較的新しい版で動かしてみる。以下の解説記事に従って作業。ありがたや。
_Windows+QEMUでRaspberry Piをエミュレートする | junkato.jp
_Raspberry Pi emulator for WindowsでRaspbian最新版を動作させる手順 - Qiita
ということで、比較的新しい版で動かしてみる。以下の解説記事に従って作業。ありがたや。
_Windows+QEMUでRaspberry Piをエミュレートする | junkato.jp
_Raspberry Pi emulator for WindowsでRaspbian最新版を動作させる手順 - Qiita
◎ 必要なファイルを入手。 :
以下から qemu をダウンロード。
_QEMU for Windows - Installers (64 bit)
qemu-w64-setup-20171006.exe をDLして実行するとインストールされる。今回は、D:\qemu\ にインストールした。
raspbian stretch の img (2017-09-07-raspbian-stretch.zip) もDL。解凍して、中に入ってた .img を使う。
_Download Raspbian for Raspberry Pi
kernel は、kernel-qemu-4.4.34-jessie を使ってみた。
_dhruvvyas90/qemu-rpi-kernel: Qemu kernel for emulating Rpi on QEMU
2017-09-07-raspbian-stretch.img と kernel-qemu-4.4.34-jessie を、D:\qemu\qemu 以下に入れる。バッチファイルを作成。
run_raspbian.bat
run_raspbian.bat を実行。raspbian が起動した。
_QEMU for Windows - Installers (64 bit)
qemu-w64-setup-20171006.exe をDLして実行するとインストールされる。今回は、D:\qemu\ にインストールした。
raspbian stretch の img (2017-09-07-raspbian-stretch.zip) もDL。解凍して、中に入ってた .img を使う。
_Download Raspbian for Raspberry Pi
kernel は、kernel-qemu-4.4.34-jessie を使ってみた。
_dhruvvyas90/qemu-rpi-kernel: Qemu kernel for emulating Rpi on QEMU
2017-09-07-raspbian-stretch.img と kernel-qemu-4.4.34-jessie を、D:\qemu\qemu 以下に入れる。バッチファイルを作成。
run_raspbian.bat
@set PATH=D:\qemu;%PATH% qemu-system-arm.exe -kernel kernel-qemu-4.4.34-jessie -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2017-09-07-raspbian-stretch.img -net nic -net user,hostfwd=tcp::2222-:22
- qemu-system-arm.exe は、ARM CPUのエミュレータ。
- *-arm.exe と *-armw.exe の違いは、実行時にコンソール(DOS窓?)を出すか出さないか、らしい。
- -kernel hoge でカーネルファイルを指定。
- -cpu arm1176 -m 256 で、ARM CPU(の種類)、メモリ容量を指定してる。
- -hda hoge.img で、HDDイメージを指定。
- -net user,hostfwd=tcp::2222-:22 で、SSHのポート(22番) を 2222番に変更、しているのではないかな…。昔は -redir で指定してたらしいが、その指定方法は非推奨になったらしい。
run_raspbian.bat を実行。raspbian が起動した。
◎ raspbian上での初期設定。 :
qemu + raspbian起動後、/etc//etc/ld.so.preload を編集。1行目に「#」を打ってコメントアウト。
/etc/udev/rules.d/90-qemu.rules を作成。
sudo shutdown -h now でシャットダウンしてから、バッチファイルを再度実行して起動するか確認。一応動いている模様。
sudo nano /etc/ld.so.preload
/etc/udev/rules.d/90-qemu.rules を作成。
sudo nano /etc/udev/rules.d/90-qemu.rules中身を以下に。
KERNEL=="sda", SYMLINK+="mmcblk0" KERNEL=="sda?", SYMLINK+="mmcblk0p%n" KERNEL=="sda2", SYMLINK+="root"
sudo shutdown -h now でシャットダウンしてから、バッチファイルを再度実行して起動するか確認。一応動いている模様。
◎ imgの容量を増やす。 :
以下の記事を参考にして、imgを2GBほど増加。
_Raspberry Pi のイメージファイルを拡張する - ymyzk’s blog
Windows上のDOS窓で作業。2GB の temp.img を作成して、raspbian stretch の img にくっつけて、raspbian-stretch.img というファイルを新規作成。
run_raspbian.bat 内の、 *.img を raspbian-stretch.img に変更。
qemu + raspbianを起動後、sudo fdisk /dev/sda を実行。
sudo shutdown -h now でシャットダウン。run_raspbian.bat を実行して raspbianを再起動。
sudo resize2fs /dev/sda2 を実行してパーティションをリサイズ。
_Raspberry Pi のイメージファイルを拡張する - ymyzk’s blog
Windows上のDOS窓で作業。2GB の temp.img を作成して、raspbian stretch の img にくっつけて、raspbian-stretch.img というファイルを新規作成。
qemu-img create -f raw temp.img 2G copy /b 2017-09-07-raspbian-stretch.img+temp.img raspbian-stretch.img
run_raspbian.bat 内の、 *.img を raspbian-stretch.img に変更。
qemu + raspbianを起動後、sudo fdisk /dev/sda を実行。
- パーティション2の開始セクタをメモしておく。
- パーティション2を削除してから、プライマリーパーティションとして再作成。
- 開始セクタは、先ほど削除したパーティションの値を指定。
- パーティションテーブルを書き込んで fdisk終了。
sudo shutdown -h now でシャットダウン。run_raspbian.bat を実行して raspbianを再起動。
sudo resize2fs /dev/sda2 を実行してパーティションをリサイズ。
◎ SWAP領域を追加。 :
SWAP領域も追加。run_raspbian.bat 内で、temp.img を -hdb temp.img で追加して。raspbianを起動して以下を実行。
sudo mkswap /deb/sdb sudo swapon /dev/sdb
◎ 問題点。 :
色々問題があるようで。
これでは実機を動かしたほうがマシだなあ、という気分になってきた。
- とにかく遅い。何かするたびに十数秒〜数十秒待たされる。
- メモリ容量の指定は256MBが上限らしい。厳しい。代わりにSWAPを指定すると言ってもHDDにアクセスさせる時点で速度的に厳しいわけで。ユーザモードなるモードで動かせばもっとメモリを増やせるらしいけど、それはそれで何かしら制限があるだろうし…。
- ガンガンフリーズする。sudo apt-get upgrade ですら、ところどころでフリーズする…。
- マウスカーソルが妙なところを指す。位置が合わない。
これでは実機を動かしたほうがマシだなあ、という気分になってきた。
◎ 画面解像度を変更。 :
デフォルトでは 640x480 の画面になってしまうが、以下のページで画面解像度の変更方法が書いてあった。800x600,16bit であれば変更できるらしい。
_Raspberry PI Emulation | Southend Linux User Group (web archive)
/etc/X11/xorg.conf を新規作成。
中に以下を記述。
_Raspberry PI Emulation | Southend Linux User Group (web archive)
/etc/X11/xorg.conf を新規作成。
sudo nano /etc/X11/xorg.conf
中に以下を記述。
Section "Screen" Identifier "Default Screen" SubSection "Display" Depth 16 Modes "800x600" "640x480" EndSubSection EndSection
◎ その他参考ページ。 :
[ ツッコむ ]
#2 [raspberrypi] Raspberry Pi用のスペーサが届いた
スイッチサイエンスさんに注文してた、
_Raspberry Pi用のスペーサセット(SSCI-022682。長さ11mmスペーサ x 4、M2.6ネジ x 8)
がネコポスで届いた。
M3.0のネジなら近所のホームセンターでも入手できるのだけど、Raspberry Piの固定用の穴はM2.6じゃないと入らないらしいので、それだと入手しにくかったわけで…。通販で入手するしかないな、と。
とりあえずコレで、Raspberry Pi3 とブレッドボードを、 _TAMIYA ユニバーサルプレートL の上に固定できた。Raspberry Pi3 が電動雲台の上に固定してあっても、USB端子、HDMI端子、電源端子に、ケーブルを差せるから、動作確認等に流用できる。ていうか自分の場合、ケースは要らなかったな…。こういう状態のほうが全然便利だったかも。最初からこうしておけばよかった。
関係ないけど、ユニバーサルプレートをニッパーで無理矢理切っていく最中に、プレートの切断面で親指を切ってしまった。痛い。もっと簡単に、好きな形で切り出せる製品があればいいのに。いや、強度が足りなくなるから難しいか。…本来、このプレートは何で切るべきなんだろう。
M3.0のネジなら近所のホームセンターでも入手できるのだけど、Raspberry Piの固定用の穴はM2.6じゃないと入らないらしいので、それだと入手しにくかったわけで…。通販で入手するしかないな、と。
とりあえずコレで、Raspberry Pi3 とブレッドボードを、 _TAMIYA ユニバーサルプレートL の上に固定できた。Raspberry Pi3 が電動雲台の上に固定してあっても、USB端子、HDMI端子、電源端子に、ケーブルを差せるから、動作確認等に流用できる。ていうか自分の場合、ケースは要らなかったな…。こういう状態のほうが全然便利だったかも。最初からこうしておけばよかった。
関係ないけど、ユニバーサルプレートをニッパーで無理矢理切っていく最中に、プレートの切断面で親指を切ってしまった。痛い。もっと簡単に、好きな形で切り出せる製品があればいいのに。いや、強度が足りなくなるから難しいか。…本来、このプレートは何で切るべきなんだろう。
[ ツッコむ ]
2017/11/04(土) [n年前の日記]
#1 [lua][love2d] love2dでスプライトをアニメーション、するあたりを勉強中
[ ツッコむ ]
2017/11/05(日) [n年前の日記]
#1 [lua][love2d] love2dでスプライトをアニメーション
いわゆるスプライトシート画像を使ってlove2dで描画してみようと。
スプライトシートというのは…以下のような画像。アニメーションの各コマが一つの画像にまとまってる、みたいな画像のこと。
動作確認環境は、Windows10 x64 と Raspberry Pi Zero W + raspbian stretch。
こんな感じになった。
Windows10 x64上でも、Raspberry Pi Zero W上でも、同じように動いてくれた。
スプライトシートというのは…以下のような画像。アニメーションの各コマが一つの画像にまとまってる、みたいな画像のこと。
動作確認環境は、Windows10 x64 と Raspberry Pi Zero W + raspbian stretch。
こんな感じになった。
Windows10 x64上でも、Raspberry Pi Zero W上でも、同じように動いてくれた。
◎ 画像とソース。 :
画像は以下。License : CC0 / Public Domain ってことで。
_ufo_64x64_fullcol.png
ソースは以下。
_conf.lua
_main.lua
実行の仕方は、画像、conf.lua、main.lua をテキトーな名前のフォルダに入れて、「love フォルダ名」で実行。
_ufo_64x64_fullcol.png
ソースは以下。
_conf.lua
function love.conf(t) t.window.title = "Quad Test01" t.window.width = 1280 t.window.height = 720 t.window.vsync = true -- t.window.fullscreen = true -- t.window.fullscreentype = "exclusive" end
_main.lua
-- fullscreen disp 01 function love.load() -- init -- set filter love.graphics.setDefaultFilter("nearest", "nearest") -- set canvas size scr_w = 640 scr_h = 480 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("ufo_64x64_fullcol.png") -- make Quad imgs = {} for i=1,(8 * 4) do local ii = i - 1 local x = (ii % 8) * 64 local y = math.floor(ii / 8) * 64 imgs[ii] = love.graphics.newQuad(x, y, 64, 64, img:getDimensions()) end img_count = 9 img_count_time = 0 -- framerate steady min_dt = 1 / 60 next_time = love.timer.getTime() end function love.update(dt) -- update next_time = next_time + min_dt img_count_time = img_count_time + dt img_count = 9 + math.floor(15 * img_count_time) % 15 end function love.draw() -- set canvas love.graphics.setCanvas(canvas) -- draw BG love.graphics.setColor(0, 0, 255) love.graphics.rectangle("fill", 0, 0, scr_w, scr_h) -- draw sprite love.graphics.setColor(255, 255, 255) love.graphics.draw(img, imgs[img_count], 32, 32) -- unset canvas love.graphics.setCanvas() -- draw canvas to window love.graphics.setColor(255, 255, 255) love.graphics.draw(canvas, scr_ofsx, scr_ofsy, 0, scr_scale, scr_scale) love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 10, 10) if love.system.getOS() == "Windows" then -- wait local cur_time = love.timer.getTime() if next_time <= cur_time then next_time = cur_time else love.timer.sleep(next_time - cur_time) end end end function love.keypressed(key, isrepeat) -- ESC to exit if key == "escape" then love.event.quit() end end
実行の仕方は、画像、conf.lua、main.lua をテキトーな名前のフォルダに入れて、「love フォルダ名」で実行。
◎ 少し説明。 :
スプライトシートを使うには ―― 一つの画像の中から部分的に取り出して描画するには、Quad とやらを使うらしい。
_love.graphics.newQuad (日本語) - LOVE
Quad は、元画像の中から画像を取り出すというより、取り出すための情報を作る、みたいな感じだろうか…。と言うのも、実際の描画は以下のような感じで、元画像を渡しつつ処理するわけで。
_love.graphics.newQuad (日本語) - LOVE
frmae_info = love.graphics.newQuad(x, y, 横幅, 縦幅, 元画像のサイズ)ちなみに、元画像のサイズは、元画像の入った変数:getDimensions() で取得できる。
Quad は、元画像の中から画像を取り出すというより、取り出すための情報を作る、みたいな感じだろうか…。と言うのも、実際の描画は以下のような感じで、元画像を渡しつつ処理するわけで。
love.graphics.draw(元画像の入った変数, frame_info, width, height)
この記事へのツッコミ
[ ツッコミを読む(1) | ツッコむ ]
#2 [lua][love2d] love2dでタイルマップの表示
love2dでタイルマップBGを表示したいなと。
タイルマップは _Tiled Map Editor で作成するとして…。
ググってみたら、sti(Simple Tiled Implementation)を使うと楽になるらしい。
_karai17/Simple-Tiled-Implementation: Tiled library for LOVE
_Lua.Space | Using Tiled Maps in LOVE
試してみた。たしかに楽に表示できる。
自作の画像やマップデータは以下。License : CC0 / Public Domain ってことで。
_tile01.png
_mecha_bg_map.tmx
_mecha_bg_map.lua
タイルマップは _Tiled Map Editor で作成するとして…。
ググってみたら、sti(Simple Tiled Implementation)を使うと楽になるらしい。
_karai17/Simple-Tiled-Implementation: Tiled library for LOVE
_Lua.Space | Using Tiled Maps in LOVE
試してみた。たしかに楽に表示できる。
自作の画像やマップデータは以下。License : CC0 / Public Domain ってことで。
_tile01.png
_mecha_bg_map.tmx
_mecha_bg_map.lua
◎ stiの使い方。 :
まず、Tiled から、.lua 形式でエクスポート。
sti を、 _karai17/Simple-Tiled-Implementation から、任意のフォルダ内で git でクローンするなり、zipでDL・解凍するなりして。
main.lua があるフォルダに、stiフォルダを丸々コピー。例えば以下のようなファイル構成に。
表示するだけなら、以下で済む。
ただ、スクロール等はどうすればいいのやら。調べてみないと。sti に同梱の main.lua が、カーソルキーやWASDキーでスクロールできているので、参考になりそうな予感。
sti を、 _karai17/Simple-Tiled-Implementation から、任意のフォルダ内で git でクローンするなり、zipでDL・解凍するなりして。
git clone https://github.com/karai17/Simple-Tiled-Implementation.git
main.lua があるフォルダに、stiフォルダを丸々コピー。例えば以下のようなファイル構成に。
. |-- sti | |-- plugins | | |-- box2d.lua | | `-- bump.lua | |-- graphics.lua | |-- init.lua | `-- utils.lua | |-- conf.lua |-- main.lua | |-- mecha_bg_map.lua : タイルマップデータ(.lua) |-- mecha_bg_map.tmx : タイルマップデータ(.tmx) `-- tile01.png : タイルマップで使う画像
表示するだけなら、以下で済む。
local sti = require "sti" function love.load() map = sti("mecha_bg_map.lua") end function love.update(dt) map:update(dt) end function love.draw() map:draw() end簡単だ…。
ただ、スクロール等はどうすればいいのやら。調べてみないと。sti に同梱の main.lua が、カーソルキーやWASDキーでスクロールできているので、参考になりそうな予感。
[ ツッコむ ]
#3 [windows] treeをインストール
Windows版 tree.com は出力結果が何かしっくりこないので、*NIX版の tree を MSYS2上でインストールしてみたり。
MSYS2 MSYS (64bit) を起動。以下を打ってインストール。
以下で実行できる。
MSYS2 MSYS (64bit) を起動。以下を打ってインストール。
pacman -S tree
以下で実行できる。
tree --charset=C --dirsfirst
- --charset=C で、ASCII文字だけを使って出力。
- --dirsfirst で、ディレクトリを先頭に持ってくる。
◎ Windows用のバイナリもあるらしい。 :
以下で、Windows用の tree.exe が公開されてた。バージョンはちょっと古いっぽいけど。
_Tree for Windows
tree.com ではなくて tree.exe で実行すればいい。Windows10 x64上で試してみたら、ちゃんと動いてくれた。ただ、日本語ファイル名についてはおかしな表示になる。
他にも色々選択肢があるっぽい?
_how do I add the 'tree' command to git-bash on Windows? - Super User
_Tree for Windows
tree.com ではなくて tree.exe で実行すればいい。Windows10 x64上で試してみたら、ちゃんと動いてくれた。ただ、日本語ファイル名についてはおかしな表示になる。
他にも色々選択肢があるっぽい?
_how do I add the 'tree' command to git-bash on Windows? - Super User
[ ツッコむ ]
2017/11/06(月) [n年前の日記]
#1 [lua][love2d] love2dでタイルマップの表示その2
love2dでタイルマップBGを表示できるかどうか実験中。昨日は表示までできたけど、スクロールはどうするのかなと。
色々試して、こんな感じに。Windows10 x64 と Raspberry Pi Zero W、love2d 0.10.2上で動作確認した。
色々試して、こんな感じに。Windows10 x64 と Raspberry Pi Zero W、love2d 0.10.2上で動作確認した。
◎ 使用画像とマップデータ。 :
自作した、
_Tiled Map Editor
用のデータは以下。License : CC0 / Public Domain ってことで。
_tile01.png
_mecha_bg_map.tmx
love2d + _sti (Simple-Tiled-Implementation) で読み込むためのデータは以下。
_mecha_bg_map.lua
_tile01.png
_mecha_bg_map.tmx
love2d + _sti (Simple-Tiled-Implementation) で読み込むためのデータは以下。
_mecha_bg_map.lua
◎ ソース。 :
ソースは以下。動作には、
_sti(Simple-Tiled-Implementation)
が必要。
_conf.lua
_main.lua
実行の仕方は、テキトーなフォルダを作成して、conf.lua、main.lua、mecha_bg_map.lua、tile01.png と、stiフォルダを入れて、「love フォルダ名」で実行。
_conf.lua
function love.conf(t) t.window.title = "Tilemap Test 03" t.window.width = 1280 t.window.height = 720 t.window.vsync = true t.console = true -- t.window.fullscreen = true -- t.window.fullscreentype = "exclusive" end
_main.lua
-- tilemap test 03 local sti = require "sti" local scroll_type function love.load() -- init -- set filter love.graphics.setDefaultFilter("nearest", "nearest") -- set canvas size scr_w = 640 scr_h = 480 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 tilemap map = sti("mecha_bg_map.lua") map.getGidByPixel = function(self, x, y, layerindex) local tilex, tiley = self:convertPixelToTile(math.floor(x), math.floor(y)) tilex = math.floor(tilex) tiley = math.floor(tiley) local layer = map.layers[layerindex] local tilew = layer.width local tileh = layer.height local gid = -2 if tilex >= 0 and tiley >= 0 and tilex < tilew and tiley < tileh then local tile = layer.data[tiley + 1][tilex + 1] if tile == nil then gid = -1 else gid = tile.gid end end return gid end scroll_type = 2 layers = {} for i,layer in ipairs(map.layers) do -- print(i, layer.name) layers[i] = layer end -- init bg position tx_start = 0 ty_start = 0 tx = tx_start ty = ty_start gid = 0 -- framerate steady min_dt = 1 / 60 next_time = love.timer.getTime() end function love.update(dt) -- update next_time = next_time + min_dt map:update(dt) -- keyboard check local speed = 160 * dt local kd = love.keyboard.isDown if kd("left") or kd("a") then tx = tx - speed elseif kd("right") or kd("d") then tx = tx + speed end if kd("up") or kd("w") then ty = ty - speed elseif kd("down") or kd("s") then ty = ty + speed end if kd("r") then tx = tx_start ty = ty_start end if scroll_type == 0 then map.layers["bg_a"].x = 0 map.layers["bg_a"].y = 0 map.layers["bg_b"].x = 0 map.layers["bg_b"].y = 0 elseif scroll_type == 1 then layers[2].x = -tx layers[2].y = -ty layers[1].x = -tx / 2 layers[1].y = -ty / 2 elseif scroll_type == 2 then map.layers["bg_a"].x = -tx map.layers["bg_a"].y = -ty map.layers["bg_b"].x = -tx / 4 map.layers["bg_b"].y = -ty / 4 end -- get mouse position local mx, my = love.mouse.getPosition() mx = (mx - scr_ofsx) / scr_scale my = (my - scr_ofsy) / scr_scale -- get tile gid mx = mx + tx my = my + ty gid = map:getGidByPixel(mx, my, "bg_a") end function love.draw() -- set canvas love.graphics.setCanvas(canvas) -- draw BG color love.graphics.setColor(0, 0, 0) love.graphics.rectangle("fill", 0, 0, scr_w, scr_h) -- draw tilemap BG love.graphics.setColor(255, 255, 255) if scroll_type == 0 then map:draw(-tx, -ty) elseif scroll_type == 1 then for i, layer in ipairs(layers) do map:drawLayer(layer) end elseif scroll_type == 2 then map:draw() end -- unset canvas love.graphics.setCanvas() -- draw canvas to window love.graphics.setColor(255, 255, 255) love.graphics.draw(canvas, scr_ofsx, scr_ofsy, 0, scr_scale, scr_scale) love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 10, 10) love.graphics.print("tx = "..tostring(tx), 10, 40) love.graphics.print("ty = "..tostring(ty), 10, 60) love.graphics.print("C : scroll type = "..tostring(scroll_type), 10, 80) love.graphics.print("R : reset", 10, 100) love.graphics.print("ESC : exit", 10, 120) love.graphics.print("gid = "..tostring(gid), 10, 160, 0, 2.0, 2.0) if love.system.getOS() == "Windows" then -- wait local cur_time = love.timer.getTime() if next_time <= cur_time then next_time = cur_time else love.timer.sleep(next_time - cur_time) end end end function love.keypressed(key, isrepeat) -- ESC to exit if key == "escape" then love.event.quit() end if key == "c" then scroll_type = (scroll_type + 1) % 3 end end
- カーソルキー or WASDキーでスクロール。
- Rキーで座標を初期化。
- Cキーで、パララックスの有無の切り替え。
- マウスカーソル位置のタイル番号が表示される。
実行の仕方は、テキトーなフォルダを作成して、conf.lua、main.lua、mecha_bg_map.lua、tile01.png と、stiフォルダを入れて、「love フォルダ名」で実行。
◎ 少し解説。 :
Tiled マップエディタで作成するマップデータには、複数のレイヤーを含めることができる。
全レイヤーを同じ表示位置でスクロールさせてもいいのなら、描画時に以下を指定するだけで済む。
各レイヤーの情報にアクセスしたいなら、map.layers["レイヤー名"] でアクセスできる。
各レイヤー(タイルレイヤー)は、以下のような値を持ってる。
例えば、各レイヤーの表示位置を別々にして、パララックス(視差効果。いわゆる多重スクロール)をしたいなら、以下のように書ける。
local tilex, tiley = map:convertPixelToTile(x, y) を呼べば、x,yのピクセル座標から、タイル位置を求めることができる。戻り値は小数点以下の値も含んでいるので、math.floor() を使って小数点以下切り捨てをしてから値を使うことになると思う。
タイルマップレイヤーのデータ部分(タイル番号がずらずら並んでる部分)にアクセスしたいなら、以下のような記述になる。
例えば、
タイルレイヤー上の空白部分は、nil で示されているので、
上記のソースでは、以下の部分がタイル番号を取得するメソッドになってる。
全レイヤーを同じ表示位置でスクロールさせてもいいのなら、描画時に以下を指定するだけで済む。
local sti = require "sti" function love.load() map = sti("mecha_bg_map.lua") end function love.update(dt) map:update(dt) end function love.draw() map:draw(表示位置x, 表示位置y) end
各レイヤーの情報にアクセスしたいなら、map.layers["レイヤー名"] でアクセスできる。
各レイヤー(タイルレイヤー)は、以下のような値を持ってる。
- name : レイヤー名
- x : 表示位置 x
- y : 表示位置 y
- width : 横方向のタイル個数
- height : 縦方向のタイル個数
例えば、各レイヤーの表示位置を別々にして、パララックス(視差効果。いわゆる多重スクロール)をしたいなら、以下のように書ける。
map.layers["hoge"].x = -200 map.layers["hoge"].y = -400 map.layers["fuga"].x = -100 map.layers["fuga"].y = -200このように各レイヤーの表示位置を変更しておけば、描画時は map:draw() を呼ぶだけで済む。map:draw(x, y) のように書かなくていい。
local tilex, tiley = map:convertPixelToTile(x, y) を呼べば、x,yのピクセル座標から、タイル位置を求めることができる。戻り値は小数点以下の値も含んでいるので、math.floor() を使って小数点以下切り捨てをしてから値を使うことになると思う。
タイルマップレイヤーのデータ部分(タイル番号がずらずら並んでる部分)にアクセスしたいなら、以下のような記述になる。
map.layers["レイヤー名"].data[tiley+1][tilex+1]
例えば、
local gid = map.layers["hoge"].data[1][1].gidと書けば、「hogeという名前のレイヤーの、タイル位置 (0, 0) のタイル番号」を取得できる。Luaの配列は、えてして0ではなく1から始まる点に注意。
タイルレイヤー上の空白部分は、nil で示されているので、
map.layers["hoge"].data[1][1].gidでタイル番号を取得しようとして、そこが空白だったりすると、nil から .gid を取得しようとしてエラーになってしまう。なので、一旦 map.layers["hoge"].data[1][1] が nil かどうかを調べて、nil なら空白扱いに、nil じゃなければ .gid で取得、といった処理を書かないといけない。
上記のソースでは、以下の部分がタイル番号を取得するメソッドになってる。
map.getGidByPixel = function(self, x, y, layerindex) local tilex, tiley = self:convertPixelToTile(math.floor(x), math.floor(y)) tilex = math.floor(tilex) tiley = math.floor(tiley) local layer = map.layers[layerindex] local tilew = layer.width local tileh = layer.height local gid = -2 if tilex >= 0 and tiley >= 0 and tilex < tilew and tiley < tileh then local tile = layer.data[tiley + 1][tilex + 1] if tile == nil then gid = -1 else gid = tile.gid end end return gid end
◎ 参考ページ。 :
[ ツッコむ ]
2017/11/07(火) [n年前の日記]
#1 [anime] ライダーエグゼイド最終回とライダービルド1話、2話を視聴
録画したままだったソレをようやく視聴。
エグゼイドは…なんだか脚本面が凄かったなと…。ずっと少年漫画ノリが続いたというか…。先の展開が全然読めない作品だったなと。自称・神のキャラも良かった…。
ビルド1話は最後のバイク走行シーンでビックリ。よくまあこんな映像作れるなあ…。そういえば1〜2話は田崎監督で、個人的には嬉しいなと。
2話もなんだかすごいところをバイクで走ってる…。デカイのも出てきた…。力入ってるなあ…。
ビルドの壁設定は、進撃の巨人からのインスパイアだろうか…。学者設定は、学者さんが主役らしいドラマがヒットしてたから、そこから発想、なのかな。何にせよ、ライダーシリーズでは見たことない設定なのでイイ感じ、かもしれず。
変身カットが興味深い。人物の前後に複雑な3DCGが入るあたりどうやってるのかなと…。いや、今までもそういうカットがあっただろうけど、改めて考えてみると作り方について悩むというか。1コマずつ手作業で切り抜きとかやってられないだろうし、人物だけグリーンバックの前で撮影、とかだろうか…。別スタジオで撮影するとなるとロケ場所と照明を合わせるのが大変そうだし、であればロケ場所で人物の後ろに大きなグリーンバックを運んできて…。でもそれだとカメラを動かせなくなるか…。背景と人物で2回撮影しないといけないし…。何かノウハウがあるんだろうな…。まさか奥行きも取得できるカメラを導入してるとか…。
などと思って見ていたら、2話で簡易タイプの変身カットが。使い分けしていくのかな…。場所によってはあんな大掛かりな変身できないだろうし、一瞬で変身するカットも必要になるだろうし…。
エグゼイドは…なんだか脚本面が凄かったなと…。ずっと少年漫画ノリが続いたというか…。先の展開が全然読めない作品だったなと。自称・神のキャラも良かった…。
ビルド1話は最後のバイク走行シーンでビックリ。よくまあこんな映像作れるなあ…。そういえば1〜2話は田崎監督で、個人的には嬉しいなと。
2話もなんだかすごいところをバイクで走ってる…。デカイのも出てきた…。力入ってるなあ…。
ビルドの壁設定は、進撃の巨人からのインスパイアだろうか…。学者設定は、学者さんが主役らしいドラマがヒットしてたから、そこから発想、なのかな。何にせよ、ライダーシリーズでは見たことない設定なのでイイ感じ、かもしれず。
変身カットが興味深い。人物の前後に複雑な3DCGが入るあたりどうやってるのかなと…。いや、今までもそういうカットがあっただろうけど、改めて考えてみると作り方について悩むというか。1コマずつ手作業で切り抜きとかやってられないだろうし、人物だけグリーンバックの前で撮影、とかだろうか…。別スタジオで撮影するとなるとロケ場所と照明を合わせるのが大変そうだし、であればロケ場所で人物の後ろに大きなグリーンバックを運んできて…。でもそれだとカメラを動かせなくなるか…。背景と人物で2回撮影しないといけないし…。何かノウハウがあるんだろうな…。まさか奥行きも取得できるカメラを導入してるとか…。
などと思って見ていたら、2話で簡易タイプの変身カットが。使い分けしていくのかな…。場所によってはあんな大掛かりな変身できないだろうし、一瞬で変身するカットも必要になるだろうし…。
[ ツッコむ ]
2017/11/08(水) [n年前の日記]
#1 [ubuntu] サブPCにインストールしてあったUbuntuをアップグレード
TV代わりのディスプレイを置いてあるスチールラック、に入ってる薄型ケースのPCに、Ubuntu 16.04 LTS を入れてあったのだけど。なんとなく Ubuntu 17.04、17.10にアップグレードしてみようかなと。
てなわけでアップグレード作業を始めてみたものの、2時間経っても終わらない…。2.5インチHDDを載せてるから遅いのだろうか。CPU は AMD A6-3500だからそれほど遅くは…。いや…スペックを調べてみたら、遅いほうか…。
6時間ぐらいかかってアップグレードできた。が、無線LAN子機が無反応になった…。こりゃ困った。
面倒臭いから全部消して入れ直すか。こんなことなら 16.04 LTSのままにしておけばよかった。
てなわけでアップグレード作業を始めてみたものの、2時間経っても終わらない…。2.5インチHDDを載せてるから遅いのだろうか。CPU は AMD A6-3500だからそれほど遅くは…。いや…スペックを調べてみたら、遅いほうか…。
6時間ぐらいかかってアップグレードできた。が、無線LAN子機が無反応になった…。こりゃ困った。
面倒臭いから全部消して入れ直すか。こんなことなら 16.04 LTSのままにしておけばよかった。
[ ツッコむ ]
#2 [dtm] FL Studio を 12.5.1.5 にアップデート
Windows10 x64上で FL Studio を 12.5.1.5 にアップデート。
インストーラを起動したら不正終了。これはまたアレかな、と想像して、MS-IME を Google IME に変更したら起動してくれた。…この症状、ずっと修正されないなあ。まあ、Image-Line が日本語版Windowsを用意できるわけないだろうから、どうせ報告したって「ウチでは動いてる」と言われるのがオチだろうけど。
インストーラを起動したら不正終了。これはまたアレかな、と想像して、MS-IME を Google IME に変更したら起動してくれた。…この症状、ずっと修正されないなあ。まあ、Image-Line が日本語版Windowsを用意できるわけないだろうから、どうせ報告したって「ウチでは動いてる」と言われるのがオチだろうけど。
[ ツッコむ ]
2017/11/09(木) [n年前の日記]
#1 [ubuntu] 薄型PCにインストールした Linux Mint 18.2 を色々設定中
昨日、薄型PCの Ubuntu 16.04 LTS を 17.04 や 17.10 にアップグレードしたら無線LANが反応しなくなったので、面倒くさいから Linux Mint 18.2 cinnamon版をクリーンインストールしてしまったり。そのあたりの作業をメモ。
/etc/ssh/sshd_config の ClientAliveInterval を設定。
_ssh 接続をタイムアウトしないようにする - maruko2 Note.
共有フォルダを作っておく。
設定ファイルを修正。
testparm と打って設定ファイルにエラーがないことを確認してから samba再起動。
sambaにユーザを追加してパスワードを設定。
Windows機から、ping 薄型PCのホスト名、と打って反応が返ってきたらインストールできてる。
ただ、コレをやると、ソフトウェアリソースを起動してアレコレした際に、「〜による署名は弱い digestアルゴリズム(SHA1)を使用しています」という警告が出てしまう。なんでも、Ubuntu 16.04以降は、gpg鍵なるものをSHA2にしたそうで、しかし各リポジトリは相変わらずSHA1のままだから、警告が出てしまうらしい。
_Linux Mint Japan 日本語フォーラム ・ トピック - パケットマネジャーの更新について
linuxmint-jp だか _Linux Mint Japan だかが対応してくれないと解決しないらしいけど、今年の頭から放置状態っぽい。
以下で反映。
grub側でも指定。
grubの修正内容を反映。
~/.vnc/xstartup を弄って色々試してるけど、どうも xfce を正常に起動できない…。いや、起動はするのだけど、毎回「初めてのアクセスだからパネル設定はどうする? デフォルトにする? 空にする?」と尋ねてきて初期化されてしまう。デスクトップ画面のソレをそのまま使いたいのだけど…。
まあ、以下を実行して、ホスト名:5900 にアクセスすれば目的は果たせるのだけど。
一番最後に
コレが mate なら問題なさそうな感じで動くのだけど。
xfceを利用しようとすると画面がおかしくなるのは、どうもバグっぽい気配が。
_How do I get the Mint xfce desktop via VNC? - Linux Mint Forums
◎ USBメモリからインストール。 :
_Download - Linux Mint
から、linuxmint-18.2-cinnamon-64bit.iso をDL。今回は Torrent とやらでDLしてみた。
microSDカードリーダ BUFFALO BSCRMSDCBK + microSDHC Team 8GB CLASS10 (KSY008G0MC28PI) に、UNetbootin を使ってインストール。
薄型PCのUSB端子に差して起動。薄型PCは、CPU : AMD A6-3500(3コア, 2.1GHz (最大2.4GHz))、M/B : ASUS F1A75-M。起動デバイスの優先順位を変えてもHDDから起動してしまって悩んだり。優先順位の設定を全部無効にしたら、USBメモリ(というか、microSDカードリーダ)から起動してくれた。
HDD内を全消去する形でインストール。途中で、UEFIブートが云々と尋ねてきたけど…。そこらへんよく分からないので、とりあえずインストールしてしまった。
microSDカードリーダ BUFFALO BSCRMSDCBK + microSDHC Team 8GB CLASS10 (KSY008G0MC28PI) に、UNetbootin を使ってインストール。
薄型PCのUSB端子に差して起動。薄型PCは、CPU : AMD A6-3500(3コア, 2.1GHz (最大2.4GHz))、M/B : ASUS F1A75-M。起動デバイスの優先順位を変えてもHDDから起動してしまって悩んだり。優先順位の設定を全部無効にしたら、USBメモリ(というか、microSDカードリーダ)から起動してくれた。
HDD内を全消去する形でインストール。途中で、UEFIブートが云々と尋ねてきたけど…。そこらへんよく分からないので、とりあえずインストールしてしまった。
◎ 各種設定。 :
以下の記事を参考にして色々作業。
_Linux Mint 18: インストール後やっておくべき 20 選 | 221B Baker Street
上記の記事で掲載されてる内容をそのままやってるだけだけど、リンク先が消えると困るので一応メモ。
_Linux Mint 18: インストール後やっておくべき 20 選 | 221B Baker Street
上記の記事で掲載されてる内容をそのままやってるだけだけど、リンク先が消えると困るので一応メモ。
◎ SSHでアクセスできるようにする。 :
sudo aptitude install openssh-server sudo aptitude instal ssh
/etc/ssh/sshd_config の ClientAliveInterval を設定。
ClientAliveInterval 15
_ssh 接続をタイムアウトしないようにする - maruko2 Note.
◎ byobuをインストール。 :
どうも無線LANがブチブチ切れるので、対策の一つとしてbyobuをインストール。
byobu で実行。万が一回線が切れても、次回また byobu を実行すれば以前のプロセスが復活できる…らしい。
sudo aptitude install byobu
byobu で実行。万が一回線が切れても、次回また byobu を実行すれば以前のプロセスが復活できる…らしい。
◎ 起動時のスプラッシュ画面を非表示に。 :
起動時はテキストがずらずらと表示されるほうが好み。
sudo vi /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTの行で、"noquiet nosplash" を指定。
◎ 無線LAN子機 IO-DATA WN-G300UA のドライバを変更。 :
IO-DATA WN-G300UA は RTL8192CU チップ搭載品で、一応 Ubuntu等に差せば認識はしてくれるのだけど、ドライバがおかしいそうで、接続がブチブチ切れる。github で公開されてるソレを導入して改善させる。
_pvaret/rtl8192cu-fixes: Realtek 8192 chipset driver, ported to kernel 3.11.
_RTL8192cu fix, works on recent Linux kernels (3.x and 4.x)
iwconfig と打てば、無線LAN子機の状態が分かる。デフォルトでは 150Mb/s と表示されてたけど、上記作業を行った 300Mb/s と表示された。
ただ、コレでも時々切れる。この製品、ちとダメダメだと思います。
_pvaret/rtl8192cu-fixes: Realtek 8192 chipset driver, ported to kernel 3.11.
_RTL8192cu fix, works on recent Linux kernels (3.x and 4.x)
sudo apt-get update sudo apt-get install git linux-headers-generic build-essential dkms git clone https://github.com/pvaret/rtl8192cu-fixes.git sudo dkms add ./rtl8192cu-fixes sudo dkms install 8192cu/1.10 sudo depmod -a sudo cp ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/ sudo reboot
iwconfig と打てば、無線LAN子機の状態が分かる。デフォルトでは 150Mb/s と表示されてたけど、上記作業を行った 300Mb/s と表示された。
ただ、コレでも時々切れる。この製品、ちとダメダメだと思います。
◎ sambaをインストール。 :
sudo aptitude install samba
共有フォルダを作っておく。
sudo mkdir /home/pub sudo chown nobody:nogroup /home/pub sudo chmod 777 /home/pub
設定ファイルを修正。
sudo vi /etc/samba/smb.conf
[global] dos charset = CP932 unix charset = UTF-8 workgroup = (Windowsネットワークのワークグループ名を指定) server string = %h server (Samba, Ubuntu, Core2Duo-ATX) domain master = no local master = no preferred master = no os level = 0 guest account = nobody unix password sync = no (中略) [homes] comment = Home Directories browseable = no create mask = 0700 directory mask = 0700 [pub] path = /home/pub comment = Public Space for Everyone read only = no public = yes force create mode = 0666 force directory mode = 0777 guest ok = yes guest only = yes hosts allow = 192.168.1.
testparm と打って設定ファイルにエラーがないことを確認してから samba再起動。
systemctl restart smbd systemctl restart nmbd
sambaにユーザを追加してパスワードを設定。
sudo smbpasswd -a ユーザ名
Windows機から、ping 薄型PCのホスト名、と打って反応が返ってきたらインストールできてる。
◎ フォントをインストール。 :
sudo aptitude install fonts-mplus fonts-migmix fonts-mmcedar fonts-umeplus fonts-motoya-l-maruberi fonts-motoya-l-cedar fonts-horai-umefont fonts-ipafont-gothic fonts-ipafont-mincho
◎ 壁紙をインストール。 :
sudo apt-get install mint-backgrounds-* ubuntu-wallpapers-* ubuntustudio-wallpapers xubuntu-community-wallpapers-xenial
◎ 日本語化。 :
wget -q http://packages.linuxmint-jp.net/linuxmint-ja-archive-keyring.gpg -O- | sudo apt-key add - sudo wget http://packages.linuxmint-jp.net/sources.list.d/linuxmint-ja.list -O /etc/apt/sources.list.d/linuxmint-ja.list sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install mint-gnome-ja --install-recommends sudo apt-get install fcitx-mozc
ただ、コレをやると、ソフトウェアリソースを起動してアレコレした際に、「〜による署名は弱い digestアルゴリズム(SHA1)を使用しています」という警告が出てしまう。なんでも、Ubuntu 16.04以降は、gpg鍵なるものをSHA2にしたそうで、しかし各リポジトリは相変わらずSHA1のままだから、警告が出てしまうらしい。
_Linux Mint Japan 日本語フォーラム ・ トピック - パケットマネジャーの更新について
linuxmint-jp だか _Linux Mint Japan だかが対応してくれないと解決しないらしいけど、今年の頭から放置状態っぽい。
◎ Google Chromeのインストール。 :
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee -a /etc/apt/sources.list && wget https://dl.google.com/linux/linux_signing_key.pub && sudo apt-key add linux_signing_key.pub && sudo apt-get update && sudo apt install google-chrome-stable
◎ コーデックのインストール。 :
sudo apt-get install ubuntu-restricted-extras libavcodec-extra sudo apt-get install libdvd-pkg
◎ ハードウェア情報を調べる。 :
sudo apt-get install hardinfo
◎ blenderをインストール。 :
sudo add-apt-repository ppa:thomas-schiex/blender sudo apt update && sudo apt install blender
◎ grub-customizerをインストール。 :
sudo add-apt-repository ppa:danielrichter2007/grub-customizer sudo apt-get update sudo apt-get install grub-customizer
◎ mint cinnamon から mint mate や mint xfce に変更。 :
sudo aptitude install mint-meta-mate
sudo aptitude install mint-meta-xfce
◎ シャットダウン時に待たされる症状を緩和。 :
以下を参考に作業。
_【Ubuntu】シャットダウンが遅い | Jの戯言
以下を追加。(コメントアウトされてるので有効化して秒数を変更)
_【Ubuntu】シャットダウンが遅い | Jの戯言
sudo vi /etc/systemd/system.conf
以下を追加。(コメントアウトされてるので有効化して秒数を変更)
DefaultTimeoutStopSec=10s
◎ IPv6無効化。 :
sudo vi /etc/sysctl.conf以下を追加。
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
以下で反映。
sudo sysctl -p
grub側でも指定。
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1 noquiet nosplash"
grubの修正内容を反映。
sudo update-grub
◎ vncをインストール。 :
sudo aptitude install vnc4server sudo aptitude install x11vnc
vncserver :1 vncserver -kill :1
~/.vnc/xstartup を弄って色々試してるけど、どうも xfce を正常に起動できない…。いや、起動はするのだけど、毎回「初めてのアクセスだからパネル設定はどうする? デフォルトにする? 空にする?」と尋ねてきて初期化されてしまう。デスクトップ画面のソレをそのまま使いたいのだけど…。
まあ、以下を実行して、ホスト名:5900 にアクセスすれば目的は果たせるのだけど。
x0vncserver -display :0 -passwordfile ~/.vnc/passwd
一番最後に
startxfce4 &と書いてあれば xfce4 になるのとちゃうんか…。
コレが mate なら問題なさそうな感じで動くのだけど。
mate-session &Linux Mint はmateが標準らしいから、ソレに合わせておくのが無難なのかな?
xfceを利用しようとすると画面がおかしくなるのは、どうもバグっぽい気配が。
_How do I get the Mint xfce desktop via VNC? - Linux Mint Forums
[ ツッコむ ]
2017/11/10(金) [n年前の日記]
#1 [ubuntu] Linux Mint 18.2にLXDEをインストールしてみたり
薄型PCにインストールした Linux Mint 18.2 Cinnamon上に、LXDEをインストールしてみたり。vncでアクセスする際にLXDEを使えば設定が楽かなと。
何を入れればいいのかよく分からんけど、とりあえずググって各記事を眺めて、以下をインストール。
~/.vnc/xstartup は以下のような感じに。日本語入力には ibus-anthy を使う。
vncを起動してアクセスしてみたら画面が表示された。が、ログを見るとエラーが出ているような。
フォントが足りないのかなと以下を入れてみた。
ググってみたところ、/etc/X11/xorg.conf でフォントの場所が指定されてるので、存在しない場所は該当行をコメントアウトすべし、と説明されてたけど…。Linux Mint 18.2 (Ubuntu 16.04) は、xorg.conf が無い。するとどこでフォントの場所が指定されているのか…。
フォント自体は、/usr/share/fonts/X11/ にあるようだけど…。リンクを張って各フォルダがあるように見せかけてみる。
何を入れればいいのかよく分からんけど、とりあえずググって各記事を眺めて、以下をインストール。
sudo aptitude install lxde lxde-common lxsession-logout lxsession-default-app lxtask
~/.vnc/xstartup は以下のような感じに。日本語入力には ibus-anthy を使う。
#!/bin/sh # Uncomment the following two lines for normal desktop: #unset SESSION_MANAGER #unset DBUS_SESSION_BUS_ADDRESS #exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey # export XKL_XMODMAP_DISABLE=1 export GTK_IM_MODULE=ibus export XMODIFIERS=@im=ibus export QT_IM_MODULE=ibus ibus-daemon -dxr # x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & # x-window-manager & # exec xfce4-session & # startxfce4 & # mate-session & lxsession -s LXDE & vncconfig -iconic &
vncを起動してアクセスしてみたら画面が表示された。が、ログを見るとエラーが出ているような。
$ cat ~/.vnc/hoge\:1.log (中略) error opening security policy file /etc/X11/xserver/SecurityPolicy Could not init font path element /usr/X11R6/lib/X11/fonts/Type1/, removing from list! Could not init font path element /usr/X11R6/lib/X11/fonts/Speedo/, removing from list! Could not init font path element /usr/X11R6/lib/X11/fonts/misc/, removing from list! Could not init font path element /usr/X11R6/lib/X11/fonts/75dpi/, removing from list! Could not init font path element /usr/X11R6/lib/X11/fonts/100dpi/, removing from list! ** Message: main.vala:99: Session is LXDE ** Message: main.vala:100: DE is (null) ** Message: main.vala:110: No desktop environnement set, fallback to LXDE ** Message: main.vala:131: log directory: /home/mieki256/.cache/lxsession/LXDE ** Message: main.vala:132: log path: /home/mieki256/.cache/lxsession/LXDE/run.log
フォントが足りないのかなと以下を入れてみた。
sudo aptitude install xfonts-100dpi xfonts-100dpi-transcoded xfonts-75dpi xfonts-75dpi-transcoded xfonts-intl-japanese xfonts-intl-japanese-big xfonts-mplus xfonts-naga10 xfonts-shinonomeログに変化は無かった。
ググってみたところ、/etc/X11/xorg.conf でフォントの場所が指定されてるので、存在しない場所は該当行をコメントアウトすべし、と説明されてたけど…。Linux Mint 18.2 (Ubuntu 16.04) は、xorg.conf が無い。するとどこでフォントの場所が指定されているのか…。
フォント自体は、/usr/share/fonts/X11/ にあるようだけど…。リンクを張って各フォルダがあるように見せかけてみる。
sudo mkdir /usr/X11R6 sudo mkdir /usr/X11R6/lib sudo mkdir /usr/X11R6/lib/X11 sudo ln -s /usr/share/fonts/X11 /usr/X11R6/lib/X11/fonts*/speedo 以外のエラーは消えてくれた。
[ ツッコむ ]
#2 [dtm] FL StudioのVSTスキャンが遅い
先日インストールした、FL Studio 12.5.1.5 を起動して VSTのスキャンを始めてみたら、終わる気配が無くて。
どうもVSTの詳細情報を取得するような仕様になったことで、時間がかかるようになったらしい…?
どうもVSTの詳細情報を取得するような仕様になったことで、時間がかかるようになったらしい…?
[ ツッコむ ]
#3 [movie] 「G.I.ジョー」実写映画版を視聴
録画したまま見れてなかったのだけどようやく視聴。
こういう設定だったのか…。いや、映画用に作った設定なのだろうけど。
映像は凄かった。3DCG万歳。ただ、砂漠の上で飛行機が飛んでる図は、なんだかリアルさがないというか…。飛行機が鏡面仕上げっぽいソレだからウソっぽく見えたのだろうか。まあ、全編ウソっぽい設定だらけなので、気にしてもアレだけど。
こういう設定だったのか…。いや、映画用に作った設定なのだろうけど。
映像は凄かった。3DCG万歳。ただ、砂漠の上で飛行機が飛んでる図は、なんだかリアルさがないというか…。飛行機が鏡面仕上げっぽいソレだからウソっぽく見えたのだろうか。まあ、全編ウソっぽい設定だらけなので、気にしてもアレだけど。
[ ツッコむ ]
2017/11/11(土) [n年前の日記]
#1 [lua][love2d] love2dで音を鳴らそうとしているけれど
love2dを使ってサウンドを再生できそうか試しているのだけど。
Windows10 x64 + love2d ならスンナリと ogg が再生できたものの、Raspberry Pi Zero W で試すと、再生状態を調べる or 再生しようとするだけでアプリが落ちてしまう。うーん。
gopherrun が mp3 を再生できているのだから、SDL2のビルドは問題ないのでは、と思っているけど…。いや待て。考えてみたら gopherrun が使ってるのは SDL2_mixer なのかな…。
Windows10 x64 + love2d ならスンナリと ogg が再生できたものの、Raspberry Pi Zero W で試すと、再生状態を調べる or 再生しようとするだけでアプリが落ちてしまう。うーん。
gopherrun が mp3 を再生できているのだから、SDL2のビルドは問題ないのでは、と思っているけど…。いや待て。考えてみたら gopherrun が使ってるのは SDL2_mixer なのかな…。
[ ツッコむ ]
2017/11/12(日) [n年前の日記]
#1 [lua][love2d] love2dで音を鳴らせるのか動作確認中
Ubuntu 16.04 LTSをインストールしてあるサブPC上で love2d を動かしてみたけど、そちらだと mp3 も ogg も鳴るなと…。いや、wav だけは変なエラーを出して鳴らないけど。なんでや。
何にせよ、Rspberry Pi上の love2d のサウンド関係がおかしい、ということになりそうだなと。だって Ubuntu上では音が鳴るのだし。
何にせよ、Rspberry Pi上の love2d のサウンド関係がおかしい、ということになりそうだなと。だって Ubuntu上では音が鳴るのだし。
◎ VirtualBoxx + Debian stretch 上でも動作確認。 :
raspbian は Debian を元にしてるらしいので、Ubuntu より Debian で動作確認したほうがいいのかなと思えてきて。ということで、VirtualBox上で Debian stretch をインストールして動作確認。
_Debian インストールCD/DVDイメージ - cdimage.debian.or.jp から、「PC/サーバー用DVDイメージ (64ビット)」、debian-9.2.1-amd64-DVD-1.iso をDL。MATE と xfce をインストール。
Debian stretch上だと、wav も mp3 も ogg も鳴ってくれた。
するとどうして Ubuntu上で wav が鳴らないのだろう…。
_Debian インストールCD/DVDイメージ - cdimage.debian.or.jp から、「PC/サーバー用DVDイメージ (64ビット)」、debian-9.2.1-amd64-DVD-1.iso をDL。MATE と xfce をインストール。
Debian stretch上だと、wav も mp3 も ogg も鳴ってくれた。
するとどうして Ubuntu上で wav が鳴らないのだろう…。
◎ VirtualBox上ではOpenGL関係のエラーが出る。 :
VirtualBox上で love2d を動かすと、おそらく OpenGL関係のエラーが出るようで。love と打って実行しただけでも以下のメッセージが表示される。
VMware上で試してみるか…。VirtualBox上のソレは削除。
OpenGL Warning: glXChooseVisual: bad attrib=0x20b2, ignoringまあ、警告だから、気にしなくてもいいのかな…。でも気になる…。
VMware上で試してみるか…。VirtualBox上のソレは削除。
[ ツッコむ ]
2017/11/13(月) [n年前の日記]
#1 [pc][love2d] VMwareにDebian stretchをインストール
動作確認用として、Debian stretch を VMware上にインストールしてみた。環境は Windows10 x64 + VMware。
quiet を、noquiet nosplash に修正して更新。
/sbin/ifconfig で実行。
ip addr でもIPアドレスは確認できる。
自動起動に以下を追加。しようと思ったら追加されてた。
しかしコレだと古いバージョンがインストールされる。最新版をインストールしたい。
SDL2関係をインストール。
_Building LOVE (日本語) - LOVE に従って作業。
love2dの動作確認をしてみたけれど、サウンドは、wav、ogg、mp3、どれも鳴ってくれた。
◎ Debianをインストール。 :
_Debian インストールCD/DVDイメージ - cdimage.debian.or.jp
から、「PC/サーバー用DVDイメージ (64ビット)」、debian-9.2.1-amd64-DVD-1.iso をDL。
VMware上で新規仮想マシンを作成。メモリは2GB。仮想HDDのサイズは16GB。ちなみに、Debianの最低推奨スペックは10GBらしい。
「Graphical install」ではなく「Install」を選択して作業を進めていった。途中の tasksel 画面で、xfce、sshサーバを選択。プリントサーバを非選択。
インストール終了後、再起動したらrootでログイン。設定をしていく。
VMware上で新規仮想マシンを作成。メモリは2GB。仮想HDDのサイズは16GB。ちなみに、Debianの最低推奨スペックは10GBらしい。
「Graphical install」ではなく「Install」を選択して作業を進めていった。途中の tasksel 画面で、xfce、sshサーバを選択。プリントサーバを非選択。
インストール終了後、再起動したらrootでログイン。設定をしていく。
◎ パッケージを最新にする。 :
パッケージを最新に更新。
apt edit-sources または nano /etc/apt/source.list をして、以下を追加。
更新。
ついでに、普段使っていて慣れている aptitude もインストール。
apt edit-sources または nano /etc/apt/source.list をして、以下を追加。
deb http://ftp.jp.debian.org/debian/ stretch main contrib non-free deb-src http://ftp.jp.debian.org/debian/ stretch main contrib non-free
更新。
apt update apt upgrade
ついでに、普段使っていて慣れている aptitude もインストール。
apt install aptitude
◎ sudoの設定。 :
rootになって作業するのはなんだか怖いので、sudo をインストール。
visudo で設定ファイルを編集できる。以下を追加。
apt install sudo
visudo で設定ファイルを編集できる。以下を追加。
ユーザ名 ALL=(ALL) ALL
◎ ビルド用のアレコレをインストール。 :
sudo aptitude install build-essential linux-headers-amd64
◎ VMware用のアレコレをインストール。 :
VMware用のビデオドライバ + クリップボードやファイルの共有を可能にする、open-vm-tools をインストール。
sudo aptitude install open-vm-tools open-vm-tools-dkms open-vm-tools-desktop
◎ 起動時にテキストで情報をずらずらと表示したい。 :
sudo vi /etc/default/grub
quiet を、noquiet nosplash に修正して更新。
sudo update-grub
◎ ifconfigが見当たらない。 :
sudo aptitude install net-tools
/sbin/ifconfig で実行。
ip addr でもIPアドレスは確認できる。
◎ ユーザフォルダ内の各フォルダを日本語名から英語名に変更。 :
sudo apt-get install xdg-user-dirs-gtk LANG=C xdg-user-dirs-gtk-update
◎ サウンド再生用のツールをインストール。 :
sudo aptitude install mpg321 vorbis-tools flac
◎ xscreensaverをインストール。 :
sudo aptitude install xscreensaver xscreensaver-data-extra xscreensaver-gl xscreensaver-gl-extra xscreensaver-screensaver-bsod xscreensaver-screensaver-dizzy xscreensaver-screensaver-webcollage
自動起動に以下を追加。しようと思ったら追加されてた。
xscreensaver -nosplash
◎ 他の作業。 :
ipv6を無効化したり、sambaをインストールしたり。
◎ love2dをインストール。 :
sudo aptitude install love love
しかしコレだと古いバージョンがインストールされる。最新版をインストールしたい。
SDL2関係をインストール。
sudo apt remove love sudo aptitude search sdl2 sudo aptitude install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-net-dev libsdl2-ttf-dev libsdl2-gfx-dev
_Building LOVE (日本語) - LOVE に従って作業。
# sudo apt install liballegro4.4 libdevil1c2 libluajit-5.1-2 libluajit-5.1-common libopenal-data libopenal1 libphysfs1 # sudo aptitude install lua50 lua5.1 lua5.2 lua5.3 luajit sudo aptitude install liblua5.1-dev sudo aptitude install build-essential autotools-dev automake libtool pkg-config libdevil-dev libfreetype6-dev libluajit-5.1-dev libphysfs-dev libsdl2-dev libopenal-dev libogg-dev libvorbis-dev libflac-dev libflac++-dev libmodplug-dev libmpg123-dev libmng-dev libturbojpeg0 libtheora-dev
mkdir packages cd packages wget https://bitbucket.org/rude/love/downloads/love-0.10.2-linux-src.tar.gz tar zxvf love-0.10.2-linux-src.tar.gz cd love-0.10.2 ./configure make sudo make install
love2dの動作確認をしてみたけれど、サウンドは、wav、ogg、mp3、どれも鳴ってくれた。
[ ツッコむ ]
2017/11/14(火) [n年前の日記]
#1 [raspberrypi][lua][love2d] Raspberry Pi Zero W + love2dで音が鳴らせなくてハマっていたり
Raspberry Pi Zero W + love2d で音が鳴らせなくてハマっていたり。環境は、raspbian stretch。
公式リポジトリ版の SDL2 + love2d なら音が鳴るのかなと疑問が湧いたので試してみたのだけど、公式リポジトリ版も音は鳴らなかった。トホホ。
自分でSDL2をビルドする際に、--disable-pulseaudio をつけないでビルドしたら、pulseaudio が無効にならずに音が鳴ってくれるのでは、と期待して外してビルドしてみたけどこれまた変化なし。love2dのビルドまで含めて5時間ぐらいかかったのに…。トホホ。
公式リポジトリ版ですら音が鳴らないということは、どうも raspbian stretch上では love2d も SDL2 も音が鳴らない状態のまま放置されているのでは、という不安がムクムクと。色々ググってみても、どの情報も raspbian stretch の前の版、raspbian jesiie での話ばかりなわけで。
公式リポジトリ版の SDL2 + love2d なら音が鳴るのかなと疑問が湧いたので試してみたのだけど、公式リポジトリ版も音は鳴らなかった。トホホ。
自分でSDL2をビルドする際に、--disable-pulseaudio をつけないでビルドしたら、pulseaudio が無効にならずに音が鳴ってくれるのでは、と期待して外してビルドしてみたけどこれまた変化なし。love2dのビルドまで含めて5時間ぐらいかかったのに…。トホホ。
公式リポジトリ版ですら音が鳴らないということは、どうも raspbian stretch上では love2d も SDL2 も音が鳴らない状態のまま放置されているのでは、という不安がムクムクと。色々ググってみても、どの情報も raspbian stretch の前の版、raspbian jesiie での話ばかりなわけで。
◎ 公式リポジトリ版のSDL2とlove2dのインストール方法。 :
まずは自分でビルドした版をアンインストール。SDL2 や love2d をビルドしたディレクトリに入って。
全部終わったら、公式版をインストール。
公式版はOpenGLを使うことが前提のバイナリになってるので、Raspberry Pi Zero W上で GL driver を有効にして、OpenGLを使えるようにする。公式には、Pi Zero系でGL driverはサポートされてないし、使おうとすると動作が不安定になるけれど、有効にできないわけでもない。
Advanced Oprions -> GL Driver。以下の3つが出てくるので、G1 か G2 を選ぶ。今回、G1を選んだら、aplay hoge.wav ですら音が出なくなったので、G2を選んだ。
Finish を選ぶと「Reboot(再起動)するか?」と尋ねてくるけど「いいえ」を選んで、/boot/config.txt を編集。
以下のように、cma-128 を追加する。
sudo reboot で再起動。OpenGL が有効になった状態で起動してるか動作確認。
音が鳴るか確認。
_R-Pi Troubleshooting - eLinux.org
_とりあえずこれだけ知っておけばなんとかなるRaspberry Piのオーディオ設定 - mattintosh note
で。既に書いたけど、この状態でも love2dで音は鳴らなかった。残念。
sudo make uninstall
全部終わったら、公式版をインストール。
sudo aptitude install libsdl2-2.0-0 libsdl2-dev libsdl2-gfx-1.0-0 libsdl2-gfx-dev libsdl2-image-2.0-0 libsdl2-image-dev libsdl2-mixer-2.0-0 libsdl2-mixer-dev libsdl2-net-2.0-0 libsdl2-net-dev libsdl2-ttf-2.0-0 libsdl2-ttf-dev sudo aptitude install love
公式版はOpenGLを使うことが前提のバイナリになってるので、Raspberry Pi Zero W上で GL driver を有効にして、OpenGLを使えるようにする。公式には、Pi Zero系でGL driverはサポートされてないし、使おうとすると動作が不安定になるけれど、有効にできないわけでもない。
sudo raspi-config
Advanced Oprions -> GL Driver。以下の3つが出てくるので、G1 か G2 を選ぶ。今回、G1を選んだら、aplay hoge.wav ですら音が出なくなったので、G2を選んだ。
G1 GL (Full KMS) OpenGL desktop driver with full KMS G2 GL (Fake KMS) OpenGL desktop driver with fake KMS G3 Legacy Original non-GL desktop driver「 The xxxx KMS GL driver is enabled.」と表示される。
Finish を選ぶと「Reboot(再起動)するか?」と尋ねてくるけど「いいえ」を選んで、/boot/config.txt を編集。
sudo vi /boot/config.txt
以下のように、cma-128 を追加する。
dtoverlay=vc4-fkms-v3d ↓ dtoverlay=vc4-fkms-v3d,cma-128
dtoverlay=vc4-kms-v3d ↓ dtoverlay=vc4-kms-v3d,cma-128
sudo reboot で再起動。OpenGL が有効になった状態で起動してるか動作確認。
glxgearsギアが表示されて、正常な色と、それなりのフレームレートで動いてくれたら、上手く行ってる。
音が鳴るか確認。
aplay hoge.wav鳴らないなら、以下を参考にして設定を見直す。
_R-Pi Troubleshooting - eLinux.org
_とりあえずこれだけ知っておけばなんとかなるRaspberry Piのオーディオ設定 - mattintosh note
で。既に書いたけど、この状態でも love2dで音は鳴らなかった。残念。
◎ retropie-setupを利用しようとしたけれど。 :
_RetroPie/RetroPie-Setup
$ git clone --depth=1 https://github.com/RetroPie/RetroPie-Setup.git $ cd RetroPie-Setup $ sudo ./retropie_setup.sh sdl2 Sorry - Raspbian/Debian Stretch (and newer) is not yet supported on the RPI Distributor ID: Raspbian Description: Raspbian GNU/Linux 9.1 (stretch) Release: 9.1 Codename: stretchraspbian stretch は対応してねえよと言われてしまった…。
[ ツッコむ ]
2017/11/15(水) [n年前の日記]
#1 [raspberrypi][love2d] piloveを試用
Raspberry Pi上で love2d を動かすことに特化した、pilove というSDカードイメージがあるようで。
_PiLove - LOVE on RaspberryPI
もし、コレを使って音が鳴れば、少なくとも Raspberry Pi Zero W + love2d で音が鳴る状態にすることは不可能ではない、てなことぐらいは分かるかもしれないなと思えてきたので試用してみようかなと。
_PiLove - LOVE on RaspberryPI
もし、コレを使って音が鳴れば、少なくとも Raspberry Pi Zero W + love2d で音が鳴る状態にすることは不可能ではない、てなことぐらいは分かるかもしれないなと思えてきたので試用してみようかなと。
◎ インストール方法。 :
公式サイト上には、pilove 0.3 のリンクしかないけれど、
_Index of /downloads
には 0.4 が置いてあったので、pilove 0.4 (pilove-0.4.img.gz)をDL。変更履歴は、
_pilove/changelog.txt
に書いてある。
解凍すると、中には .img ファイルが入ってた。
Windows10 x64 + _Win32 Disk Imager 1.0.0 を使って、.imgファイルを microSDに書き込む。今回は、Team製 8GB の microSDHC に書き込んでみた。
Raspberry Pi Zero W に microSDHC を差して起動。デフォルトユーザ名は sysop。パスワードは posys。
解凍すると、中には .img ファイルが入ってた。
Windows10 x64 + _Win32 Disk Imager 1.0.0 を使って、.imgファイルを microSDに書き込む。今回は、Team製 8GB の microSDHC に書き込んでみた。
Raspberry Pi Zero W に microSDHC を差して起動。デフォルトユーザ名は sysop。パスワードは posys。
◎ love2dの動作確認。 :
/usr/local/games/love-0.10.2/src/love を実行。
パーミッションが違うと怒られた。覗いてみたら、所有者について sysop と root が混在してる。とりあえず変更してみる。
一々場所を指定して起動するのは面倒臭いので alias に登録。~/.bashrc に追記しておく。
あるいは、該当の場所まで PATH を通すとか。
一応、何も指定しないで love を実行したら、例の画面は表示された。
パーミッションが違うと怒られた。覗いてみたら、所有者について sysop と root が混在してる。とりあえず変更してみる。
cd /usr/local/games/love-0.10.2/src sudo chown sysop:sysop * sudo chown sysop:sysop ./.*
一々場所を指定して起動するのは面倒臭いので alias に登録。~/.bashrc に追記しておく。
nano ~/.bashrc
alias love='/usr/local/games/love-0.10.2/src/love'
あるいは、該当の場所まで PATH を通すとか。
export PATH=$PATH:/usr/local/games/love-0.10.2/src
一応、何も指定しないで love を実行したら、例の画面は表示された。
◎ 問題点。 :
現状では、Raspberry Pi Zero W の WiFi(無線LAN)が使えない。pilove は、raspbian jessie を元にして構築してあるらしいけど…。無線LAN関係は入ってないのか…。
LAN端子を備えた Raspberry Pi1 / Pi2 / Pi3 ならどうにかなるのかもしれないが、無線LANしかついてない Raspberry Pi Zero W では外部からアクセスしようがない。となると、love2d用のソースも、画像ファイルも、サウンドファイルも転送できない。これでは動作確認すら満足にできない…。結局音は鳴るのか、鳴らないのか。これでは分からん…。
LAN端子を備えた Raspberry Pi1 / Pi2 / Pi3 ならどうにかなるのかもしれないが、無線LANしかついてない Raspberry Pi Zero W では外部からアクセスしようがない。となると、love2d用のソースも、画像ファイルも、サウンドファイルも転送できない。これでは動作確認すら満足にできない…。結局音は鳴るのか、鳴らないのか。これでは分からん…。
[ ツッコむ ]
#2 [raspberrypi] Raspberry Pi Zero Wにraspbian jessieをインストール
piloveをビルドできないか試したくなってきたので、raspbian jessie を Raspberry Pi Zero W上にインストール。ちなみに、raspbian の現行版は stretch。一つ前の版が jessie。
以下を追加。
sudo sysctl -p を実行して反映。
_[Raspbian] IPv6を無効にする方法(Raspbian Jessie Lite) - Life with IT
vimの設定変更。せめてソースコードの色付けぐらいはする。
wav, mp3, ogg の再生は以下。
でも、sox に入ってる play を使えば大体のフォーマットは再生できる模様。mp3は再生できなかったが、libsox-fmt-mp3 をインストールしたら再生できるようになった。
_Debian User Forums - View topic - Can't play mp3 files with play (sox)
_SoX(Sound eXchange)でMP3を扱う
◎ raspbian jessieを入手。 :
raspbian jessie を入手しようとしたものの、公式サイト上では見つからず。
_Raspberry Pi Downloads - Software for the Raspberry Pi
しかし、JAISTのサーバに raspbian jessie が残ってた。
_Index of /pub/raspberrypi/raspbian_lite/images/raspbian_lite-2017-07-05
_Index of /pub/raspberrypi/raspbian/images/raspbian-2017-07-05
2017-07-05-raspbian-jessie.zip をDLして解凍。中に入ってた .img を Win32 Disk Imager を使って microSDHC (Team製 8GB)に書き込み。Raspberry Pi Zero W に差し込んで起動。すんなり起動してくれた。
_Raspberry Pi Downloads - Software for the Raspberry Pi
しかし、JAISTのサーバに raspbian jessie が残ってた。
_Index of /pub/raspberrypi/raspbian_lite/images/raspbian_lite-2017-07-05
_Index of /pub/raspberrypi/raspbian/images/raspbian-2017-07-05
2017-07-05-raspbian-jessie.zip をDLして解凍。中に入ってた .img を Win32 Disk Imager を使って microSDHC (Team製 8GB)に書き込み。Raspberry Pi Zero W に差し込んで起動。すんなり起動してくれた。
◎ 色々設定。 :
画面解像度、ホスト名、ロケール等を設定。piユーザのパスワードも変更。
rootのパスワード変更 + ユーザを追加。以下を参考に作業。
_RaspberryPiをRaspbianで使う場合の初期設定メモ(ユーザ追加) - Qiita
usermod を使って、新規ユーザを各グループに登録
sudo raspi-config
rootのパスワード変更 + ユーザを追加。以下を参考に作業。
_RaspberryPiをRaspbianで使う場合の初期設定メモ(ユーザ追加) - Qiita
sudo passwd root sudo adduser 新規ユーザ名 sudo gpasswd -a 新規ユーザ名 sudo sudo gpasswd -d pi sudo
sudo nano /etc/sudoers.d/010_pi-nopasswd or sudo nano /etc/sudoerspi ALL=(ALL) NOPASSWD: ALL をコメントアウトして、piユーザが root になれないようにする。
usermod を使って、新規ユーザを各グループに登録
$ groups pi pi : pi adm dialout cdrom audio video plugdev games users input netdev spi i2c gpio $ sudo usermod -aG sudo,pi,adm,dialout,cdrom,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio 新規ユーザ名 $ groups 新規ユーザ名 新規ユーザ名 : 新規ユーザ名グループ adm dialout cdrom sudo audio video plugdev games users input netdev pi spi i2c gpio
◎ リポジトリのURLを変更。 :
デフォルト設定だとアクセスが遅かったので、日本のミラーサーバのURLに変更。今回は JAIST を利用させてもらうことに。
以下を追加して、元々のURLはコメントアウト。
apt-get でパッケージ等を更新。
sudo nano /etc/apt/sources.list
以下を追加して、元々のURLはコメントアウト。
deb http://ftp.jaist.ac.jp/raspbian/ jessie main contrib non-free rpi
apt-get でパッケージ等を更新。
sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo rpi-update
◎ フォントのインストール。 :
sudo aptitude install fonts-ipafont fonts-ipaexfont fonts-takao fonts-mplus fonts-migmix fonts-mmcedar fonts-umeplus fonts-motoya-l-maruberi fonts-motoya-l-cedar fonts-horai-umefont sudo aptitude install xfonts-mplus ttf-kochi-gothic-naga10 ttf-kochi-mincho-naga10 xfonts-naga10 xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xfonts-shinonomexfonts-* は、今時は要らないかも。
◎ 日本語フォルダ名を英語フォルダ名に変更。 :
/home/pi/ 以下に日本語のフォルダ名がずらずら並んでるけど、CUIで作業する際に指定が面倒臭い。英語名にする。
しかし、上手く行かない。以下ならなんとかなった。ただし、古い日本語フォルダ名が残ってしまって、それらは自分で削除しないといけなかった。
_Ubuntu のデスクトップ環境のフォルダ名を日本語から英語にする - Qiita
sudo apt-get install xdg-user-dirs-gtk LANG=en_GB.utf8 xdg-user-dirs-gtk-updateLANG=C ではなくて LANG=en_GB.utf8 であることに注意。
しかし、上手く行かない。以下ならなんとかなった。ただし、古い日本語フォルダ名が残ってしまって、それらは自分で削除しないといけなかった。
LANG=en_GB.utf8 xdg-user-dirs-update --force
_Ubuntu のデスクトップ環境のフォルダ名を日本語から英語にする - Qiita
◎ 自動ログイン設定の変更。 :
piユーザではなく、新規ユーザで自動ログインするようにしたい。
_Debian Jessie Wheezy 自動ログイン lightdm系 ? Linux. リナックス. ヒト ノ タメ ノ.
sudo vi /etc/lightdm/lightdm.conf
[SeatDefaults] autologin-user=ユーザ名 autologin-user-timeout=0
_Debian Jessie Wheezy 自動ログイン lightdm系 ? Linux. リナックス. ヒト ノ タメ ノ.
◎ IPv6無効化。 :
sudo nano /etc/sysctl.conf
以下を追加。
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
sudo sysctl -p を実行して反映。
_[Raspbian] IPv6を無効にする方法(Raspbian Jessie Lite) - Life with IT
◎ sshの接続が切れないように設定。 :
/etc/ssh/sshd_config の ClientAliveInterval を設定。
sudo nano /etc/ssh/sshd_config
ClientAliveInterval 15
◎ vim をインストール。 :
sudo aptitude install vim sudo aptitude install vim-nox
vimの設定変更。せめてソースコードの色付けぐらいはする。
vi ~/.vimrc
syntax on
◎ サウンド再生や変換用ツールをインストール。 :
sudo aptitude install mpg321 mpg123 vorbis-tools flac sox libsox-fmt-mp3 libsox-fmt-all
wav, mp3, ogg の再生は以下。
aplay hoge.wav mpg123 hoge.mp3 ogg123 hoge.ogg
でも、sox に入ってる play を使えば大体のフォーマットは再生できる模様。mp3は再生できなかったが、libsox-fmt-mp3 をインストールしたら再生できるようになった。
play hoge.flac play hoge.wav play hoge.ogg play hoge.mp3
_Debian User Forums - View topic - Can't play mp3 files with play (sox)
_SoX(Sound eXchange)でMP3を扱う
◎ microSDHCの速度測定。 :
sudo aptitude install hdparm
sudo hdparm -t /dev/mmcblk0
◎ piloveをビルドしようと試みたが失敗。 :
ここまでやっておいてアレだけど、raspbian jessie 上では、pilove をビルドできなかった。
_skarbat/pilove: Love2D on the Raspberry PI
「Intelベースシステム、QEmu, NBDドライバ、xsysrootツールが必要」と書いてある。Raspberry Pi 実機で作るわけではなかったのか…。しかも pipaOS がどうのこうのと書いてある。なんやねん。そのOS。
_skarbat/pilove: Love2D on the Raspberry PI
「Intelベースシステム、QEmu, NBDドライバ、xsysrootツールが必要」と書いてある。Raspberry Pi 実機で作るわけではなかったのか…。しかも pipaOS がどうのこうのと書いてある。なんやねん。そのOS。
◎ retropie-setupを利用してSDL2をインストールしようと試みたが失敗。 :
piloveがダメなら、retropie-setup はどうだろう。
_RetroPie/RetroPie-Setup: Shell script to set up a Raspberry Pi/Odroid/PC with RetroArch emulator and various cores
_RetroPie/RetroPie-Setup: Shell script to set up a Raspberry Pi/Odroid/PC with RetroArch emulator and various cores
mkdir retropie-setup cd retropie-setup git clone https://github.com/RetroPie/RetroPie-Setup.git cd /RetroPie-Setup sudo ./retropie_setup.sh sdl2なんだかよく分からないメニュー画面が出てきた。SDL2だけをビルドしてくれるわけではナサゲ。
[ ツッコむ ]
#3 [raspberrypi][love2d] raspbian jessie上でSDL2とlove2dをビルド
pilove も retropie-setup も raspbian jessie 上で動かせなかったので、仕方なく以前と同様の手順でビルド。SDL2は OpenGL を無効にしてビルドすることで、Raspberry Pi の OpenGL ES を使って描画できるようにする。
◎ SDL2のビルド。 :
_Golang と SDL2 でゲームを作る - KaoriYa
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
configure をする段階で、--host=arm-raspberry-linux-gnueabihf をつけたり外したりしてみた。
どうやら、--host=arm-raspberry-linux-gnueabihf をつけて configure しないと、Video driver に rpi が出てこない模様。このオプションは必須っぽいな…。
ちなみに、「--disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl」の指定で、OpenGL を無効にしているらしい。
raspbian jessie ではなく、raspbian stretch + SDL2-2.0.5 で configure した場合の結果は以下。
raspbian jessie上で configure した時と違って、Audio に、sndio というのがついてる。libsndio-dev をアンインストールしたほうがいいのかな。
libsndio-dev をアンインストールした状態で configure すると以下になった。
makeしてインストール。
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
sudo aptitude install automake build-essential mercurial qt5-default libtool libasound2-dev libaudio-dev libesd0-dev libsndfile1-dev libmodplug-dev libopenal-dev libfontconfig1-dev libpango1.0-dev freeglut3-dev libfreeimage-dev libjpeg-dev libtiff5-dev libwebp-dev libxcursor-dev libxi-dev libxrandr-dev libxss-dev libudev-dev libsmpeg-dev libxinerama-dev
mkdir ~/sdl2 cd ~/sdl2 wget https://www.libsdl.org/release/SDL2-2.0.5.tar.gz tar xzf SDL2-2.0.5.tar.gz cd SD2-2.0.5 mkdir build && cd build
configure をする段階で、--host=arm-raspberry-linux-gnueabihf をつけたり外したりしてみた。
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : dummy opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : NO Using fcitx : NO
../configure --host=arm-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : rpi dummy opengl_es1 opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : NO Using fcitx : NO
どうやら、--host=arm-raspberry-linux-gnueabihf をつけて configure しないと、Video driver に rpi が出てこない模様。このオプションは必須っぽいな…。
ちなみに、「--disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl」の指定で、OpenGL を無効にしているらしい。
raspbian jessie ではなく、raspbian stretch + SDL2-2.0.5 で configure した場合の結果は以下。
../configure --host=arm-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) sndio Video drivers : rpi dummy opengl_es1 opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : YES Using fcitx : NO
raspbian jessie上で configure した時と違って、Audio に、sndio というのがついてる。libsndio-dev をアンインストールしたほうがいいのかな。
sudo aptitude remove libsndio-dev
libsndio-dev をアンインストールした状態で configure すると以下になった。
SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : rpi dummy opengl_es1 opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : YES Using fcitx : NO
makeしてインストール。
make sudo make install
◎ love2dをビルド。 :
各ページを眺めながら、必要になりそうなパッケージを列挙してインストール。
_Building LOVE (日本語) - LOVE
_pilove/build-love2d.sh at master - skarbat/pilove
love2d 0.10.2 の Linux用ソースをDLしてビルドする。
_Building LOVE (日本語) - LOVE
sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev sudo aptitude install autotools-dev automake libtool libdevil-dev libogg-dev libflac-dev libflac++-dev libmng-dev # raspbian jessie sudo aptitude install libturbojpeg1-dev # raspbian stretch sudo aptitude install libturbojpeg0-dev
_pilove/build-love2d.sh at master - skarbat/pilove
sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev sudo aptitude install devscripts git-core debhelper dh-autoreconf libasound2-dev libudev0 libudev-dev libdbus-1-dev libx11-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev libgl1-mesa-dev libpulse-dev libibus-1.0-dev pulseaudio libraspberrypi-dev
love2d 0.10.2 の Linux用ソースをDLしてビルドする。
mkdir ~/love2d cd ~/love2d wget https://bitbucket.org/rude/love/downloads/love-0.10.2-linux-src.tar.gz tar zxf love-0.10.2-linux-src.tar.gz cd love-0.10.2 ./configure make sudo make install
◎ 動作確認の結果。 :
love で実行。例の画面が出た。
サウンドを鳴らすソースを与えて動作確認してみた。以下のような警告が表示されたものの、音が鳴った。…やった! 鳴ったぞ! ようやく音が聞こえたわ…。
つまり、raspbian jessie上で SDL2 や love2d をビルドする分には、ちゃんと音が鳴ることが分かった。Raspberry Pi + love2d は音が鳴らない、というわけではないらしい。
しかし、raspbian stretch でやると音が鳴らないわけで…。SDL2、もしくはlove2dは、raspbian stretch に未対応ということだろうか? love2d を使いたいなら、raspbian jessie を使うしかない?
それとも pulseaudio が絡んでたりするのだろうか。例えば pilove の公式サイト上に書いてあるとおりに、
pulseaudio ってそもそも何なのでしょうか。ググって各説明ページを眺めてみてもピンとこない。Linuxのサウンドシステム関係はよく分からんなあ…。いや、Windowsのサウンド関係もちゃんと分かってるわけでもないけれど。
サウンドを鳴らすソースを与えて動作確認してみた。以下のような警告が表示されたものの、音が鳴った。…やった! 鳴ったぞ! ようやく音が聞こえたわ…。
AL lib: (WW) alc_initconfig: Failed to initialize backend "pulse"
つまり、raspbian jessie上で SDL2 や love2d をビルドする分には、ちゃんと音が鳴ることが分かった。Raspberry Pi + love2d は音が鳴らない、というわけではないらしい。
しかし、raspbian stretch でやると音が鳴らないわけで…。SDL2、もしくはlove2dは、raspbian stretch に未対応ということだろうか? love2d を使いたいなら、raspbian jessie を使うしかない?
それとも pulseaudio が絡んでたりするのだろうか。例えば pilove の公式サイト上に書いてあるとおりに、
pulseaudio --startとやってから love2d を動かすと、音が鳴らなくなるし…。
pulseaudio --killとやってから再度試したら音が鳴ったし…。
pulseaudio ってそもそも何なのでしょうか。ググって各説明ページを眺めてみてもピンとこない。Linuxのサウンドシステム関係はよく分からんなあ…。いや、Windowsのサウンド関係もちゃんと分かってるわけでもないけれど。
◎ raspbianはバージョンによってpulseaudioの扱いが違う。 :
raspbian関係の記事をググってたら気になる話が。raspbian jessie までは、Bluetooth から音を鳴らすために標準で pulseaudio がインストールされていたけど、raspbian stretch では別の何かを使って Bluetooth から音を鳴らせるようになったので pulseaudio は標準でインストールされていないらしい。
_Raspbian StretchではPulseaudioを使わなくなったのでxrdpのサウンドをどうするか思案中
_Raspbian Stretch has arrived for Raspberry Pi - Raspberry Pi
そのあたりが関係してるのかな…。
_Raspbian StretchではPulseaudioを使わなくなったのでxrdpのサウンドをどうするか思案中
_Raspbian Stretch has arrived for Raspberry Pi - Raspberry Pi
そのあたりが関係してるのかな…。
[ ツッコむ ]
#4 [raspberrypi] microSDを抜き差ししやすいaspberry Pi Zero W用のケースが欲しい
今現在、Raspberry Pi Zero W のケースとして、
_公式の白と赤の例のケース
を使ってるけど。microSDを差し替えるのが面倒臭い。
基板をケースに入れたまま microSD を差し替えられるケースって無いのかな…。
ググった感じでは、種類は少ないけど一応ありそうな気配も。でも、見た目は差し替え可能なように見えつつも、実際には差し替えが容易ではない、的な罠がありそうな気配も。そもそも入手性もアレだし。
まあ、最悪、スペーサーだけを基板につけて、基板をむき出しにしておけば目的が果たせそうな気もするけど。それもそれでなんだかアレだなと。
- 一旦ケースの蓋を外して
- ケースから基板を取り出して
- microSDを差し替えて
- またケースに基板をはめ込んで
- 蓋をして…。
基板をケースに入れたまま microSD を差し替えられるケースって無いのかな…。
ググった感じでは、種類は少ないけど一応ありそうな気配も。でも、見た目は差し替え可能なように見えつつも、実際には差し替えが容易ではない、的な罠がありそうな気配も。そもそも入手性もアレだし。
まあ、最悪、スペーサーだけを基板につけて、基板をむき出しにしておけば目的が果たせそうな気もするけど。それもそれでなんだかアレだなと。
[ ツッコむ ]
2017/11/16(木) [n年前の日記]
#1 [raspberrypi][love2d] love2dが音を鳴らしてくれない件でまだハマってる
raspbian jessie までは pulseaudio が標準で入ってたけど、raspbian stretch は pulseaudio を使わなくなった、という話が気になるわけで。そのあたりが絡んでいて、love2d の音が鳴らないのではないか、と。
Raspberry Pi Zero W + raspbian stretch 上で、pulseaudio関係のパッケージをアンインストールしてから love2d をビルドしてみた。これで音が鳴るだろうか…。
残ってるのは以下。
love2dをビルド。1時間半かかった。
試してみたが、ダメだった。相変わらず音を出そうとすると「Illegal instruction」と表示される。
Raspberry Pi Zero W + raspbian stretch 上で、pulseaudio関係のパッケージをアンインストールしてから love2d をビルドしてみた。これで音が鳴るだろうか…。
◎ pulseaudio関係をアンインストール。 :
sudo aptitude purge pulseaudio libpulse-dev pulseaudio-utils libsox-fmt-pulsesudo aptitude purge hoge で、設定も含めてパッケージをアンインストールできる。
残ってるのは以下。
$ sudo aptitude search pulse | grep -E '^i' i A libpulse-mainloop-glib0 - PulseAudio client libraries (glib support) i A libpulse0 - PulseAudio client librariesvlc等が libpulse0 を必要とするらしいので残しておいた。
love2dをビルド。1時間半かかった。
試してみたが、ダメだった。相変わらず音を出そうとすると「Illegal instruction」と表示される。
◎ 「Illegal instruction」が気になる。 :
「Illegal instruction」というメッセージでググってるうちに気になる話を見かけた。armv7l の命令を armv6l で実行しようとした場合、そういうエラーメッセージを出す場合もあるそうで。
_raspberry pi - Illegal instructionというエラーについて - スタック・オーバーフロー
もしかすると、raspbian stretch の SDL2 を作る際に必要になるパッケージの中に ―― それも音関係を処理するパッケージの中に、ARMv7 が載ってる Raspberry Pi2 / Pi3 を前提にして作られてしまったパッケージが存在していて、それを ARMv6 の Raspberry Pi Zero W 上で動かそうとした、からエラーが出る、という可能性はないだろうか。raspbian jessie の頃は ARMv6のことも考えて作られてたけど、raspbian stretch は、まだそこまで手が回ってない、とか。
だとすれば、ARMv7 が載ってる Raspberry Pi3上で同じ作業をすると、そちらではすんなり動く・音が鳴る、かもしれない。
_raspberry pi - Illegal instructionというエラーについて - スタック・オーバーフロー
もしかすると、raspbian stretch の SDL2 を作る際に必要になるパッケージの中に ―― それも音関係を処理するパッケージの中に、ARMv7 が載ってる Raspberry Pi2 / Pi3 を前提にして作られてしまったパッケージが存在していて、それを ARMv6 の Raspberry Pi Zero W 上で動かそうとした、からエラーが出る、という可能性はないだろうか。raspbian jessie の頃は ARMv6のことも考えて作られてたけど、raspbian stretch は、まだそこまで手が回ってない、とか。
だとすれば、ARMv7 が載ってる Raspberry Pi3上で同じ作業をすると、そちらではすんなり動く・音が鳴る、かもしれない。
◎ Raspberry Pi3 で love2d の動作を試してみる。 :
手持ちの Raspberry Pi3 + raspbian stretch + love2d で、音が鳴るか試してみたり。
ますは公式リポジトリ版のパッケージをインストール。
GL Driver (Fake DKMS) を有効化。公式リポジトリ版の SDL2関係は OpenGL を使うオプションでビルドされているらしいので。
love2d で音が出るか試してみた。音が鳴った。相変わらず、jack server がどうこうとメッセージが出るし、なんだかワンテンポ遅れてから鳴ってるけど、それでも一応音は鳴った。
ということは、raspbian stretch の公式リポジトリにアップされてる SDL2 + love2d は、必ずしも音が鳴らない、というわけではないということかな…。
しかし、何故か途中で音が鳴らなくなる。
ふと、Raspberry Pi3 に、pulseaudio が入っていて、動いてることに気づいた。おそらく gosu を動かす際にインストールしたのではないかな…。
pulseaudio --kill としてから love2d を動かすと、音がずっと鳴ってくれるようになった。ただ、love2d を動かすと、その時点で pulseaudio が起動してしまう模様。love2d を終了させてから確認すると、また pulseaudio が復活してる。
現状、pulseaudio と jack 関係でインストールされていたのは以下。
pulseaudio をアンインストールしてみる。設定まで含めて削除。
つまり、raspbian stretch + love2d だから音が鳴らない、というわけではないらしい。少なくとも、Raspberry Pi3 + raspbian stretch + love2d なら、音が鳴る。ただし、Raspberry Pi Zero W + raspbian stretch + love2d では、音が鳴らない。
となると…。これはもしかすると、raspbian stretch の公式リポジトリには、ARMv7を前提にしたパッケージが色々アップロードされていて、ARMv6の Raspberry Pi Zero W にインストールしてしまうと不具合が起きる、ということになるのだろうか。
本当にそうかな? 実は Raspberry Pi Zero W も、raspbian stretch を入れてすぐに love2d を動かせば、音が鳴ってくれたりしないだろうか。試してみるしかないかな…。
ますは公式リポジトリ版のパッケージをインストール。
$ sudo aptitude install love 以下の新規パッケージがインストールされます: binfmt-support{a} liballegro4.4{a} libdevil1c2{a} libluajit-5.1-2{a} love
GL Driver (Fake DKMS) を有効化。公式リポジトリ版の SDL2関係は OpenGL を使うオプションでビルドされているらしいので。
love2d で音が出るか試してみた。音が鳴った。相変わらず、jack server がどうこうとメッセージが出るし、なんだかワンテンポ遅れてから鳴ってるけど、それでも一応音は鳴った。
ということは、raspbian stretch の公式リポジトリにアップされてる SDL2 + love2d は、必ずしも音が鳴らない、というわけではないということかな…。
しかし、何故か途中で音が鳴らなくなる。
ふと、Raspberry Pi3 に、pulseaudio が入っていて、動いてることに気づいた。おそらく gosu を動かす際にインストールしたのではないかな…。
$ ps x | grep pulse 1536 ? S<l 0:01 /usr/bin/pulseaudio --start --log-target=syslog
pulseaudio --kill としてから love2d を動かすと、音がずっと鳴ってくれるようになった。ただ、love2d を動かすと、その時点で pulseaudio が起動してしまう模様。love2d を終了させてから確認すると、また pulseaudio が復活してる。
現状、pulseaudio と jack 関係でインストールされていたのは以下。
$ sudo aptitude search pulse | grep -E '^i' i A libpulse-dev - PulseAudio client development headers and libraries i A libpulse-mainloop-glib0 - PulseAudio client libraries (glib support) i A libpulse0 - PulseAudio client libraries i A libpulsedsp - PulseAudio OSS pre-load library i pulseaudio - PulseAudio sound server i A pulseaudio-utils - Command line tools for the PulseAudio sound server $ sudo aptitude search jack | grep -E '^i' i A jackd - JACK Audio Connection Kit (default server package) i A jackd2 - JACK Audio Connection Kit (server and example clients) i A libjack-jackd2-0 - JACK Audio Connection Kit (libraries) i A qjackctl - User interface for controlling the JACK sound server
pulseaudio をアンインストールしてみる。設定まで含めて削除。
sudo aptitude purge pulseaudioこの状態でも love2d の音は鳴る。しかも、pulseaudio が入っていた時より音が鳴り始めるまでの反応が全然早い。
つまり、raspbian stretch + love2d だから音が鳴らない、というわけではないらしい。少なくとも、Raspberry Pi3 + raspbian stretch + love2d なら、音が鳴る。ただし、Raspberry Pi Zero W + raspbian stretch + love2d では、音が鳴らない。
となると…。これはもしかすると、raspbian stretch の公式リポジトリには、ARMv7を前提にしたパッケージが色々アップロードされていて、ARMv6の Raspberry Pi Zero W にインストールしてしまうと不具合が起きる、ということになるのだろうか。
本当にそうかな? 実は Raspberry Pi Zero W も、raspbian stretch を入れてすぐに love2d を動かせば、音が鳴ってくれたりしないだろうか。試してみるしかないかな…。
[ ツッコむ ]
#2 [firefox] Firefox 57が出たらしい
今までの拡張(アドオン)が使えなくなる、Firefox 57 だか Firefox Quantum だかが、とうとう公開されてしまったらしい。
Firefoxにたくさん拡張を入れて便利に使ってるつもりになってた自分としては、コレは困った…。どうしよう…。拡張が使えない Firefox なんて、利用する意味が無い…。
いやまあ、Webなんたらで書き直された拡張なら動くらしいけど。現状ではほとんど書き直されてないし、「全部書き直せって? だったら拡張の開発なんてやめるわ」と言い出した作者さんもチラホラ居るし。
Firefox ESR版を使えば従来の拡張も動くらしいけど、半年後にはESR版も Firefox 57 と同じ状態になるらしいし。Pale Moon、Waterfoxという派生ブラウザなら従来の拡張も動くという話があるけど、完全に互換性があるわけでもなさそうで。困った。
どうせ使いづらくなるなら、別ブラウザへの移行を、例えば Google Chrome へ移行することをちゃんと検討し始めたほうがいいのだろうか。うーん。
ちなみにFirefox ESR ってのは、法人向けとして、最新版よりちょっと古いバージョンの、セキュリティ面だけを修正して公開していくスタンスの Firefox、という説明で合ってるのかな。ベースは古い版なので、従来の拡張もまだ動くわけで。
Firefoxにたくさん拡張を入れて便利に使ってるつもりになってた自分としては、コレは困った…。どうしよう…。拡張が使えない Firefox なんて、利用する意味が無い…。
いやまあ、Webなんたらで書き直された拡張なら動くらしいけど。現状ではほとんど書き直されてないし、「全部書き直せって? だったら拡張の開発なんてやめるわ」と言い出した作者さんもチラホラ居るし。
Firefox ESR版を使えば従来の拡張も動くらしいけど、半年後にはESR版も Firefox 57 と同じ状態になるらしいし。Pale Moon、Waterfoxという派生ブラウザなら従来の拡張も動くという話があるけど、完全に互換性があるわけでもなさそうで。困った。
どうせ使いづらくなるなら、別ブラウザへの移行を、例えば Google Chrome へ移行することをちゃんと検討し始めたほうがいいのだろうか。うーん。
ちなみにFirefox ESR ってのは、法人向けとして、最新版よりちょっと古いバージョンの、セキュリティ面だけを修正して公開していくスタンスの Firefox、という説明で合ってるのかな。ベースは古い版なので、従来の拡張もまだ動くわけで。
◎ storageフォルダって何だろう。 :
とりあえず Firefox の Profilesフォルダをバックアップしておこう…と思ったら、1.38GBもある。なんでや。
中のファイルサイズを一つ一つ確認していったら、storageフォルダが1GBほどのサイズ。何だろう。このフォルダは…。
中身を眺めると…。どうも Unityで作成された何かしらをブラウザ上で動かそうとした場合に、件の場所にデータ等が格納されてるっぽいなと。ソレ以外にも色々入ってるけど。コレは勝手に削除してもいいのだろうか。ダメなのだろうか。ググってもそれらしい情報が見つからない…。
中のファイルサイズを一つ一つ確認していったら、storageフォルダが1GBほどのサイズ。何だろう。このフォルダは…。
中身を眺めると…。どうも Unityで作成された何かしらをブラウザ上で動かそうとした場合に、件の場所にデータ等が格納されてるっぽいなと。ソレ以外にも色々入ってるけど。コレは勝手に削除してもいいのだろうか。ダメなのだろうか。ググってもそれらしい情報が見つからない…。
◎ Firefox ESRをインストールしてみた。 :
とりあえず、Firefox ESR をインストールしてみたのだけど。
起動しようとしても、いつまで経ってもウインドウが表示されない。仕方ないのでタスクマネージャからプロセスを殺してみたけど…。再度起動させたら、ウインドウは表示されたものの、ブックマークが全部消えた…。
バックアップしておいたブックマークの .json を渡して復元しようとしてみたら、CPUを1コア全部使って何か処理をしてるものの、そこから先に進まない。もしかして、Firefox ESR は52ベースで、今まで使ってたのは56ベースだから、処理できない .json になっているのだろうか…。
htmlでもバックアップしておいたので、そちらからならインポートできた。
と思ったら Firefox Sync が動き始めたようで、ブックマークの中身がグチャグチャに。しかもおそらく Firefox Sync がツッコんできたブックマークの内容が妙に古い。拡張も少しずつ入り始めたけど、これまた内容が古い。
Firefox Sync…酷いな…。たぶんある時期から同期ができてなかったんだな…。ダメダメなサービスだ…。いや、もしかすると Firefox 52時点の内容を同期しようとしたのだろうか。
最初の起動で固まってたというか処理が戻ってこなかったのも、Firefox Sync が必死に処理をしていたから、だろうか。たぶんこの機能、大量のブックマークやアドオンは想定してないのではないかなあ…。いや、Firefoxのブックマーク機能自体が、大量のブックマーク数を想定してなさそうだけど。整理してるうちにどんどん重くなっていくし…。
起動しようとしても、いつまで経ってもウインドウが表示されない。仕方ないのでタスクマネージャからプロセスを殺してみたけど…。再度起動させたら、ウインドウは表示されたものの、ブックマークが全部消えた…。
バックアップしておいたブックマークの .json を渡して復元しようとしてみたら、CPUを1コア全部使って何か処理をしてるものの、そこから先に進まない。もしかして、Firefox ESR は52ベースで、今まで使ってたのは56ベースだから、処理できない .json になっているのだろうか…。
htmlでもバックアップしておいたので、そちらからならインポートできた。
と思ったら Firefox Sync が動き始めたようで、ブックマークの中身がグチャグチャに。しかもおそらく Firefox Sync がツッコんできたブックマークの内容が妙に古い。拡張も少しずつ入り始めたけど、これまた内容が古い。
Firefox Sync…酷いな…。たぶんある時期から同期ができてなかったんだな…。ダメダメなサービスだ…。いや、もしかすると Firefox 52時点の内容を同期しようとしたのだろうか。
最初の起動で固まってたというか処理が戻ってこなかったのも、Firefox Sync が必死に処理をしていたから、だろうか。たぶんこの機能、大量のブックマークやアドオンは想定してないのではないかなあ…。いや、Firefoxのブックマーク機能自体が、大量のブックマーク数を想定してなさそうだけど。整理してるうちにどんどん重くなっていくし…。
[ ツッコむ ]
2017/11/17(金) [n年前の日記]
#1 [raspberrypi] Raspberry Pi Zero Wにraspbian stretchを再インストール中
Raspberry Pi Zero W に、raspbian stretch を再インストール中。
前回は Transcend製 microSDHC 16GBにインストールしたけど、今回は東芝製 microSDHC 16GB にインストール。
_NOOBS_v2_4_4.zip をDLして解凍。 _SDメモリカードフォーマッタ でフォーマットしたmicroSDHCに、解凍して出てきたファイル群をそのままコピー。
Raspberry Pi Zero W に microSDHC を差して起動すると選択画面が出てくる。国の設定を日本に。WiFi(無線LAN)を設定。Raspbian を選択。1〜2時間ぐらいでインストール終了。
前回は Transcend製 microSDHC 16GBにインストールしたけど、今回は東芝製 microSDHC 16GB にインストール。
_NOOBS_v2_4_4.zip をDLして解凍。 _SDメモリカードフォーマッタ でフォーマットしたmicroSDHCに、解凍して出てきたファイル群をそのままコピー。
Raspberry Pi Zero W に microSDHC を差して起動すると選択画面が出てくる。国の設定を日本に。WiFi(無線LAN)を設定。Raspbian を選択。1〜2時間ぐらいでインストール終了。
[ ツッコむ ]
#2 [firefox] Firefox 57になるとこれだけ機能削減されるので困る
昨日、Firefox ESR をインストールする前に、Firefox 56 の拡張の状態をキャプチャしておいたのだけど。こんな状態で。
「旧式」と黄色く表示されてるのが、Firefox 57以降では動かなくなる拡張。数えてみたら29個あった。現状では、全体の3/4の拡張が使えなくなっちゃう。
どれもこれも、「コレが使えたら便利になりそう」とユーザが思って、わざわざ『能動的』にインストールした拡張なわけで。つまりはどれもユーザが望んでた機能と言えるわけだけど、その、ユーザが望んでた機能がざっくり数えて約30個も突然無くなってしまったら…。そりゃ当然「使えないソフト」「ダウングレード」扱いされるよなと。
代わりに劇的に速くなった、とかならまだしも、実測ではたいして違いはなさそうだし…。
_ASCII.jp:2倍速い最新ブラウザー「Firefox Quantum」正式版登場! 早速ベンチマークした (1/2)
なんだかなあ。
いやまあ、しばらくは Firefox ESR版を使ってどうにか、とは思っているけど…。
「旧式」と黄色く表示されてるのが、Firefox 57以降では動かなくなる拡張。数えてみたら29個あった。現状では、全体の3/4の拡張が使えなくなっちゃう。
どれもこれも、「コレが使えたら便利になりそう」とユーザが思って、わざわざ『能動的』にインストールした拡張なわけで。つまりはどれもユーザが望んでた機能と言えるわけだけど、その、ユーザが望んでた機能がざっくり数えて約30個も突然無くなってしまったら…。そりゃ当然「使えないソフト」「ダウングレード」扱いされるよなと。
代わりに劇的に速くなった、とかならまだしも、実測ではたいして違いはなさそうだし…。
_ASCII.jp:2倍速い最新ブラウザー「Firefox Quantum」正式版登場! 早速ベンチマークした (1/2)
なんだかなあ。
いやまあ、しばらくは Firefox ESR版を使ってどうにか、とは思っているけど…。
[ ツッコむ ]
2017/11/18(土) [n年前の日記]
#1 [raspberrypi] rpi-updateが進まなくてハマったり
Raspberry Pi Zero W に raspbian stretch をインストールして、sudo rpi-update をしようとしたのだけど、54MBほどの何かをダウンロードするところでダウンロードが止まってしまって先に進まなくて悩んだり。数回繰り返してみたけど状態に変化無し。/etc.apt/sources.list を編集してリポジトリのURLを変えてみても変化無し。うーん。
一日経ってから試してみたら、今度はダウンロードできた。どうもサーバのほうでアレなことが起きてたような気がする。
ということで、上手く行かない場合は別の時間帯に試してみる、ということでいいのかな…。
一日経ってから試してみたら、今度はダウンロードできた。どうもサーバのほうでアレなことが起きてたような気がする。
ということで、上手く行かない場合は別の時間帯に試してみる、ということでいいのかな…。
[ ツッコむ ]
2017/11/19(日) [n年前の日記]
#1 [raspberrypi][love2d] raspbian stretch は Raspberry Pi Zero W に対応してないのかもしれない
Raspberry Pi Zero W に raspbian stretch をクリーンインストールして、love2d (love) を動かしてみたのだけど。
結局、love2d で音は鳴らなかった。鳴らそうとすると、Illegal instruction と表示されてしまう。
クリーンインストールした直後の raspbian stretch で音が鳴らないのだから、公式リポジトリ版のパッケージを使うと音が鳴らない、という状態は間違いないのではないかなと。
ということで、状況としては、以下のような状態で。
推測だけど、raspbian stretch は一見すると Raspberry Pi Zero W上でも動くように見えてるけど、実はいくつかのパッケージは Pi2 / Pi3用 = ARMv7を前提としてビルドされていて、Pi1 / Zero系 = ARMv6が載ってる Raspberry Pi上では動かないのではないだろうか。
描画関係のパッケージは見た目ですぐに動かないことが分かるから、そのあたりの作業ミスはしてないのだろうけど、音関係はチェック作業が十分にできていない可能性がありそう。プログラマーという人種は音関係を軽視する人が結構多いので、チェック漏れがあっても、まあ仕方ないのかもしれない。
もちろん、自分が音関係で必要な作業を忘れていて音が鳴らない可能性もあるけれど。でも、pulseaudio 関係はアンインストールしてみたり、そもそもインストールされてなかったりもするし…。
大体にして、raspbian jessie 上では、巷の解説ページ通りに作業すると、すんなり動くし音が鳴るわけで。であれば、どう考えても raspbian stretch がおかしいだろうと。
sudo aptitude install love sudo raspi-config -> GL driver enable sudo reboot
結局、love2d で音は鳴らなかった。鳴らそうとすると、Illegal instruction と表示されてしまう。
クリーンインストールした直後の raspbian stretch で音が鳴らないのだから、公式リポジトリ版のパッケージを使うと音が鳴らない、という状態は間違いないのではないかなと。
ということで、状況としては、以下のような状態で。
Hardware | OS | GL driver | love2d sound play |
---|---|---|---|
Raspberry Pi3 | raspbian stretch | enable | success |
Raspberry Pi Zero W | raspbian jessie | disable | success |
Raspberry Pi Zero W | raspbian stretch | enable | failure |
Raspberry Pi Zero W | raspbian stretch | disable | failure |
推測だけど、raspbian stretch は一見すると Raspberry Pi Zero W上でも動くように見えてるけど、実はいくつかのパッケージは Pi2 / Pi3用 = ARMv7を前提としてビルドされていて、Pi1 / Zero系 = ARMv6が載ってる Raspberry Pi上では動かないのではないだろうか。
描画関係のパッケージは見た目ですぐに動かないことが分かるから、そのあたりの作業ミスはしてないのだろうけど、音関係はチェック作業が十分にできていない可能性がありそう。プログラマーという人種は音関係を軽視する人が結構多いので、チェック漏れがあっても、まあ仕方ないのかもしれない。
もちろん、自分が音関係で必要な作業を忘れていて音が鳴らない可能性もあるけれど。でも、pulseaudio 関係はアンインストールしてみたり、そもそもインストールされてなかったりもするし…。
大体にして、raspbian jessie 上では、巷の解説ページ通りに作業すると、すんなり動くし音が鳴るわけで。であれば、どう考えても raspbian stretch がおかしいだろうと。
◎ 解決策。 :
ということで、Raspberry Pi上で love2d を動かしてみたい、という場合は、以下の選択肢になるのだろうなと。
ちなみに、raspbian jessie のイメージは以下で入手可能。
_Index of /pub/raspberrypi/raspbian/images/raspbian-2017-07-05
_Index of /pub/raspberrypi/raspbian_lite/images/raspbian_lite-2017-07-05
- A. Raspberry Pi2 / Pi3 を入手して使う。
- B. Raspberry Pi Zero系で動かしたいなら、raspbian jessie をインストールして、その上で love2d を使う。
ちなみに、raspbian jessie のイメージは以下で入手可能。
_Index of /pub/raspberrypi/raspbian/images/raspbian-2017-07-05
_Index of /pub/raspberrypi/raspbian_lite/images/raspbian_lite-2017-07-05
◎ pilove は Raspberry Pi Zero W に対応してないらしい。 :
解決策の選択肢として、
ちなみに、pilove は以下から入手できる。
_PiLove - LOVE on RaspberryPI
_Index of /downloads
pilove の /etc/network/interfaces の中には、無線LANの ssid や pskのパスワードを設定できそうな感じの記述があったので、そこを書き換えれば無線LANが使えるかなと期待したのだけど。試しに修正してみても再起動すると何故か元に書き戻されてしまって首を捻ったり。
ググってみたら、以下のやり取りが。
_Pi Zero W - Issue #1 - pipaos/pipaos
_wifi on Pi Zero W - Issue #3 - skarbat/pilove
「sudo rpi-update をしたら状況が変わるかも」等が書いてあるけど。無線LANが繋がらないのだから sudo rpi-update はできないわけで。「Pi3に microSD を差して sudo rpi-update してどうにかなった」てな事例も書かれてるようだけど、ソレって Zero W しか持ってなかったら手詰まりだよなと。
そんな状態なので、pilove は、Pi1 / Pi2 / Pi3 / Pi Zero を持ってる人なら利用できるかもしれないけれど Zero W は未対応、という状況っぽい。
Zero W も有線LANが使える状態にしてあれば利用できる可能性があるかもしれないけど、USB接続の有線LANアダプタを新規購入する等の追加投資が必要になるわけで。ちと厳しい。
- C. microSD を買ってきて pilove のイメージをインストールしてソレを使ってどうにか頑張る。
ちなみに、pilove は以下から入手できる。
_PiLove - LOVE on RaspberryPI
_Index of /downloads
pilove の /etc/network/interfaces の中には、無線LANの ssid や pskのパスワードを設定できそうな感じの記述があったので、そこを書き換えれば無線LANが使えるかなと期待したのだけど。試しに修正してみても再起動すると何故か元に書き戻されてしまって首を捻ったり。
ググってみたら、以下のやり取りが。
_Pi Zero W - Issue #1 - pipaos/pipaos
_wifi on Pi Zero W - Issue #3 - skarbat/pilove
「sudo rpi-update をしたら状況が変わるかも」等が書いてあるけど。無線LANが繋がらないのだから sudo rpi-update はできないわけで。「Pi3に microSD を差して sudo rpi-update してどうにかなった」てな事例も書かれてるようだけど、ソレって Zero W しか持ってなかったら手詰まりだよなと。
そんな状態なので、pilove は、Pi1 / Pi2 / Pi3 / Pi Zero を持ってる人なら利用できるかもしれないけれど Zero W は未対応、という状況っぽい。
Zero W も有線LANが使える状態にしてあれば利用できる可能性があるかもしれないけど、USB接続の有線LANアダプタを新規購入する等の追加投資が必要になるわけで。ちと厳しい。
◎ 余談。 :
raspbina stretch上でも、問題が起きてるパッケージをどうにか見つけて自分でビルド、という解決策があるのかもしれないけど…。
と言っても、誰かがそのあたりの作業をしないとずっとこのまま放置状態になるのでマズいのだけど…。しかしそもそも Raspberry Pi1 / Zero系上で love2d を動かしたい人が世の中に一体どれだけ居るんだよ、という気もするわけで。
ということで、Raspberry Pi1 / Zero上でも60FPSで動かせる2Dゲーム制作用の何かがあればヨサゲかもと期待して色々やってたけど、ちと残念な結果に。音が鳴らないのではゲームっぽくならないよな…。雰囲気出ないよな…。
まあ、前述のとおり、Zero系でも raspbian jessie を使えばなんとかなるけど。しかし、今現在NOOBSを使ってインストールされる raspbian stretch で鳴らないってのが困るなと。
Zero系で GL driver を有効にして love2d を動かすと、30FPSぐらいまで遅くなるのも気になる。OpenGL ESで描画すると60FPSが出るし、Pi3上で GL driver を使っても60FPS出るんだけどな…。GL driver を使うと Raspberry Piの実力が発揮できない、ということかもしれない。
- どのパッケージが間違ってビルドされているのか、見つけ出せる気がしない。たくさんあるし、何をどうやって動作確認すればいいのやら。
- 実機上でのビルドは時間がかかるから、一つ一つビルドし直してるうちに辟易して投げ出しそう。
- Intel CPUが載ったPC上で Raspberry Pi用バイナリをビルドすることも可能らしいけど、環境整備の仕方が分からなかった。
と言っても、誰かがそのあたりの作業をしないとずっとこのまま放置状態になるのでマズいのだけど…。しかしそもそも Raspberry Pi1 / Zero系上で love2d を動かしたい人が世の中に一体どれだけ居るんだよ、という気もするわけで。
- Pi3を買えば、何の苦労もなく、しかもそれなりの速度で動かせるし。
- どうせ Zero系を使う場面って、GPIOで何か制御するのがメインじゃないのかと。とにかく遅いし。
- 学校でZero系導入してプログラミング教育に使うと言っても、どうせ Scratch 1.x を触らせて終わりだろう。Zero系は Scratch 2.0 すら動かないし。
- mp3 や ogg を鳴らすだけなら、mpg123、mpg321、vorbis-tools を入れれば一応鳴るわけで。love2d で鳴らそうとすると困るって話なだけで。
ということで、Raspberry Pi1 / Zero上でも60FPSで動かせる2Dゲーム制作用の何かがあればヨサゲかもと期待して色々やってたけど、ちと残念な結果に。音が鳴らないのではゲームっぽくならないよな…。雰囲気出ないよな…。
まあ、前述のとおり、Zero系でも raspbian jessie を使えばなんとかなるけど。しかし、今現在NOOBSを使ってインストールされる raspbian stretch で鳴らないってのが困るなと。
Zero系で GL driver を有効にして love2d を動かすと、30FPSぐらいまで遅くなるのも気になる。OpenGL ESで描画すると60FPSが出るし、Pi3上で GL driver を使っても60FPS出るんだけどな…。GL driver を使うと Raspberry Piの実力が発揮できない、ということかもしれない。
[ ツッコむ ]
#2 [raspberrypi][love2d] love2dでサウンドを鳴らすソレ
love2dでサウンドを鳴らすソレ。動作確認に使った。License : CC0 / Public Domain ってことで。
_sound_test01.zip
一応ソースもアップロード。
_conf.lua
_main.lua
サウンドデータは以下。
_bgm_loop.wav / _se_beam.wav / _se_explosion.wav
_bgm_loop.mp3 / _se_beam.mp3 / _se_explosion.mp3
_bgm_loop.ogg / _se_beam.ogg / _se_explosion.ogg
_sound_test01.zip
- love sound_test01 で実行。
- ZキーでBGMの再生・一時停止。
- XキーでBGMの停止。
- AキーとSキーで効果音の再生。
- main.lua 内の local srctype = ".wav" を ".ogg" とか ".mp3"に書き換えれば、各フォーマットの再生確認ができるはず。
一応ソースもアップロード。
_conf.lua
_main.lua
サウンドデータは以下。
_bgm_loop.wav / _se_beam.wav / _se_explosion.wav
_bgm_loop.mp3 / _se_beam.mp3 / _se_explosion.mp3
_bgm_loop.ogg / _se_beam.ogg / _se_explosion.ogg
[ ツッコむ ]
2017/11/20(月) [n年前の日記]
#1 [raspberrypi] Raspberry Pi Zero Wの無線LANが使えなくなって困ったり
Raspberry Pi Zero W + raspbian jessie で sudo rpi-update をしたら、再起動後に無線LANが使えなくなった。困った。
ググったら以下のページが。
_Rapberry piの起動時に無線LAN接続ができなくなった. - Atelier d' OFCOURSE
sudo ifup wlan0 と打ったら無線LANが有効になった。ということは、使えるけど起動時に有効になってない状態、ということかな…。
/etc/network/interface を編集。
ググったら以下のページが。
_Rapberry piの起動時に無線LAN接続ができなくなった. - Atelier d' OFCOURSE
sudo ifup wlan0 と打ったら無線LANが有効になった。ということは、使えるけど起動時に有効になってない状態、ということかな…。
/etc/network/interface を編集。
sudo vi /etc/network/interfaceallow-hotplug wlan0 の前に auto wlan0 を追加してから再起動。無線LANが使えるようになった。助かった…。
[ ツッコむ ]
#2 [raspberrypi][love2d] Raspberry Pi Zero W + raspbian jessie でlove2dを使えるようにする手順をメモ
前にもメモした記憶があるけど、今回 raspbian jessie をクリーンインストールしたので、再度メモ。
◎ SDL2(OpenGL無効版)をビルドしてインストール。 :
SDL2は、画像の描画や音声ファイルの再生等をしてくれるライブラリ、という説明でいいのかな…。
公式リポジトリにある、OpenGLが有効になったSDL2をインストールしたい場合は、以下だけで済む。
が、今回は OpenGL無効(にすることで OpenGL ESが有効になる)版をインストールしたいのでビルドする。以下を参考に作業。
_Golang と SDL2 でゲームを作る - KaoriYa
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
ビルドに必要なパッケージをインストール。
ソースをDLして解凍して configure。
結果は以下。Raspberry Pi1 / Zero系の場合、--host=arm-raspberry-linux-gnueabihf をつけて configure しないと、Video driver に rpi が出てこないので、指定は必須。
--host=arm-raspberry-linux-gnueabihf をつけない場合は以下になる。video driver に rpi が無い。
makeしてインストール。1〜2時間ぐらいかかる。
公式リポジトリにある、OpenGLが有効になったSDL2をインストールしたい場合は、以下だけで済む。
sudo aptitude install libsdl2-dev
が、今回は OpenGL無効(にすることで OpenGL ESが有効になる)版をインストールしたいのでビルドする。以下を参考に作業。
_Golang と SDL2 でゲームを作る - KaoriYa
_SDL2-2.0.6 on Raspberry Pi - ChoccyHobNob
ビルドに必要なパッケージをインストール。
sudo aptitude install automake build-essential mercurial qt5-default libtool libasound2-dev libaudio-dev libesd0-dev libsndfile1-dev libmodplug-dev libopenal-dev libfontconfig1-dev libpango1.0-dev freeglut3-dev libfreeimage-dev libjpeg-dev libtiff5-dev libwebp-dev libxcursor-dev libxi-dev libxrandr-dev libxss-dev libudev-dev libsmpeg-dev libxinerama-dev
ソースをDLして解凍して configure。
mkdir ~/sdl2 cd ~/sdl2 wget https://www.libsdl.org/release/SDL2-2.0.5.tar.gz tar xzf SDL2-2.0.5.tar.gz cd SDL2-2.0.5 mkdir build && cd build ../configure --host=arm-raspberry-linux-gnueabihf --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl
結果は以下。Raspberry Pi1 / Zero系の場合、--host=arm-raspberry-linux-gnueabihf をつけて configure しないと、Video driver に rpi が出てこないので、指定は必須。
SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : rpi dummy opengl_es1 opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : NO Using fcitx : NO
--host=arm-raspberry-linux-gnueabihf をつけない場合は以下になる。video driver に rpi が無い。
../configure --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland --disable-video-x11 --disable-video-opengl SDL2 Configure Summary: Building Shared Libraries Building Static Libraries Enabled modules : atomic audio video render events joystick haptic power filesystem threads timers file loadso cpuinfo assembly Assembly Math : Audio drivers : disk dummy oss alsa(dynamic) nas(dynamic) Video drivers : dummy opengl_es2 Input drivers : linuxev linuxkd Using libudev : YES Using dbus : YES Using ime : YES Using ibus : NO Using fcitx : NO
makeしてインストール。1〜2時間ぐらいかかる。
make sudo make install共有ライブラリを一応更新。
sudo ldconfig
$ sudo ldconfig -p | grep SDL2 libSDL2-2.0.so.0 (libc6,hard-float) => /usr/local/lib/libSDL2-2.0.so.0/usr/local/lib/ 以下にインストールされた。
◎ love2dをビルドしてインストール。 :
以下を参考にして作業。
_Building LOVE (日本語) - LOVE
_pilove/build-love2d.sh at master - skarbat/pilove
必要なパッケージをインストール。
ちなみに、raspbian jessie ではなく raspbian stretch の場合は、libturbojpeg1-dev ではなく libturbojpeg0-dev をインストールするっぽい?
love2dのLinux用のソースをDLして解凍して configure してビルドしてインストール。1時間半かかった。
_Building LOVE (日本語) - LOVE
_pilove/build-love2d.sh at master - skarbat/pilove
必要なパッケージをインストール。
sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev sudo aptitude install autotools-dev automake libtool libdevil-dev libogg-dev libflac-dev libflac++-dev libmng-dev sudo aptitude install libturbojpeg1-dev sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev sudo aptitude install devscripts git-core debhelper dh-autoreconf libasound2-dev libudev0 libudev-dev libdbus-1-dev libx11-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev libgl1-mesa-dev libibus-1.0-dev libraspberrypi-dev
ちなみに、raspbian jessie ではなく raspbian stretch の場合は、libturbojpeg1-dev ではなく libturbojpeg0-dev をインストールするっぽい?
sudo aptitude install libturbojpeg0-dev
love2dのLinux用のソースをDLして解凍して configure してビルドしてインストール。1時間半かかった。
mkdir ~/love2d cd ~/love2d wget https://bitbucket.org/rude/love/downloads/love-0.10.2-linux-src.tar.gz tar zxf love-0.10.2-linux-src.tar.gz cd love-0.10.2 ./configure --host=arm-raspberry-linux-gnueabihf make sudo make install
$ which love /usr/bin/love/usr/bin/以下に、love がインストールされた。
◎ 動作確認。 :
love で実行。例の画面が出た。
love2dに、サウンドを鳴らすソースを与えてみた。以下のような警告が表示されたものの、音が鳴った。
音が鳴らない場合は、pulseaudio --start をしてから pulseaudio --kill をしてから試すと音が鳴ったりした。
love2dに、サウンドを鳴らすソースを与えてみた。以下のような警告が表示されたものの、音が鳴った。
AL lib: (WW) alc_initconfig: Failed to initialize backend "pulse"
音が鳴らない場合は、pulseaudio --start をしてから pulseaudio --kill をしてから試すと音が鳴ったりした。
◎ 各パッケージのインストール時にリストアップされたパッケージをメモ。 :
一応、各パッケージのインストール時にリストアップされたパッケージもメモ。環境は、Raspberry Pi Zero W + raspbian jessie。
$ sudo aptitude install automake build-essential mercurial qt5-default libtool libasound2-dev libaudio-dev libesd0-dev libsndfile1-dev libmodplug-dev libopenal-dev libfontconfig1-dev libpango1.0-dev freeglut3-dev libfreeimage-dev libjpeg-dev libtiff5-dev libwebp-dev libxcursor-dev libxi-dev libxrandr-dev libxss-dev libudev-dev libsmpeg-dev libxinerama-dev 以下の新規パッケージがインストールされます: autoconf{a} automake autopoint{a} autotools-dev{a} debhelper{a} dh-autoreconf{a} dh-strip-nondeterminism{a} freeglut3{a} freeglut3-dev gettext{a} intltool-debian{a} libarchive-zip-perl{a} libasound2-dev libasprintf-dev{a} libaudio-dev libaudiofile-dev{a} libavahi-client-dev{a} libavahi-common-dev{a} libcaca-dev{a} libcairo-script-interpreter2{a} libcairo2-dev{a} libdbus-1-dev{a} libdirectfb-dev{a} libdirectfb-extra{a} libdrm-dev{a} libdrm-exynos1{a} libdrm-omap1{a} libdrm-tegra0{a} libegl1-mesa-dev{a} libesd0-dev libfile-stripnondeterminism-perl{a} libflac-dev{a} libfontconfig1-dev libfreeimage-dev libfreeimage3{a} libgettextpo-dev{a} libgettextpo0{a} libgl1-mesa-dev{a} libgles2-mesa-dev{a} libglib2.0-dev{a} libglu1-mesa-dev{a} libharfbuzz-dev{a} libharfbuzz-gobject0{a} libice-dev{a} libjbig-dev{a} libjpeg-dev libjpeg62-turbo-dev{a} libjs-excanvas{a} libltdl-dev{a} liblzma-dev{a} libmail-sendmail-perl{a} libmodplug-dev libogg-dev{a} libopenal-dev libpango1.0-dev libpcre3-dev{a} libpcrecpp0{a} libpixman-1-dev{a} libpthread-stubs0-dev{a} libpulse-dev{a} libpulse-mainloop-glib0{a} libqt5opengl5-dev{a} libqt5sql5{a} libqt5sql5-sqlite{a} libqt5test5{a} libqt5xml5{a} libsdl1.2-dev{a} libslang2-dev{a} libsm-dev{a} libsmpeg-dev libsmpeg0{a} libsndfile1-dev libsys-hostname-long-perl{a} libtiff5-dev libtiffxx5{a} libtool libudev-dev libunistring0{a} libvorbis-dev{a} libwayland-bin{a} libwayland-dev{a} libwebp-dev libx11-dev{a} libx11-doc{a} libx11-xcb-dev{a} libxau-dev{a} libxcb-dri2-0-dev{a} libxcb-dri3-dev{a} libxcb-glx0-dev{a} libxcb-present-dev{a} libxcb-randr0-dev{a} libxcb-render0-dev{a} libxcb-shape0-dev{a} libxcb-shm0-dev{a} libxcb-sync-dev{a} libxcb-xfixes0-dev{a} libxcb1-dev{a} libxcursor-dev libxdamage-dev{a} libxdmcp-dev{a} libxext-dev{a} libxfixes-dev{a} libxft-dev{a} libxi-dev libxinerama-dev libxrandr-dev libxrender-dev{a} libxshmfence-dev{a} libxss-dev libxt-dev{a} libxxf86vm-dev{a} m4{a} mercurial mercurial-common{a} mesa-common-dev{a} po-debconf{a} qt5-default qt5-qmake{a} qtbase5-dev{a} qtbase5-dev-tools{a} x11proto-core-dev{a} x11proto-damage-dev{a} x11proto-dri2-dev{a} x11proto-fixes-dev{a} x11proto-gl-dev{a} x11proto-input-dev{a} x11proto-kb-dev{a} x11proto-randr-dev{a} x11proto-render-dev{a} x11proto-scrnsaver-dev{a} x11proto-xext-dev{a} x11proto-xf86vidmode-dev{a} x11proto-xinerama-dev{a} xorg-sgml-doctools{a} xtrans-dev{a} 更新: 0 個、新規インストール: 135 個、削除: 0 個、保留: 0 個。
$ sudo aptitude install build-essential pkg-config libfreetype6-dev libopenal-dev libvorbis-dev libtheora-dev libmpg123-dev libluajit-5.1-dev libphysfs-dev libmodplug-dev 以下の新規パッケージがインストールされます: libluajit-5.1-2{a} libluajit-5.1-dev libmpg123-dev libphysfs-dev libphysfs1{a} libtheora-dev
$ sudo aptitude install autotools-dev automake libtool libdevil-dev libogg-dev libflac-dev libflac++-dev libmng-dev 以下の新規パッケージがインストールされます: liballegro4.4{a} libdevil-dev libdevil1c2{a} libflac++-dev libflac++6{a} liblcms2-dev{a} libmng-dev
$ sudo aptitude install libturbojpeg1-dev 以下の新規パッケージがインストールされます: libturbojpeg1{a} libturbojpeg1-dev
$ sudo aptitude install devscripts git-core debhelper dh-autoreconf libasound2-dev libudev0 libudev-dev libdbus-1-dev libx11-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxxf86vm-dev libgl1-mesa-dev libibus-1.0-dev libraspberrypi-dev 以下の新規パッケージがインストールされます: at{a} bsd-mailx{a} dctrl-tools{a} debian-keyring{a} devscripts diffstat{a} distro-info-data{a} dput{a} equivs{a} exim4-base{a} exim4-config{a} exim4-daemon-light{a} gir1.2-ibus-1.0{a} git-core hardening-includes{a} libapt-pkg-perl{a} libclass-accessor-perl{a} libclass-inspector-perl{a} libclone-perl{a} libcommon-sense-perl{a} libconvert-binhex-perl{a} libcrypt-ssleay-perl{a} libdigest-hmac-perl{a} libdistro-info-perl{a} libemail-valid-perl{a} libexporter-lite-perl{a} libfile-basedir-perl{a} libibus-1.0-5{a} libibus-1.0-dev libio-pty-perl{a} libio-sessiondata-perl{a} libio-socket-inet6-perl{a} libio-string-perl{a} libio-stringy-perl{a} libipc-run-perl{a} libjson-perl{a} libjson-xs-perl{a} libmime-tools-perl{a} libnet-dns-perl{a} libnet-domain-tld-perl{a} libnet-ip-perl{a} libossp-uuid-perl{a} libossp-uuid16{a} libparse-debcontrol-perl{a} libparse-debianchangelog-perl{a} libperlio-gzip-perl{a} libsoap-lite-perl{a} libsocket6-perl{a} libsub-name-perl{a} libtask-weaken-perl{a} libtext-levenshtein-perl{a} libtie-ixhash-perl{a} libxml-parser-perl{a} libxmlrpc-lite-perl{a} lintian{a} patchutils{a} python3-magic{a} t1utils{a} wdiff{a}
◎ pulseaudioについてメモ。 :
pulseaudio関係をインストールしたい場合は、以下も打つけど…。
raspbian jessie をクリーンインストールした直後は以下のような状態で既にアレコレ入ってたので、わざわざインストールを指定しなくてもよいのではないかな…。
sudo aptitude install pulseaudio libpulse-dev
raspbian jessie をクリーンインストールした直後は以下のような状態で既にアレコレ入ってたので、わざわざインストールを指定しなくてもよいのではないかな…。
$ sudo aptitude search pulse | grep -E '^i' i A libpulse-dev - PulseAudio client development headers and i A libpulse-mainloop-glib0 - PulseAudio client libraries (glib support) i A libpulse0 - PulseAudio client libraries i A libpulsedsp - PulseAudio OSS pre-load library i A pulseaudio - PulseAudio sound server i pulseaudio-module-bluetooth - Bluetooth module for PulseAudio sound serv i A pulseaudio-module-x11 - X11 module for PulseAudio sound server i A pulseaudio-utils - Command line tools for the PulseAudio soun
[ ツッコむ ]
#3 [linux] 自宅サーバの時計がおかしくて悩んだり
自宅サーバが、2017/11/20 01:30頃に何故か勝手に再起動していて首を捻ったのだけど、それはさておき。
どうも自宅サーバの時計がおかしい…。ハードウェアクロックが、異様にずれてる。
ちなみに環境は Vine Linux 6.5。
時刻を確認。
ntpの状態は以下のような感じ。
ハードウェアクロックに、現在時刻を設定してみる。
指定がおかしいようには見えないのだけどなあ…。
そもそも、一体何が、一定時間毎にハードウェアクロックを上書き設定してしまうのだろう?
どうも自宅サーバの時計がおかしい…。ハードウェアクロックが、異様にずれてる。
ちなみに環境は Vine Linux 6.5。
# cat /etc/vine-release Vine Linux 6.5 (Poupille)
時刻を確認。
# date 2017年 11月 20日 月曜日 07:55:46 JST # hwclock -r --debug hwclock from util-linux 2.19 /dev interface to clock を使います。 直前のずれの修正は 1969 年以降 1511128259 秒時点で行なわれました 直前の調整は 1969 年以降 1511128259 秒時点で行なわれました ハードウェア時計はローカル時刻です ハードウェア時計ローカル時刻を保持しているとみなします クロックチックを待っています... ...クロックチックを取得しました ハードウェア時計から読込んだ時刻: 2017/11/19 22:55:52 ハードウェア時計時刻 : 2017/11/19 22:55:52 = 1969 年以来 1511099752 秒 2017年11月19日 22時55分52秒 -0.203008 秒ハードウェアクロックが、ちょうど9時間ずれてる。おかしい。UTC絡みなのだろうか…?
ntpの状態は以下のような感じ。
# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== -ntp1.plala.or.j 202.234.233.109 4 u 140 256 377 19.093 -4.844 0.514 -ntp2.plala.or.j 202.234.233.109 4 u 203 256 377 12.973 -3.774 0.957 +ntp1.jst.mfeed. 133.243.236.17 2 u 204 256 377 20.810 -1.036 0.505 *ntp2.jst.mfeed. 133.243.236.17 2 u 196 256 377 21.901 -0.961 0.599 +ntp3.jst.mfeed. 133.243.236.17 2 u 91 256 377 18.489 -0.653 0.717 LOCAL(0) .LOCL. 10 l 59m 64 0 0.000 0.000 0.000
ハードウェアクロックに、現在時刻を設定してみる。
# date 2017年 11月 20日 月曜日 08:28:08 JST # hwclock --systohc --localtime --debug hwclock from util-linux 2.19 /dev interface to clock を使います。 直前のずれの修正は 1969 年以降 1511132257 秒時点で行なわれました 直前の調整は 1969 年以降 1511132257 秒時点で行なわれました ハードウェア時計はローカル時刻です ハードウェア時計ローカル時刻を保持しているとみなします クロックチックを待っています... ...クロックチックを取得しました ハードウェア時計から読込んだ時刻: 2017/11/19 23:28:23 ハードウェア時計時刻 : 2017/11/19 23:28:23 = 1969 年以来 1511101703 秒 Time elapsed since reference time has been 0.004853 seconds. Delaying further to reach the new time. ハードウェア時計を 08:28:23 に設定 = 1969 年以来 1511134103 秒 ioctl(RTC_SET_TIME) に成功しました。 前回の調整以来、少なくとも一日経過しないと、ずれを修正できません。 # hwclock --show ; date 2017年11月20日 08時29分18秒 -0.351335 秒 2017年 11月 20日 月曜日 08:29:18 JST設定できたように見えるけど、しばらくするとまた時間がずれる。何故。
◎ 関係ありそうなファイルを確認。 :
# strings /etc/localtime TZif2 JCST TZif2 JCST JST-9
# cat /etc/sysconfig/clock ZONE="Asia/Tokyo" UTC=false ARC=false
# cat /etc/adjtime 0.018596 1511134103 0.000000 1511134103 LOCAL
指定がおかしいようには見えないのだけどなあ…。
そもそも、一体何が、一定時間毎にハードウェアクロックを上書き設定してしまうのだろう?
◎ 「11分モード」なるものがあるらしい。 :
以下のページを眺めてたら、「11 minute mode(11分モード)」なるものがあると知った。11分毎にハードウェアクロックを再設定してしまう機能がカーネルにあるらしく、ソレを利用してntpサーバがハードウェアクロックを設定してしまう時があるそうで。
_日時を設定して再起動すると標準時刻に戻ってしまう | アットマークテクノ ユーザーズサイト
_hardware clockがずれる件と 11 minute mode - (ひ)メモ
_Man page of HWCLOCK - (カーネルによるハードウェアクロックの自動合わせ、の項を参照)
_RHEL6のtickless kernel - とあるSIerの憂鬱
_設定ファイル
_パソコンの時計 ハードウェアクロックとシステムクロック
状態を確認してみる。
/etc/adjtime の3行目が、LOCAL か UTC かで、ハードウェアクロックから時刻を読み取る際の処理が変わってくるらしい。試しに UTC にしてみた。
そもそもLinuxのシステムクロックはUTCで、ハードウェアクロックもUTCを前提にしている場合が多い、という話も見かけた。
どうせ Linux しか動かさない環境なのだから、これで様子を見てみよう…。
_日時を設定して再起動すると標準時刻に戻ってしまう | アットマークテクノ ユーザーズサイト
_hardware clockがずれる件と 11 minute mode - (ひ)メモ
_Man page of HWCLOCK - (カーネルによるハードウェアクロックの自動合わせ、の項を参照)
_RHEL6のtickless kernel - とあるSIerの憂鬱
_設定ファイル
_パソコンの時計 ハードウェアクロックとシステムクロック
状態を確認してみる。
# ntptime | grep status status 0x2001 (PLL,NANO),UNSYNC の表記が無いので、11 minute mode(11分モード)が有効になっているらしい。つまりウチの自宅サーバは、ntpd だかカーネルだか分からんけど、11分毎にハードウェアクロックが上書きされてしまう模様。
/etc/adjtime の3行目が、LOCAL か UTC かで、ハードウェアクロックから時刻を読み取る際の処理が変わってくるらしい。試しに UTC にしてみた。
vi /etc/adjtime 3行目をUTCに
vi /etc/sysconfig/clock UTC=true に
hwclock --systohc --utc --debug # hwclock -r --debug hwclock from util-linux 2.19 /dev interface to clock を使います。 直前のずれの修正は 1969 年以降 1511139353 秒時点で行なわれました 直前の調整は 1969 年以降 1511139353 秒時点で行なわれました ハードウェア時計はUTC時刻です ハードウェア時計UTC時刻を保持しているとみなします クロックチックを待っています... ...クロックチックを取得しました ハードウェア時計から読込んだ時刻: 2017/11/20 00:59:18 ハードウェア時計時刻 : 2017/11/20 00:59:18 = 1969 年以来 1511139558 秒 2017年11月20日 09時59分18秒 -0.768737 秒
そもそもLinuxのシステムクロックはUTCで、ハードウェアクロックもUTCを前提にしている場合が多い、という話も見かけた。
どうせ Linux しか動かさない環境なのだから、これで様子を見てみよう…。
◎ hwclockについて。 :
- hwclock -w と hwclock --systohc は同じ。ハードウェアクロックを設定する。
- hwclock -r と hwclock --show は同じ。ハードウェアクロックを読み出す。
- --debug をつけると、詳細を表示してくれる。
- --utc をつけると UTC として扱い、--localtime をつけるとローカルタイムとして扱う。
[ ツッコむ ]
2017/11/21(火) [n年前の日記]
#1 [cg_tools] PaintShop Pro 2018の体験版を試用
数日前にソースネクストのページを見ていたら Corel PaintShop Pro 2018 が安く売られていて、どんなソフトなんだろうと気になったわけで。いや、大昔に、たしか Ver. 4.2J とかその時期に購入したことはあったのだけど、さすがに今では全然違っちゃってるだろうと。
_体験版があるらしい ので、試しにインストール。30日間利用できるらしい。
インストール場所も何も尋ねてこないままインストールされた。C:\Program Files\Corel\Corel PaintShop Pro 2018 (64-bit)\ にインストールされた模様。
試用には、Corelのアカウントが必要らしい。以前何かで登録してあったので、そのアカウントを利用。
触った感じでは…。トーンカーブが使える Photoshop Elements、かなあ…。
「Ver. 2018は起動時間が50%速くなったぞ!」と謳われてるけど、それでも結構時間がかかる。体感では、Photoshop Elements 8.0の数倍長い起動時間のような印象。前バージョンは一体どんだけ遅かったんや。
機能面は…。オブジェクトの抽出、がちょっと気になった。画像 → オブジェクトの抽出、で使える。切り抜きたい部分をブラシで囲んでから、その中をバケツで塗って実行すると、ブラシで塗った部分を境界として切り抜き作業をしてくれる。PhotoImpactにあった機能を持ってきたらしい。いや、再実装したのかもしれんけど。たしか Photoshop にもこういう機能が…。境界線の調整、だったっけ? アレをもっと荒くしたような機能、っぽいなと。
ブラシ関係は、これといった魅力を感じなかった。そもそも Corel は、お絵かき用途に Painterシリーズを推しているらしいので、PaintShop Pro のブラシ機能についてはあまり力を入れてないらしい。
自分は普段、GIMP、Krita、CLIP STUDIO PAINT、場合によっては稀に Photoshop Elements、あたりを使うことで作業を済ませたりするのだけど…。そんな状態なので、「コレは絶対に欲しい」と思う何かしらを PaintShop Pro には感じなかった。が、Photoshop の代替品、かつ、安いソフトが欲しいという場面なら、このソフトを選択するのもアリかなと。少なくとも機能面は十分に揃っていて、Photoshop Elements + α のように感じたわけで。
まあ、自分、Paintgraphic 3 もHDDの肥やしにしてる状態なので、コレ以上この手のソフトを入手してもおそらく使わないのでは、てな予感もあるのだけど。
_体験版があるらしい ので、試しにインストール。30日間利用できるらしい。
インストール場所も何も尋ねてこないままインストールされた。C:\Program Files\Corel\Corel PaintShop Pro 2018 (64-bit)\ にインストールされた模様。
試用には、Corelのアカウントが必要らしい。以前何かで登録してあったので、そのアカウントを利用。
触った感じでは…。トーンカーブが使える Photoshop Elements、かなあ…。
「Ver. 2018は起動時間が50%速くなったぞ!」と謳われてるけど、それでも結構時間がかかる。体感では、Photoshop Elements 8.0の数倍長い起動時間のような印象。前バージョンは一体どんだけ遅かったんや。
機能面は…。オブジェクトの抽出、がちょっと気になった。画像 → オブジェクトの抽出、で使える。切り抜きたい部分をブラシで囲んでから、その中をバケツで塗って実行すると、ブラシで塗った部分を境界として切り抜き作業をしてくれる。PhotoImpactにあった機能を持ってきたらしい。いや、再実装したのかもしれんけど。たしか Photoshop にもこういう機能が…。境界線の調整、だったっけ? アレをもっと荒くしたような機能、っぽいなと。
ブラシ関係は、これといった魅力を感じなかった。そもそも Corel は、お絵かき用途に Painterシリーズを推しているらしいので、PaintShop Pro のブラシ機能についてはあまり力を入れてないらしい。
自分は普段、GIMP、Krita、CLIP STUDIO PAINT、場合によっては稀に Photoshop Elements、あたりを使うことで作業を済ませたりするのだけど…。そんな状態なので、「コレは絶対に欲しい」と思う何かしらを PaintShop Pro には感じなかった。が、Photoshop の代替品、かつ、安いソフトが欲しいという場面なら、このソフトを選択するのもアリかなと。少なくとも機能面は十分に揃っていて、Photoshop Elements + α のように感じたわけで。
まあ、自分、Paintgraphic 3 もHDDの肥やしにしてる状態なので、コレ以上この手のソフトを入手してもおそらく使わないのでは、てな予感もあるのだけど。
[ ツッコむ ]
2017/11/22(水) [n年前の日記]
#1 [lua][windows] luarocksとluacheckをWindowsにインストール
luarocksなるものをインストールすると、lua関係の便利なアレコレが簡単にインストールできるようになるらしい。更に、luarocks を使って luacheck をインストールすることで、luaのソースファイルを静的チェックできるようで。試しにWindows10 x64上でインストールしてみようかなと。
以下を参考にして作業。
_にっき♪: luacheck
_LuaとLuaRocksのWindowsインストール
_Installation instructions for Windows - luarocks/luarocks Wiki
以下を参考にして作業。
_にっき♪: luacheck
_LuaとLuaRocksのWindowsインストール
_Installation instructions for Windows - luarocks/luarocks Wiki
◎ luarocksをインストール。 :
インストールには、Lua とリンクライブラリとやらが必要。以下の2つを
_Lua Binaries Download
からDLして解凍。インストール。
また、途中でコンパイルをするから、Visual Studio が必要になるっぽい。自分の環境は Visual Studio 2015 Community をインストールしてあるので、スタートメニューから、開発者コマンドプロンプトを実行して、その上で作業した。
_LuaRocks releases から、luarocks-2.4.3-win32.zip をDL、解凍。luaにPATHが通ってる状態で以下を打って luarocks をインストール。
気を利かせたつもりで、事前にLuaRocksインストール場所を作成しておくと、「指定されたフォルダが既にあるからインストールできねえ」と文句を言われる。事前に作成しないほうがヨサゲ。
luarocks.bat その他が作られた。環境変数 PATH に通しておく。
lua-5.3.4_Win32_bin.zip lua-5.3.4_Win32_dllw4_lib.zip
また、途中でコンパイルをするから、Visual Studio が必要になるっぽい。自分の環境は Visual Studio 2015 Community をインストールしてあるので、スタートメニューから、開発者コマンドプロンプトを実行して、その上で作業した。
_LuaRocks releases から、luarocks-2.4.3-win32.zip をDL、解凍。luaにPATHが通ってる状態で以下を打って luarocks をインストール。
install /LUA Luaインストール場所\ /P LuaRocksインストール場所今回は以下のフォルダを指定。
install /LUA D:\Dev\lua_x86\ /P D:\Dev\luarocks
気を利かせたつもりで、事前にLuaRocksインストール場所を作成しておくと、「指定されたフォルダが既にあるからインストールできねえ」と文句を言われる。事前に作成しないほうがヨサゲ。
luarocks.bat その他が作られた。環境変数 PATH に通しておく。
◎ luacheckをインストール。 :
luarocks install luacheck で、luacheck がインストールできるはずなのだけど…。
lfs.dll とやらが作れないぞ、と怒られてしまった。
_installing on windows fails with LNK1107 (lua 5.2) - Issue #82 - keplerproject/luafilesystem
Visual Studio 2015 (VC14) と一致する何かしらのファイル群が必要らしい…。
_LuaBinaries - Browse /5.3.4/Windows Libraries/Static から、lua-5.3.4_Win32_vc14_lib.zip をDLして解凍。Luaインストール場所にコピー。どうも lua53.lib というファイルが必要だったらしい。
luarocksインストール場所\config-5.3.lua の修正も必要。中の一部を以下に変更。
この状態で再度インストールを試す。
Luaインストール場所\systree\bin\luacheck.bat ができた。Luaインストール場所の直下にコピー。
D:\Dev\lua_x86>luarocks install luacheck Installing https://luarocks.org/luacheck-0.21.2-1.src.rock Missing dependencies for luacheck 0.21.2-1: luafilesystem >= 1.6.3 (not installed) luacheck 0.21.2-1 depends on luafilesystem >= 1.6.3 (not installed) Installing https://luarocks.org/luafilesystem-1.7.0-2.src.rock cl /nologo /MD /O2 -c -Fosrc/lfs.obj -ID:/Dev/lua_x86/include src/lfs.c lfs.c link -dll -def:lfs.def -out:lfs.dll D:/Dev/lua_x86/lua53.dll src/lfs.obj Microsoft (R) Incremental Linker Version 14.00.24215.1 Copyright (C) Microsoft Corporation. All rights reserved. D:\Dev\lua_x86\lua53.dll : fatal error LNK1107: ファイルが無効であるか、または壊れています: 0x330 を読み取れません。 Error: Failed installing dependency: https://luarocks.org/luafilesystem-1.7.0-2.src.rock - Build error: Failed compiling module lfs.dll
lfs.dll とやらが作れないぞ、と怒られてしまった。
_installing on windows fails with LNK1107 (lua 5.2) - Issue #82 - keplerproject/luafilesystem
Visual Studio 2015 (VC14) と一致する何かしらのファイル群が必要らしい…。
_LuaBinaries - Browse /5.3.4/Windows Libraries/Static から、lua-5.3.4_Win32_vc14_lib.zip をDLして解凍。Luaインストール場所にコピー。どうも lua53.lib というファイルが必要だったらしい。
luarocksインストール場所\config-5.3.lua の修正も必要。中の一部を以下に変更。
LUALIB = 'lua53.dll' ↓ LUALIB = 'lua53.lib'
この状態で再度インストールを試す。
luarocks install luafilesystem luarocks install luacheck
Luaインストール場所\systree\bin\luacheck.bat ができた。Luaインストール場所の直下にコピー。
◎ 動作確認。 :
luacheck hoge.lua でチェックができる。
が、love2d用のluaソースを渡すと、「loveって何だ? そんなの知らねえよ!」と山ほど怒られる。これでは…使えないな…。
が、love2d用のluaソースを渡すと、「loveって何だ? そんなの知らねえよ!」と山ほど怒られる。これでは…使えないな…。
この記事へのツッコミ
- Re: luarocksとluacheckをWindowsにインストール by 名無しさん 2022/10/21 23:34
- 突然のコメント失礼いたします.
本記事を参考にLuaの導入をしようとしています.(Win10 62bit版 VS2017)です)
installコマンドをコマンドプロンプト上で実行できません.
PATHを通せばいいのかな,と考え調べてみたのですがwingetのサブコマンドとしてのinstallしか出てきません.
もしよろしければ>install /LUA path /P PATHの部分をどのように実行されているかお教えいただけませんでしょうか? - Re: luarocksとluacheckをWindowsにインストール by mieki256 2022/10/26 00:24
- > wingetのサブコマンドとしてのinstallしか出てきません.
luarocks-2.4.3-win32.zip を解凍すると、中に install.bat が入っていて、当時はソレを呼び出してインストール処理をしていたようです。
luarocks-x.x.x-windows-32.zip ではなくて、
luarocks-x.x.x-win32.zip を入手する必要があります。
> install /LUA path /P PATHの部分をどのように実行されているか
記事中にもメモしてありますが以下の指定で実行していたようです。
install /LUA D:\Dev\lua_x86\ /P D:\Dev\luarocks
D:\Dev\lua_x86\ に lua.exe その他が既に入っていて、
D:\Dev\luarocks\ に luarocks をインストールしようとしています。
ただ、私自身は、後々 hererocks というツールを使って
Lua と Luarocks をビルドして使う形に移行したようです…。
2021/06/19頃の日記に、その旨メモしてありました…。
[ ツッコミを読む(2) | ツッコむ ]
#2 [lua][windows] Visual Studio Code にLua関係の拡張をインストールしてみたり
Windows10 x64 + Visual Studio Code 1.18.1 に、Lua関係の拡張をインストールしてみたり。
_vscode-lua - Visual Studio Marketplace
_LOVE - Visual Studio Marketplace
Alt + L で love2d を実行できる、らしい。
そこそこ補完が効いてくれる模様。
_vscode-lua - Visual Studio Marketplace
_LOVE - Visual Studio Marketplace
Alt + L で love2d を実行できる、らしい。
そこそこ補完が効いてくれる模様。
[ ツッコむ ]
#3 [lua][emacs] Emacs(NT Emacs)にLuaとlove2d関係のauto-completeをインストール
Lua関係の auto-completeパッケージを見かけたので試しにインストール。Lua用のソースを書く際に補完してくれるようになるっぽい。
環境は Windows10 x64 + NTEmacs 24.5.1。 _Lua-mode と auto-complete はインストール済み。
_rolpereira/auto-complete-lua.el: Auto-complete builtin Lua functions in Emacs
_rolpereira/auto-complete-love.el: Auto-complete LOVE functions in Emacs
それぞれzipファイルをDLして解凍。
以下のファイルやフォルダを、Emacsからパスが通ったところにコピー。
~/.emacs に以下を記述。
auto-complete-lua と auto-complete-love の両方を入れる場合、auto-complete-love側の設定だけをしておけばいいらしい。最初、両方の設定を書いてしまったら補完がちゃんと動かなかった。
参考までに、~/.emacs のLua関係の設定部分をメモ。
ちなみに、love2d-minor-mode は以下で入手できる。
_ejmr/love-minor-mode: An Emacs minor mode for LOVE
環境は Windows10 x64 + NTEmacs 24.5.1。 _Lua-mode と auto-complete はインストール済み。
_rolpereira/auto-complete-lua.el: Auto-complete builtin Lua functions in Emacs
_rolpereira/auto-complete-love.el: Auto-complete LOVE functions in Emacs
それぞれzipファイルをDLして解凍。
以下のファイルやフォルダを、Emacsからパスが通ったところにコピー。
auto-complete-lua.el auto-complete-lua-tests.el lua-documentation auto-complete-love.el auto-complete-love-tests.el
~/.emacs に以下を記述。
(require 'auto-complete-lua) ;; (add-hook 'lua-mode-hook '(lambda () ;; (setq ac-sources '(ac-source-lua)) ;; (auto-complete-mode 1))) (require 'auto-complete-love) (add-hook 'lua-mode-hook '(lambda () (setq ac-sources '(ac-source-love)) ; Uncomment only if you're using `auto-complete-lua' (see below) (push ac-source-lua ac-sources) (auto-complete-mode 1)))
auto-complete-lua と auto-complete-love の両方を入れる場合、auto-complete-love側の設定だけをしておけばいいらしい。最初、両方の設定を書いてしまったら補完がちゃんと動かなかった。
参考までに、~/.emacs のLua関係の設定部分をメモ。
;; ---------------------------------------- ;; lua-mode ;; This snippet enables lua-mode ;; This line is not necessary, if lua-mode.el is already on your load-path ;; (add-to-list 'load-path "/path/to/directory/where/lua-mode-el/resides") (autoload 'lua-mode "lua-mode" "Lua editing mode." t) (add-to-list 'auto-mode-alist '("\\.lua$" . lua-mode)) (add-to-list 'interpreter-mode-alist '("lua" . lua-mode)) (setq lua-indent-level 2) (add-hook 'lua-mode-hook '(lambda () (abbrev-mode 1) (electric-pair-mode t) (electric-indent-mode t) (electric-layout-mode t) ;; ||も括弧の補完の対象にする ;; (add-to-list 'electric-pair-pairs '(?| . ?|)) )) ;; love2d love-minor-mode (require 'love-minor-mode) (require 'auto-complete-lua) ;; (add-hook 'lua-mode-hook '(lambda () ;; (setq ac-sources '(ac-source-lua)) ;; (auto-complete-mode 1))) (require 'auto-complete-love) (add-hook 'lua-mode-hook '(lambda () (setq ac-sources (append ac-sources '(ac-source-love ac-source-lua))) (auto-complete-mode 1)))ac-sources に、ac-source-love と ac-source-lua を追加する形にしてみた。
ちなみに、love2d-minor-mode は以下で入手できる。
_ejmr/love-minor-mode: An Emacs minor mode for LOVE
[ ツッコむ ]
2017/11/23(木) [n年前の日記]
#1 [lua] Luaについて勉強中
Luaでクラスを作る方法について勉強中。以下を参考にしてちょこちょこ試してたり。
_Luaでオブジェクト指向(1)―基本はコロン記法とメタテーブル - Minecraftとタートルと僕
_blog/luaoo.md at master - kengonakajima/blog
_第 4 回: Lua のオブジェクト指向について紹介する - WTOPIA v1.0 documentation
_八角研究所 : 高速スクリプト言語「Lua」を始めよう!(4) - 高速スクリプト言語「Lua」を始めよう!(4)
_Luaの文法とオブジェクト指向 - yappyの日記
_Luaでオブジェクト指向(1)―基本はコロン記法とメタテーブル - Minecraftとタートルと僕
_blog/luaoo.md at master - kengonakajima/blog
_第 4 回: Lua のオブジェクト指向について紹介する - WTOPIA v1.0 documentation
_八角研究所 : 高速スクリプト言語「Lua」を始めよう!(4) - 高速スクリプト言語「Lua」を始めよう!(4)
_Luaの文法とオブジェクト指向 - yappyの日記
[ ツッコむ ]
2017/11/24(金) [n年前の日記]
#1 [lua][love2d] love2dで敵をたくさん出してみる
Luaでクラスを作る方法が分かってきたので love2d で実験。雑魚的相当のオブジェクトをたくさん出せそうかテスト。
こんな感じに。
以下の環境で動かしてみたけれど、どちらも同じように動作した。
こんな感じに。
以下の環境で動かしてみたけれど、どちらも同じように動作した。
- Windows10 x64 + love2d 0.10.2
- Raspberry Pi Zero W + raspbian jessie + SDL2(OpenGL ES enable) + love2d
◎ 画像とソース。 :
使用画像は以下。License : CC0 / Public Domain ってことで。
_bg_640x480_02.png
_enemy02.png
ソースは以下。
_conf.lua
_main.lua
画像とソースをテキトーな名前のフォルダに入れて、love フォルダ名、で実行。
_bg_640x480_02.png
_enemy02.png
ソースは以下。
_conf.lua
function love.conf(t) t.window.title = "Enemys Test01" t.window.width = 1280 t.window.height = 720 t.window.vsync = true -- t.window.fullscreen = true -- t.window.fullscreentype = "exclusive" end
_main.lua
function love.load() -- init -- set filter love.graphics.setDefaultFilter("nearest", "nearest") scr_w = 640 scr_h = 480 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 bgimg = love.graphics.newImage("bg_640x480_02.png") enemy_img = love.graphics.newImage("enemy02.png") -- define enemy class Enemy = {} Enemy.new = function(x, y, dx, dy, xw, ang, angspd, img) local obj = {} obj.activate = true obj.x = x obj.y = y obj.dx = dx obj.dy = dy obj.bx = x obj.by = y obj.xw = xw obj.angle = ang obj.angspd = angspd obj.img = img obj.img_w = img:getWidth() obj.img_h = img:getHeight() setmetatable(obj, {__index = Enemy}) return obj end Enemy.update = function(self, dt) if not self.activate then return end self.bx = self.bx + self.dx * dt self.y = self.y + self.dy * dt self.x = self.bx + self.xw * math.sin(math.rad(self.angle)) self.angle = (self.angle + self.angspd * dt) % 360.0 if self.y - self.img_h > scr_h then self.activate = false end end Enemy.draw = function(self) if not self.activate then return end local x = self.x - self.img_w / 2 local y = self.y - self.img_h / 2 local ang = math.rad(self.angle) local scale = 1.0 local ox = self.img_w / 2 local oy = self.img_h / 2 love.graphics.draw(self.img, x, y, ang, scale, scale, ox, oy) end -- work enemys = {} born_timer = 0.0 math.randomseed(0) -- framerate steady min_dt = 1 / 60 next_time = love.timer.getTime() end function love.update(dt) -- update next_time = next_time + min_dt if dt > 1.0 then return end born_timer = born_timer + dt if born_timer >= 0.3 then -- enemy born born_timer = born_timer - 0.3 x = math.random(scr_w) y = -32 dx = 0 dy = 40 + math.random(80) xw = 50 ang = math.random(360) angspd = 240 obj = Enemy.new(x, y, dx, dy, xw, ang, angspd, enemy_img) table.insert(enemys, obj) end -- move enemys for i, spr in ipairs(enemys) do spr:update(dt) end -- remove enemy local elen = #enemys for i=elen,1,-1 do if not enemys[i].activate then table.remove(enemys, i) end end end function love.draw() -- set canvas love.graphics.setCanvas(canvas) -- draw BG love.graphics.setColor(255, 255, 255) love.graphics.draw(bgimg, 0, 0) -- draw objects love.graphics.setColor(255, 255, 255) for i, spr in ipairs(enemys) do spr:draw() end -- unset canvas love.graphics.setCanvas() -- draw canvas to window love.graphics.setColor(255, 255, 255) love.graphics.draw(canvas, scr_ofsx, scr_ofsy, 0, scr_scale, scr_scale) love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 10, 10) love.graphics.print("env: "..tostring(love.system.getOS()), 10, 40) love.graphics.print("enemys: "..tostring(#enemys), 10, 60) if love.system.getOS() == "Windows" then -- wait local cur_time = love.timer.getTime() if next_time <= cur_time then next_time = cur_time else love.timer.sleep(next_time - cur_time) end end end function love.keypressed(key, isrepeat) -- ESC to exit if key == "escape" then love.event.quit() end end
画像とソースをテキトーな名前のフォルダに入れて、love フォルダ名、で実行。
◎ 少し解説。 :
上記のソースでは、Enemy というクラスを作って処理をしてる。以下の3つのメソッドを用意した。
Luaでクラスを作る際の書き方については、以下の解説ページが参考になった。
_Luaでオブジェクト指向(1)―基本はコロン記法とメタテーブル - Minecraftとタートルと僕
_blog/luaoo.md at master - kengonakajima/blog
色んな書き方があるっぽいけど…。
- クラス生成用メソッド Enemy.new
- 座標更新処理用メソッド Enemy.update
- 描画処理用メソッド Enemy.draw
Luaでクラスを作る際の書き方については、以下の解説ページが参考になった。
_Luaでオブジェクト指向(1)―基本はコロン記法とメタテーブル - Minecraftとタートルと僕
_blog/luaoo.md at master - kengonakajima/blog
色んな書き方があるっぽいけど…。
- hoge.new の中で他のメソッドも書くやり方だと、インスタンスを作るたびにメソッドが別領域に作られてメモリの無駄遣いになる。
- かといって setmetatable を使うと、メソッドは同じ領域を使うからメモリの面では助かるけど、メソッド名の検索が一々入るから処理速度は遅くなる。
[ ツッコむ ]
2017/11/25(土) [n年前の日記]
#1 [dtm] FL Studio 12.5.1をアンインストールしたら酷いことに
先日、FL Studio を 12.5.1 にアップグレードしたら VST のスキャンが異様に遅くなってしまって。12.x に上書きインストールしたせいでおかしくなったのかなと思えてきたので、アンインストールして再インストールしてみようとしたのだけど。
FL Studio をアンインストールしたら、フリーのVST群をインストールしてあった C:\Program Files (x86)\Vstplugins\ フォルダまで削除されてしまった…。なんてことをしてくれるんだ…。
幸い、C:\Program Files (x86)\Vstplugins\ は Dドライブに移動してシンボリックリンクを張ってたから、リンクが削除されただけでファイルの実体は全部残ってたから助かったのだけど。C:\Program Files (x86)\Common Files\VST* 等も削除された可能性があるかもなと…。
FL Studio をアンインストールしたら、フリーのVST群をインストールしてあった C:\Program Files (x86)\Vstplugins\ フォルダまで削除されてしまった…。なんてことをしてくれるんだ…。
幸い、C:\Program Files (x86)\Vstplugins\ は Dドライブに移動してシンボリックリンクを張ってたから、リンクが削除されただけでファイルの実体は全部残ってたから助かったのだけど。C:\Program Files (x86)\Common Files\VST* 等も削除された可能性があるかもなと…。
[ ツッコむ ]
2017/11/26(日) [n年前の日記]
#1 [cg_tools] ドット絵作成中
EDGE2を使ってドット絵作成中。シューティングゲームの自機に使えそうなドット絵を描こうとしてるところ。
やはり、左右対称モード、上下対称モードがが欲しい…。コピーして貼り付けて反転するのが面倒…。バランスが掴みづらい。
やはり、左右対称モード、上下対称モードがが欲しい…。コピーして貼り付けて反転するのが面倒…。バランスが掴みづらい。
[ ツッコむ ]
2017/11/27(月) [n年前の日記]
#1 [love2d][lua] love2dでシューティングゲームの自機っぽいものを書いてたり
love2dを使って、縦スクロールシューティングゲームの自機っぽい処理を書いてたり。
こんな感じに。カーソルキーで移動。Zキーで弾を撃つ方向の変更/固定を切り替え。
動作確認環境は、Windows10 x64 + love2d 0.10.2。
弾を加算合成で描画してるので、love2d 0.10.0以降が必要。もっとも、加算合成の指定部分を修正すれば love2d 0.9.x でも動きそうだけど…。
こんな感じに。カーソルキーで移動。Zキーで弾を撃つ方向の変更/固定を切り替え。
動作確認環境は、Windows10 x64 + love2d 0.10.2。
弾を加算合成で描画してるので、love2d 0.10.0以降が必要。もっとも、加算合成の指定部分を修正すれば love2d 0.9.x でも動きそうだけど…。
◎ 使用画像。 :
以下が自作の使用画像。License : CC0 / Public Domain ってことで。
_airplane_03_64x64_000.png
_airplane_03_64x64_001.png
_bg_640x480_02.png
_bullet_01_32x32.png
_airplane_03_64x64_000.png
_airplane_03_64x64_001.png
_bg_640x480_02.png
_bullet_01_32x32.png
◎ ソース。 :
_conf.lua
_main.lua
function love.conf(t) t.window.title = "Stg Player Test01" t.window.width = 1280 t.window.height = 720 t.window.vsync = true -- t.window.fullscreen = true -- t.window.fullscreentype = "exclusive" end
_main.lua
-- Stg Player Test01 angle_change_key = false function love.load() -- init -- set filter love.graphics.setDefaultFilter("nearest", "nearest") scr_w = 640 scr_h = 480 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 bgimg = love.graphics.newImage("bg_640x480_02.png") player_img_a = love.graphics.newImage("airplane_03_64x64_000.png") player_img_b = love.graphics.newImage("airplane_03_64x64_001.png") bullet_img = love.graphics.newImage("bullet_01_32x32.png") -- define player class Player = {} Player.new = function(x, y, img_a, img_b) local obj = {} obj.activate = true obj.speed = 300 obj.x = x obj.y = y obj.gun_angle = -90 obj.gun_angle_change_mode = false obj.img_a = img_a obj.img_b = img_b obj.img_w = img_a:getWidth() obj.img_h = img_a:getHeight() setmetatable(obj, {__index = Player}) return obj end Player.update = function(self, dt) if not self.activate then return end if angle_change_key then self.gun_angle_change_mode = not(self.gun_angle_change_mode) angle_change_key = false end local ang = -1 if love.keyboard.isDown("left") then ang = 180 elseif love.keyboard.isDown("right") then ang = 0 end if love.keyboard.isDown("up") then if ang < 0 then ang = 270 elseif ang == 0 then ang = 270 + 45 else ang = 180 + 45 end elseif love.keyboard.isDown("down") then if ang < 0 then ang = 90 elseif ang == 0 then ang = 45 else ang = 180 - 45 end end if ang >= 0 then local spd = self.speed * dt local ra = math.rad(ang) self.x = self.x + (spd * math.cos(ra)) self.y = self.y + (spd * math.sin(ra)) if self.gun_angle_change_mode then -- gun angle change local tgt_ang = (ang + 180) % 360 if self.gun_angle ~= tgt_ang then local a = (tgt_ang - self.gun_angle) % 360 if a > 180 then a = a - 360 end local spd = 5 if a > 0 then if a < spd then self.gun_angle = tgt_ang else self.gun_angle = (self.gun_angle + spd) % 360 end elseif a < 0 then if a > -spd then self.gun_angle = tgt_ang else self.gun_angle = (self.gun_angle - spd) % 360 end end end end end -- move area check local wh = self.img_w / 2 local hh = self.img_h / 2 local xmin, ymin = wh, hh local xmax, ymax = scr_w - wh, scr_h - hh self.x = math.min(math.max(self.x, xmin), xmax) self.y = math.min(math.max(self.y, ymin), ymax) end Player.draw = function(self) if not self.activate then return end local ox, oy = self.img_w / 2, self.img_h / 2 local x, y = self.x, self.y local ang = math.rad(self.gun_angle) local scale = 1.0 love.graphics.draw(self.img_a, x, y, 0, scale, scale, ox, oy) love.graphics.draw(self.img_b, x, y, ang, scale, scale, ox, oy) end -- define player bullet class PlayerBullet = {} PlayerBullet.new = function(x, y, ang, img) local obj = { speed = 600, activate = true, x = x, y = y, ang = ang, img = img } obj.img_w, obj.img_h = img:getWidth(), img:getHeight() obj.img_wh, obj.img_hh = obj.img_w / 2, obj.img_h / 2 setmetatable(obj, {__index = PlayerBullet}) return obj end PlayerBullet.update = function(self, dt) if not self.activate then return end local ra = math.rad(self.ang) self.x = self.x + (math.cos(ra) * self.speed * dt) self.y = self.y + (math.sin(ra) * self.speed * dt) local xmin, ymin = -self.img_wh, -self.img_hh local xmax, ymax = scr_w + self.img_wh, scr_h + self.img_hh if self.x < xmin or self.x > xmax or self.y < ymin or self.y > ymax then self.activate = false end end PlayerBullet.draw = function(self) if not self.activate then return end love.graphics.draw(self.img, self.x, self.y, math.rad(self.ang), 1.0, 1.0, self.img_wh, self.img_hh) end -- work math.randomseed(0) player = Player.new(scr_w / 2, scr_h / 2, player_img_a, player_img_b) player_bullets = {} shot_timer = 0 -- framerate steady min_dt = 1 / 60 next_time = love.timer.getTime() end function love.update(dt) -- update next_time = next_time + min_dt if dt > 1.0 then return end player:update(dt) shot_timer = shot_timer + dt if shot_timer >= 0.1 then -- born player bullet shot_timer = shot_timer - 0.1 local x = player.x local y = player.y local ang = player.gun_angle + math.random(-20, 20) / 10 local obj = PlayerBullet.new(x, y, ang, bullet_img) table.insert(player_bullets, obj) end -- move player bullets for i, spr in ipairs(player_bullets) do spr:update(dt) end -- remove bullet local elen = #player_bullets for i=elen,1,-1 do if not player_bullets[i].activate then table.remove(player_bullets, i) end end end function love.draw() -- set canvas love.graphics.setCanvas(canvas) -- draw BG love.graphics.setColor(255, 255, 255) love.graphics.draw(bgimg, 0, 0) -- draw objects love.graphics.setColor(255, 255, 255) player:draw() love.graphics.setBlendMode("add") for i, spr in ipairs(player_bullets) do spr:draw() end love.graphics.setBlendMode("alpha") -- unset canvas love.graphics.setCanvas() -- draw canvas to window love.graphics.setColor(255, 255, 255) love.graphics.draw(canvas, scr_ofsx, scr_ofsy, 0, scr_scale, scr_scale) love.graphics.print("FPS: "..tostring(love.timer.getFPS()), 10, 10) love.graphics.print("env: "..tostring(love.system.getOS()), 10, 40) if love.system.getOS() == "Windows" then -- wait local cur_time = love.timer.getTime() if next_time <= cur_time then next_time = cur_time else love.timer.sleep(next_time - cur_time) end end end function love.keypressed(key, isrepeat) -- ESC to exit if key == "escape" then love.event.quit() elseif key == "z" then angle_change_key = true end end
◎ 少し説明。 :
加算合成描画は、love.graphics.setBlendMode("add") を指定してから描画すればいいらしい。通常描画に戻すときは、love.graphics.setBlendMode("alpha") を呼ぶ。
love.graphics.setBlendMode("add") for i, spr in ipairs(player_bullets) do spr:draw() end love.graphics.setBlendMode("alpha")
[ ツッコむ ]
#2 [cg_tools] シューティングゲームの自機に使えそうな画像
ゲームっぽいサンプルソースを書く際に自機の画像があったほうが雰囲気が出てモチベーションが上がる気がするので、自作画像を置いときます。License : CC0 / Public Domain ってことで。好きに使ってください。砲台部分は重ねて使うことを前提にして描いてある…けど無くてもいいような。
_airplane_02_64x64.png
_airplane_02_64x64_000.png
_airplane_02_64x64_001.png
_airplane_03_64x64.png
_airplane_03_64x64_000.png
_airplane_03_64x64_001.png
_airplane_04_64x64.png
_airplane_04_64x64_000.png
_airplane_04_64x64_001.png
_bullet_01_32x32.png
[ ツッコむ ]
#3 [cg_tools] 使い勝手の良いオープンな画像フォーマットは存在するのだろうか
ドット絵を作る際は、
_EDGE2
や
_GrafX2
を使って作業しているのだけど。GrafX2 で描いてgifで保存してから EDGE2 で開こうとしたら「アニメーションのデータがおかしいから開けんわい」と怒られてしまったり。
どうも GrafX2 は、レイヤーも含んだ状態で画像を保存するために、アニメGIFとして保存してる気配が。アニメGIFのフレームが、レイヤー扱いになってるのではないかなあ…。そしておそらく、アニメGIFではあり得ない形で情報を格納してるのかも。
こういう状態になるのも、レイヤーを含めることができて、かつ、仕様が公開されてるオープンな画像フォーマットが当時は存在してなかったから、なのだろうなと。
いやまあ、GIMP の .xcf とか一応あったけど、当時はフォーマット仕様が文書の形で存在してなくて「ソースが仕様だ」とか言ってたらしいし。Photoshop の .psd は仕様が公開されてなくて各自が解析しながら独自実装してたし。そもそもその手のCGソフトは、機能追加するたびに作業用ファイルに保存する情報も増えていくから、事前にカッチリと決めておくのが難しいという事情も。
しかし…。今なら何か使えそうなフォーマットがありそうな気も。
あるいは、今から新規に策定するなら、どういう仕様にするのが妥当なんだろう。各レイヤーは png にして、xmlで管理情報を保持、とかそんな感じだろうか…。
どうも GrafX2 は、レイヤーも含んだ状態で画像を保存するために、アニメGIFとして保存してる気配が。アニメGIFのフレームが、レイヤー扱いになってるのではないかなあ…。そしておそらく、アニメGIFではあり得ない形で情報を格納してるのかも。
こういう状態になるのも、レイヤーを含めることができて、かつ、仕様が公開されてるオープンな画像フォーマットが当時は存在してなかったから、なのだろうなと。
いやまあ、GIMP の .xcf とか一応あったけど、当時はフォーマット仕様が文書の形で存在してなくて「ソースが仕様だ」とか言ってたらしいし。Photoshop の .psd は仕様が公開されてなくて各自が解析しながら独自実装してたし。そもそもその手のCGソフトは、機能追加するたびに作業用ファイルに保存する情報も増えていくから、事前にカッチリと決めておくのが難しいという事情も。
しかし…。今なら何か使えそうなフォーマットがありそうな気も。
あるいは、今から新規に策定するなら、どういう仕様にするのが妥当なんだろう。各レイヤーは png にして、xmlで管理情報を保持、とかそんな感じだろうか…。
[ ツッコむ ]
2017/11/28(火) [n年前の日記]
#1 [cg_tools] エフェクト画像を作成中
BGをスクロールさせる処理を入れてみたけど、弾が地形に当たった際のエフェクトが欲しいなと。てなわけで、
_Detonation
を使ってエフェクト画像を作成中。
どうも欲しいイメージに近づいてくれない…。難しい…。
どうも欲しいイメージに近づいてくれない…。難しい…。
[ ツッコむ ]
2017/11/29(水) [n年前の日記]
#1 [cg_tools] エフェクト画像をまだ作成中
_Detonation
を使ってエフェクト画像をまだ作成中。なかなか思ったように作れない…。
爆発時にリングが広がるように見せたくなってきたので、リング画像をGIMPで作成。集中線を描画できる、 _Speedline というプラグインを使わせてもらって作業してるところ。
爆発時にリングが広がるように見せたくなってきたので、リング画像をGIMPで作成。集中線を描画できる、 _Speedline というプラグインを使わせてもらって作業してるところ。
[ ツッコむ ]
2017/11/30(木) [n年前の日記]
#1 [cg_tools] 敵弾の画像作成で悩んだり
シューティングゲームであれば、えてして雑魚敵が弾を撃ってくるものだろうと。であれば敵弾の画像が必要だよなと。てなわけで作成しようと試みたのだけど、どうも今一つな出来に。
視認性を高めるためには、点滅なり回転なりをしたほうがいいのだろう、と思って一応点滅するように色が微妙に変わっていく3パターンでアニメをするようにしてみたけれど、どうもハッキリと認識できないような。
このあたり、何かノウハウがあるのではないか…。と思ってググってみたけど、「敵弾のグラフィックはこうあるべき」てなあたりを誰も言及・説明してないようで。うーん。ゲームをプレイする側は、視認性が悪い場合にソレを問題視してるようだけど、「視認性が悪い」という感想だけで終わってしまって、何故視認性が悪いのか原因を推測して、改善案まで検討してる事例はほとんど無くて。
それでも一応、参考になりそうなページを少し見かけたのでメモ。
視認性を高めるためには、点滅なり回転なりをしたほうがいいのだろう、と思って一応点滅するように色が微妙に変わっていく3パターンでアニメをするようにしてみたけれど、どうもハッキリと認識できないような。
このあたり、何かノウハウがあるのではないか…。と思ってググってみたけど、「敵弾のグラフィックはこうあるべき」てなあたりを誰も言及・説明してないようで。うーん。ゲームをプレイする側は、視認性が悪い場合にソレを問題視してるようだけど、「視認性が悪い」という感想だけで終わってしまって、何故視認性が悪いのか原因を推測して、改善案まで検討してる事例はほとんど無くて。
それでも一応、参考になりそうなページを少し見かけたのでメモ。
◎ 点滅の有無。 :
_「バトルガレッガ Rev.2016」,秋葉原Heyにて期間限定でアーケード版の稼働を実施。敵弾カラー変更の紹介ムービーの公開も - 4Gamer.net
敵弾の表現として、以下を用意してるらしい。
しかし、点滅させればいいというモノでもなさそうな。例えば以下のタイトル。
_Hyper Duel (Arcade/Technosoft/1993 Keith) [HD] - YouTube
_Sega Saturn Longplay [006] Hyper Duel - YouTube
アーケード版に比べると後者のコンシューマ版のほうが敵弾が描き込まれていてリッチさが増してるけど、かえって見づらくなってないか、という気もするわけで。
敵弾の表現として、以下を用意してるらしい。
- 1パターンを表示するだけ。
- 弾の色を赤と青で構成。点滅無し。
- 弾の色を赤と青で構成+白も挿入して点滅有り。
- 弾の色を赤と青で構成+グレー?も挿入して点滅有り。
- 弾の色をピンク+白を挿入して点滅有り。
しかし、点滅させればいいというモノでもなさそうな。例えば以下のタイトル。
_Hyper Duel (Arcade/Technosoft/1993 Keith) [HD] - YouTube
_Sega Saturn Longplay [006] Hyper Duel - YouTube
アーケード版に比べると後者のコンシューマ版のほうが敵弾が描き込まれていてリッチさが増してるけど、かえって見づらくなってないか、という気もするわけで。
◎ 縁取り。 :
_四色カラーで視認性を上げるために: ドット絵とアイデアと
4色しか使えない環境では、黒で縁取ることで視認性が上がる、という話が出ている。アタリが存在するものは輪郭をハッキリさせる、という方針というか。
4色しか使えない環境では、黒で縁取ることで視認性が上がる、という話が出ている。アタリが存在するものは輪郭をハッキリさせる、という方針というか。
◎ 回転。 :
_回転と点滅、どっちが目立つ?表示灯の点灯方式の違いについて - LED回転灯.com
ゲームのグラフィックの話ではないけれど、警告灯は、回転と点滅のどちらが目立つか、という話らしい。回転するほうがより目立つ、ということかな…。
回転する敵弾と言えば、このあたりだろうか。
_レイディアントシルバーガン - YouTube
_1988 [60fps] Gradius II Type4 Nomiss Loop1 - YouTube
ゲームのグラフィックの話ではないけれど、警告灯は、回転と点滅のどちらが目立つか、という話らしい。回転するほうがより目立つ、ということかな…。
回転する敵弾と言えば、このあたりだろうか。
_レイディアントシルバーガン - YouTube
_1988 [60fps] Gradius II Type4 Nomiss Loop1 - YouTube
◎ 発光とは相性が悪い。 :
_【東方】最近光る弾多くないかな…以前の境目がある弾の方が見やすいと思う|2ch東方スレ観測所
加算描画を多用して光らせる事例が多くなってきてるけど、避けづらくなったという苦情が出てる。考えてみれば、4色で画像作成する話で出ていた、「アタリが存在するものは輪郭をハッキリさせる」という方針と真逆なわけだから、そりゃプレイしづらくなって当然かもしれないなと。ただ、加算描画って見た目が奇麗だから、ウケがよさそうではある…。
加算描画を多用して光らせる事例が多くなってきてるけど、避けづらくなったという苦情が出てる。考えてみれば、4色で画像作成する話で出ていた、「アタリが存在するものは輪郭をハッキリさせる」という方針と真逆なわけだから、そりゃプレイしづらくなって当然かもしれないなと。ただ、加算描画って見た目が奇麗だから、ウケがよさそうではある…。
[ ツッコむ ]
#2 [pc] マウスを交換
今まで使ってた ELECOM M-XG1UBSV のホイールがおかしくなってきたので、予備の M-XG1UBSV と交換。これが最後の予備。生産中止になった製品なので、次回壊れたら別製品を探さないと…。
前回交換したのは…。 _2016/12/13 だったらしい。やっぱり1年で壊れていく製品らしい。
前回交換したのは…。 _2016/12/13 だったらしい。やっぱり1年で壊れていく製品らしい。
[ ツッコむ ]
以上、30 日分です。
勉強させていただきます。