2019/04/21(日) [n年前の日記]
#1 [ruby][rubysdl] Ruby/SDLをインストールしようとしてハマった
Windows10 x64 上で Ruby/SDL をインストールしようとして、ちょっとハマったのでメモ。
そもそも Ruby/SDL は、どのバージョンのRubyまで対応してるのか、そこからして分からない。手元に保存してあったファイルを確認してみたら、Ruby 1.8 / 1.9 用のファイルがあったので、おそらく Ruby 1.8 と 1.9 には対応しているのかなと。
とりあえず、Ruby 1.9 p551 i386-mingw32 を使って、インストールできるのか試みた。 _uru を使って Ruby のバージョンを切り替え。
そもそも Ruby/SDL は、どのバージョンのRubyまで対応してるのか、そこからして分からない。手元に保存してあったファイルを確認してみたら、Ruby 1.8 / 1.9 用のファイルがあったので、おそらく Ruby 1.8 と 1.9 には対応しているのかなと。
とりあえず、Ruby 1.9 p551 i386-mingw32 を使って、インストールできるのか試みた。 _uru を使って Ruby のバージョンを切り替え。
◎ gemでインストール。 :
Ruby 1.8 / 1.9 用の Ruby/SDL は、gem でも公開されてるらしい。
_rubysdl-mswin32-1.9 | RubyGems.org
_rubysdl-mswin32-1.8 | RubyGems.org
以下でインストール。
インストールされてるか確認。
しかし、これだけではインストールが終了しない。
gem インストール時に案内メッセージが表示されているけれど、Ruby 1.9インストールフォルダ\bin\ 以下に、install_rubysdl.bat というファイルが入っているので、コレを実行する。
コレで Ruby/SDL が、Ruby 1.9上で使えるようになった。
_rubysdl-mswin32-1.9 | RubyGems.org
_rubysdl-mswin32-1.8 | RubyGems.org
以下でインストール。
gem install rubysdl-mswin32-1.9
インストールされてるか確認。
> gem list | grep rubysdl rubysdl-mswin32-1.9 (2.1.1.1)
しかし、これだけではインストールが終了しない。
gem インストール時に案内メッセージが表示されているけれど、Ruby 1.9インストールフォルダ\bin\ 以下に、install_rubysdl.bat というファイルが入っているので、コレを実行する。
install_rubysdl.bat
コレで Ruby/SDL が、Ruby 1.9上で使えるようになった。
◎ zipを解凍してインストール。 :
上記の手順でインストールできた、と思ったが、甘かった。以前手元で保存していた、Ruby/SDL を使ったスクリプトを動かしてみると、mikmod.dll が見つからないと言ってくる。どうやら、.itファイル
_(MODファイルフォーマット)
を再生しようとして mikmod.dll を要求するけど、入ってない状態らしい。
Rubyインストールフォルダ内で探してみたけど、どうやら gem でインストールした場合は、mikmod.dll が同梱されていないようで。しかし、以下のファイルには入ってる模様。
しかし、上記のzipファイルは、RubyForge ( http://rubyforge.org/ ) なるサイトで公開されていたらしく…。その RubyForge は既に死んでいるわけで。これでは入手できない…。
Internet Archive で、公開されていたファイルの一覧を確認することぐらいはできるけど、zip も gem もダウンロードはできない。
_RubyForge: Ruby/SDL: Project Filelist
ググって探してみたら、 _Index of /rubyforge/rubysdl でミラーされているソレを見かけた。いくつかDLしてみたけど、手元のファイルと内容は同じだった。
(上記ページが消滅したら怖いので、念のためにバックアップを兼ねてココにも置いておこう…。 _[1] 、 _[2] 、 _[3] 。このあたり RubyGems.org に置けたりはしないのだろうか…。)
rubysdl-2.1.1.1-mswin32-1.9.1-p243.zip を解凍して、中に入って、以下を実行。
これで、Ruby/SDL の動作に必要な dll等が、Ruby1.9インストールフォルダ/bin/ 以下にコピーされた。mikmod.dll も入っている。
Rubyインストールフォルダ内で探してみたけど、どうやら gem でインストールした場合は、mikmod.dll が同梱されていないようで。しかし、以下のファイルには入ってる模様。
- rubysdl-2.1.1.1-mswin32-1.9.1-p243.zip
- rubysdl-2.1.1.1-mswin32-1.8.7-p174.zip
しかし、上記のzipファイルは、RubyForge ( http://rubyforge.org/ ) なるサイトで公開されていたらしく…。その RubyForge は既に死んでいるわけで。これでは入手できない…。
Internet Archive で、公開されていたファイルの一覧を確認することぐらいはできるけど、zip も gem もダウンロードはできない。
_RubyForge: Ruby/SDL: Project Filelist
ググって探してみたら、 _Index of /rubyforge/rubysdl でミラーされているソレを見かけた。いくつかDLしてみたけど、手元のファイルと内容は同じだった。
(上記ページが消滅したら怖いので、念のためにバックアップを兼ねてココにも置いておこう…。 _[1] 、 _[2] 、 _[3] 。このあたり RubyGems.org に置けたりはしないのだろうか…。)
rubysdl-2.1.1.1-mswin32-1.9.1-p243.zip を解凍して、中に入って、以下を実行。
ruby install_rubysdl.rb
これで、Ruby/SDL の動作に必要な dll等が、Ruby1.9インストールフォルダ/bin/ 以下にコピーされた。mikmod.dll も入っている。
◎ 参考ページ。 :
[ ツッコむ ]
#2 [rubysdl][ruby] Ruby/SDLでSFontが表示されなくてハマった
Ruby/SDL は SFont形式のビットマップフォントを描画できるはずなのだけど。
Windows10 x64 + Ruby 1.9.3 p661 mingw32 + rubysdl 2.1.1.1 で、SFont を描画しようとしても、png画像のSFontをそもそも開けないことに気が付いた。以下のようなエラーが出てしまう。
Ruby/SDL が使われていた頃の Ruby のバージョンを調べてみたら、1.8 だった。ということは、Ruby 1.8 + Ruby/SDL なら動作が違ってくるのだろうか。
そして、Ruby/SDL は、2.0.0 から Ruby 1.9.x に対応したらしい。すると Ruby 1.8 には、Ruby/SDL 1.3.1 を使ったほうが、昔のスクリプトを動かす分にはヨサゲかもしれないなと。
試しに、Ruby 1.8.7 p330 mswin32 上で、rubysdl 1.3.1 (rubysdl-1.3.1-mswin32-1.8.6-p36.zip) をインストール。
それぞれで動作確認してみたところ、結果は以下のようになった。
つまり、SFont については、以下のような状態になる。
ただ、以下の記事によると、*NIX環境 + Ruby/SDL 2.2.0 なら、png の SFont も読み込めるっぽい。
_Ubuntu に Ruby/SDL を入れる - Marginalia
Windows10 x64 + Ruby 1.9.3 p661 mingw32 + rubysdl 2.1.1.1 で、SFont を描画しようとしても、png画像のSFontをそもそも開けないことに気が付いた。以下のようなエラーが出てしまう。
sfont.rb:69:in `open': Couldn't open font: font/verabd_sfont01_32col.png (SDL::Error) from sfont.rb:69:in `<main>'おかしいな。手元のスクリプトを眺めた感じでは、昔は png の SFont をフツーに読み込めていたように見えるのだけど…。
Ruby/SDL が使われていた頃の Ruby のバージョンを調べてみたら、1.8 だった。ということは、Ruby 1.8 + Ruby/SDL なら動作が違ってくるのだろうか。
そして、Ruby/SDL は、2.0.0 から Ruby 1.9.x に対応したらしい。すると Ruby 1.8 には、Ruby/SDL 1.3.1 を使ったほうが、昔のスクリプトを動かす分にはヨサゲかもしれないなと。
試しに、Ruby 1.8.7 p330 mswin32 上で、rubysdl 1.3.1 (rubysdl-1.3.1-mswin32-1.8.6-p36.zip) をインストール。
それぞれで動作確認してみたところ、結果は以下のようになった。
Ruby | Ruby/SDL | load bmp | load png |
---|---|---|---|
Ruby 1.8.7 p330 mswin32 | rubysdl 1.3.1 | PASS | PASS |
Ruby 1.9.3 p661 mingw32 | rubysdl 2.1.1.1 | PASS | FAIL |
つまり、SFont については、以下のような状態になる。
- Windows版の Ruby/SDL 2.0.0 以降は、SFont として png画像は使えず、bmp画像を使う必要がある。
- png画像が読み込めないから、諧調を持ったアルファチャンネルは利用不可。
ただ、以下の記事によると、*NIX環境 + Ruby/SDL 2.2.0 なら、png の SFont も読み込めるっぽい。
_Ubuntu に Ruby/SDL を入れる - Marginalia
◎ サンプルスクリプトと画像。 :
動作確認用にスクリプトを書いてみた。
※ 2019/04/22追記。サンプルとしては分かりづらかったので書き直した。
_sfont.rb
_sfontex.rb
sfontex.rb は、カーソルキーの左右で、SFontの種類を切り替えられる。ESC で終了。
使った SFont画像は以下。元にしたttfフォントはライセンス面で自由度が高いものを選んだ、はず。ファイル名を見ればフォント名も分かるかと。
_verabd_sfont01_32col.bmp
_verabd_sfont01_32col.png
_verabd_sfont01.png
_verabd_sfont02_width_fix.png
_sfont_mplus1m_m.png
_vlgothic_sfont01.png
一応、画像表示もしておくかな…。
※ 2019/04/22追記。サンプルとしては分かりづらかったので書き直した。
_sfont.rb
# Ruby/SDL birmap font (SFont) draw. # # ESC key : exit require "sdl" fontimg = "font/verabd_sfont01_32col.bmp" #fontimg = "font/verabd_sfont01.png" SDL.init( SDL::INIT_VIDEO ) screen = SDL::Screen.open(640, 480, 16, SDL::SWSURFACE) fontflag = SDL::BMFont::TRANSPARENT | SDL::BMFont::SFONT font = SDL::BMFont.open(fontimg, fontflag) while true while event = SDL::Event2.poll case event when SDL::Event2::Quit exit when SDL::Event2::KeyDown case event.sym when SDL::Key::ESCAPE exit end end end screen.fill_rect(0, 0, 640, 480, [128, 128, 128]) font.textout(screen, fontimg, 0, 0) x, y = 8, 64 font.textout(screen, "SFont (BitMapFont) Testing..", x, y) screen.updateRect(0,0,0,0) sleep 0.016 end
_sfontex.rb
# Ruby/SDL birmap font (SFont) draw. # # usage: ruby sfont.rb [font_kind] # RIGHT, LEFT : change font # ESC : exit require "sdl" fontdir = "font/" fontfiles = [ "verabd_sfont01_32col.bmp", "verabd_sfont01_32col.png", "verabd_sfont01.png", "verabd_sfont02_width_fix.png", "sfont_mplus1m_m.png", "vlgothic_sfont01.png", ] kind = ARGV.size > 0 ? ARGV[0].to_i : 0 if kind >= fontfiles.size puts "please input 0 - #{fontfiles.size - 1}" exit end fontfile = fontfiles[kind] puts "font image : #{fontfile}" SDL.init( SDL::INIT_VIDEO ) screen = SDL::Screen.open(640, 480, 16, SDL::SWSURFACE) fontflag = SDL::BMFont::TRANSPARENT | SDL::BMFont::SFONT font = SDL::BMFont.open(fontdir + fontfile, fontflag) ang = 0 while true while event = SDL::Event2.poll case event when SDL::Event2::Quit exit when SDL::Event2::KeyDown font_reload = false case event.sym when SDL::Key::ESCAPE exit when SDL::Key::RIGHT kind = (kind + 1) % fontfiles.size font_reload = true when SDL::Key::LEFT kind = (kind - 1 + fontfiles.size) % fontfiles.size font_reload = true end if font_reload fontfile = fontfiles[kind] puts "font image : #{fontfile}" font = SDL::BMFont.open(fontdir + fontfile, fontflag) end end end screen.fill_rect(0, 0, 640, 480, [128, 128, 128]) font.textout(screen, fontfile, 0, 0) y = 64.0 * Math.sin(ang * Math::PI / 180) + 128 ang += 1 font.textout(screen, "SFont (BitMapFont) Testing..", 8, y) screen.updateRect(0,0,0,0) sleep 0.016 end
sfontex.rb は、カーソルキーの左右で、SFontの種類を切り替えられる。ESC で終了。
使った SFont画像は以下。元にしたttfフォントはライセンス面で自由度が高いものを選んだ、はず。ファイル名を見ればフォント名も分かるかと。
_verabd_sfont01_32col.bmp
_verabd_sfont01_32col.png
_verabd_sfont01.png
_verabd_sfont02_width_fix.png
_sfont_mplus1m_m.png
_vlgothic_sfont01.png
一応、画像表示もしておくかな…。
◎ 動作時のスクリーンショット。 :
[ ツッコむ ]
#3 [ruby][rubysdl] Ubuntu 18.04上で Ruby/SDL をインストール
Windows10 x64 + VMware Player 12.5.9 build 7535481上で、Ubuntu Linux 18.04 LTS を動かして、その上で Ruby/SDL をインストールしてみたり。
Ruby のバージョンは、ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu] 。
gem でインストールする方法と、apt でインストールする方法がある。たぶん apt でインストールしたほうが楽、かもしれない。
と、ここまで作業して気が付いた。Ubuntu の場合は ruby-sdl というパッケージが既に用意されているように見えるのだけど…。
Ruby のバージョンは、ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu] 。
gem でインストールする方法と、apt でインストールする方法がある。たぶん apt でインストールしたほうが楽、かもしれない。
◎ 必要なパッケージをインストール。 :
事前に、以下のパッケージをインストール。
巷の解説記事を読むと前者だけでも良さそうな感じで書いてあったけど、後者も入れないとpng画像の読み込みその他がエラーになった。
sudo apt install libsdl2-2.0 libsdl-sge-dev sudo apt install libsdl-image1.2-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libsdl-sound1.2-dev libsdl-ttf2.0-dev
巷の解説記事を読むと前者だけでも良さそうな感じで書いてあったけど、後者も入れないとpng画像の読み込みその他がエラーになった。
◎ gemでrubysdlをインストール。 :
sudo gem install rubysdl
$ gem list | grep sdl rubysdl (2.2.0)rubysdl 2.2.0 がインストールされた。
と、ここまで作業して気が付いた。Ubuntu の場合は ruby-sdl というパッケージが既に用意されているように見えるのだけど…。
◎ aptでrubysdlをインストール。 :
gem で rubysdl をアンインストールしてから、apt でインストールしてみた。
sudo gem uninstall rubysdl
sudo apt install ruby-sdlrubysdl 2.2.0 がインストールされた。手元のスクリプトも動いてる。こっちで良かったのか…。
◎ 参考ページ。 :
[ ツッコむ ]
#4 [anime] 「クレヨンしんちゃん ガチンコ!逆襲のロボとーちゃん」を中途半端に視聴
戦隊の放送が終わった後で、「クレしん」の映像が流れ始めて、なんでこんな時間に流れてるのだろうと思いながら音声を消してBGVとして流しっぱなしにしてたのだけど。なんだか劇場版アニメのようでもあり、また、途中から妙な映像が出てきて興味が湧いて、音声も聞き始めたらどんどん画面に引き込まれ、結局最後まで見てしまった。
失敗した。こんなに面白い映画だったと知ってたら、最初からちゃんと見ておくのだった。大失敗。
脚本がとにかく秀逸。ググってみたら、中島かずき脚本だった。道理で…。監督は、シリーズと縁が深いらしい高橋渉氏。湯浅監督もコンテと作画で参加してたと後で知り、ますますちゃんと見ておくべきだったなと。本当に大失敗。
これぞまさしく、笑いあり、涙ありの映画だなと…。間違いなく名作。素晴らしい。最初からちゃんと見ておけばよかった。大失敗。
失敗した。こんなに面白い映画だったと知ってたら、最初からちゃんと見ておくのだった。大失敗。
脚本がとにかく秀逸。ググってみたら、中島かずき脚本だった。道理で…。監督は、シリーズと縁が深いらしい高橋渉氏。湯浅監督もコンテと作画で参加してたと後で知り、ますますちゃんと見ておくべきだったなと。本当に大失敗。
これぞまさしく、笑いあり、涙ありの映画だなと…。間違いなく名作。素晴らしい。最初からちゃんと見ておけばよかった。大失敗。
◎ ロボットアニメ好きなら絶対に視聴すべき作品、かも。 :
そういえば、ロボット同士の戦闘シーンで目から鱗が落ちた。体の各部位を360度回転させられる設定を活用して、敵の攻撃を避けながら瞬時に反撃に転じる等の見せ方をしていたり、パーツの位置をずらせる故の奇妙な回避運動をしていたり。
自分が、人型ロボットという設定に対して、完全に固定観念を持ってしまっていた・思考停止していたことを気づかされた…。見た目は人型でも、どこがどのように動くのかによって、人間のソレとは全く異質なアクションシーンを描けるのだなと…。
ロボットアニメ好きなら、あるいは、ロボットアニメを作ってる方なら、戦闘シーンだけでも絶対に視聴すべきだなと。ポーズを決めてビーム発射とか、パースをつけて剣を構えるとか、そんなことばかりしていてはダメだよなと…。まあ、そのあたりは様式美だからアレだけど、他にも色んな見せ方はあるのだと意識ぐらいはしておかないと…。
自分が、人型ロボットという設定に対して、完全に固定観念を持ってしまっていた・思考停止していたことを気づかされた…。見た目は人型でも、どこがどのように動くのかによって、人間のソレとは全く異質なアクションシーンを描けるのだなと…。
ロボットアニメ好きなら、あるいは、ロボットアニメを作ってる方なら、戦闘シーンだけでも絶対に視聴すべきだなと。ポーズを決めてビーム発射とか、パースをつけて剣を構えるとか、そんなことばかりしていてはダメだよなと…。まあ、そのあたりは様式美だからアレだけど、他にも色んな見せ方はあるのだと意識ぐらいはしておかないと…。
[ ツッコむ ]
以上、1 日分です。