mieki256's diary



2016/12/11() [n年前の日記]

#1 [ruby][gosu] WIndows上で Ruby + Gosu を試してみたり

_Ruby というプログラミング言語を使って2Dゲームが作れるようになる _Gosu というライブラリがあるそうで。クロスプラットフォーム対応ライブラリ、つまりは Windows、Mac、Linux、どのOSでも動くライブラリなのだとか。

Windows に特化した2Dゲーム制作ライブラリなら _DXRuby があるけれど。DXRubyは、Windows の DirectX という機能を呼び出しているから、裏技(?)を使わないと Mac や Linux では動かない。もし、「Mac や Linux でも動くゲームを作ってみたいな」と思った時は、Gosu が選択肢に入ってくるのかもしれないなと。

ということで、数日前に Windows上で Gosu を少し触ってたのだけど。せっかくだからメモをまとめておいたほうがいいよなと思えてきたので、こうしてメモしておくのです。

環境は、Windows 10 x64 + Ruby 2.2.6 p396 mingw32版 + gosu 0.10.8 x86-mingw32版。

Rubyのインストール。 :

まずは Ruby をインストールしないと話にならない。 _RubyInstaller for Windows という、Windows にインストールできる Ruby があるので、ソレを利用させてもらう。

_Downloads ページから、Ruby 2.2.6 (rubyinstaller-2.2.6.exe) か Ruby 2.3.3 (rubyinstaller-2.3.3.exe) をダウンロード。

ダウンロードした .exe を実行するとRubyのインストールができる。詳細は以下の解説記事を参考に。

_WindowsにRubyをインストールする(初心者向け) - Qiita
_はじめてのRuby環境構築 (Windows編その1) - Qiita
_Rubyダウンロード及びインストール | Rubyインストール

DOS窓(コマンドプロンプト)を開いて、ruby -v と打ち込むと、Rubyのバージョンが表示される。
> ruby -v

ruby 2.2.6p396 (2016-11-15 revision 56800) [i386-mingw32]
バージョンが表示されたということは、インストールができたということ。

DOS窓の開き方が分からない? いくつか開き方があるけれど…。
  • Win+Rキーを押して「cmd」と打ち込んでEnterキー。
  • スタートボタンを右クリックして「コマンドプロンプト」を選択。(Windows8.1/10の場合)
  • Cortanaに「cmd」と打ち込むと「コマンドプロンプト」が一覧に出てくるのでソレをクリック。(Windows10の場合)
好みのやり方でどうぞ。

Gosuのインストール。 :

Ruby には、gem というライブラリ管理ツールがあって、インターネット経由でライブラリをダウンロードしてインストールしたり、簡単にアンインストールできたりする。

例えばDOS窓を開いて gem list と打ち込んでみれば、今現在インストールされてるライブラリの一覧が表示される。
> gem list

*** LOCAL GEMS ***

addressable (2.5.0)
aozora (0.2.0)
ast (2.3.0)
astrolabe (1.3.1)
(以下略)

この gem というツールを使えば gosu をインストールすることができる。以下を打ち込むだけ。
gem install gosu
> gem install gosu

Fetching: gosu-0.10.8-x86-mingw32.gem (100%)
Successfully installed gosu-0.10.8-x86-mingw32
Parsing documentation for gosu-0.10.8-x86-mingw32
Installing ri documentation for gosu-0.10.8-x86-mingw32
Done installing documentation for gosu after 1 seconds
1 gem installed
インストールできた。

Hello World. :

gosuを使って、まずはウインドウを表示してみる。以下のソースを書いた。

_helloworld.rb
require 'gosu'

class MyWindow < Gosu::Window
  
  # コンストラクタ
  def initialize
    super 640, 480, false
    self.caption = 'Hello World!'
  end
  
  # 更新処理
  def update
  end
  
  # 描画処理
  def draw
  end
end

window = MyWindow.new
window.show

実行してみる。
ruby helloworld.rb

helloworld_ss.png

ウインドウが表示された。

これだけではさすがに何もできないので、せめて最低限、画像とテキストだけでも表示してみる。以下のソースを書いた。

helloworld2.rb
require 'gosu'

class MyWindow < Gosu::Window
  
  # コンストラクタ
  def initialize
    super 640, 480, false
    self.caption = 'Hello World!'
    @font = Gosu::Font.new(32)  # フォントを用意
    @bg_img = Gosu::Image.new("tmp_bg.png", :tileable => true)    # BG画像
    @spr_img = Gosu::Image.new("tmp_ufo.png", :tileable => true)  # スプライト画像
  end
  
  # 更新処理
  def update
  end
  
  # 描画処理
  def draw
    @bg_img.draw(0, 0, 100)                 # BG描画
    @spr_img.draw(320, 240, 200)            # スプライト描画
    @font.draw("Hello World", 10, 10, 300)  # テキスト描画
  end
end

window = MyWindow.new
window.show
使用した画像は以下。

_tmp_bg.png
_tmp_ufo.png

実行。
ruby helloworld2.rb

helloworld2_ss.png

画像とテキストが表示された。

各行を解説。 :

Gosuのウインドウは、Gosu::Window というクラスを使えば作れるらしい。
class MyWindow < Gosu::Window

  (中略)

end
これで、Gosu::Window を継承したクラスを作ってる。この中がメイン処理(?)になる。

ソースの最後のほうで、
window = MyWindow.new
window.show
とあるけれど。それぞれ、以下を指示している。
window = MyWindow.new  # MyWindowクラスを生成してる
window.show            # 「ウインドウを表示しろ」と命令してる

Gosu::Window は、3つのメソッドを持つ。
  • 初期化を担当する initialize()。(コンストラクタ)
  • 毎フレームの更新処理を担当する update()。
  • 毎フレームの描画処理を担当する draw()。
この3つの中に色々書いていけばゲームっぽいモノが作れるはずだ、という構成になっている。

毎フレーム、と書いてしまったけど、どのくらいの頻度で更新処理・描画処理がされるのか。Gosuは、デフォルト設定なら60FPSで処理するよ、ということになってるらしい。

ちなみに、FPSってのは、Frame Per Second の略。フレーム/秒。1秒間に何フレーム表示するか、という単位。60FPSってことは、1秒間に60回画面が書き換わるよ、ということ。

さて。画像の読み込みは、Gosu::Image.new() を使う。
@img = Gosu::Image.new("画像ファイル名", :tileable => true)
:tileable って何じゃ? …画像の端をクッキリスパッとさせるなら true、隙間が入ってもいいなら false を指定するようで。例えば、BG(背景、Background)をタイルマップで描画したい時は、画像の端がクッキリしてないと隙間が入ってしまって見苦しいので、そんな時は true を指定すべし、とのこと。

扱える画像ファイルのフォーマットは、 _ドキュメント を眺めた感じだと、png画像とbmp画像は使えるようで。
  • png画像はアルファチャンネルも反映してくれる。
  • bmp画像の場合は、マゼンタ色(0xff00ff)を透明色として扱うぜ、と書いてあるように見えた。
ちなみに、「他の画像フォーマットを使いたければ RMagick ライブラリをインストールせよ」ってドキュメントには書いてあるけど…。 _Windows上でのRMagickインストールは鬼門 で…。時期によってはインストールできなかったりするんだよなあ…。なので、Gosuを使う時は、「pngとbmpしか使わないぜ」ってことにしといたほうがトラブル回避できそうな気がしますよ。

画像の描画は、以下のように書く。
@img.draw(x, y, z)
x, y は分かるとして、z は何だろう? …描画の優先順位らしい。z値が大きければ手前に描画されて、z値が小さければ奥に描画される。のかな。たぶん。

テキスト描画は、Gosu::Font.new() と draw() を使う。
# フォントを用意
@font = Gosu::Font.new(フォントサイズ)
# テキスト描画
@font.draw("描画したい文字列", x, y, z, x拡大率, y拡大率, 色指定)
描画時の、拡大率と色指定は省略することもできるらしい。

_ドキュメント によると、フォントファイル(.ttf)を別途用意して、ソレを読み込んで使うこともできるらしい。
class MyWindow < Gosu::Window
  def initialize
    @font = Gosu::Font.new(self, "./LiberationMono-Bold.ttf", 22)
  end
end
  • フォント名の指定文字列内に「/」があったら、ttf読み込みを要求されてるものとして扱う。
  • 「/」が無かったら、OSにインストール済みのフォント名を指定しているものとして扱う。
と、ドキュメントに書いてあった。

余談。Gosuを使うということは、クロスプラットフォームを意識してライブラリを選んだということだろうから…。もし、デフォルトフォントではなく、少し変わった見た目のオシャレなフォントを使いたいなら、OSインストール済みのフォントをあてにせず、別途、ttfファイルも同梱して配布したほうがいいでしょうな…。一応、Windows、Mac、Linuxで共通して使えるフォント種類を少し調べてみたのですけど、どのOSでも共通して使えるフォントって、ほとんど無いようで…。

とりあえず、画像を表示するところまではできたから、これで色々とやれるはず。

長くなってきたので、以降は別記事で。

Gosuのサンプルスクリプトのインストールについて。 :

念のためにメモしとく。

Gosuのサンプルスクリプトが、gosu-examples にまとまってるらしい。以下を打てばインストールできる。
gem install gosu-examples

以下の場所にインストールされた。
Rubyインストールフォルダ\lib\ruby\gems\2.2.0\gems\gosu-examples-1.0.3
examplesフォルダの中にサンプルがいくつか入ってるので、例えば ruby tutorial.rb、てな感じで実行できる。

サンプルスクリプトによっては、実行時に必要になるライブラリがあるようで。とりあえず、手元の環境では以下をインストールして、サンプルスクリプトを動かすことができた。
gem install chipmunk
gem install opengl
chipmunk のインストールに関しては、Ruby の DevKit が必要になるようで。そのあたりは以下を参考にしてインストールしてくださいなと。

_WindowsにRubyをインストールする(初心者向け) - Qiita

#2 [ruby][gosu] Windows + Ruby + Gosu を使ってもうちょっと色々試す

もうちょっと色々試してみる。

タイルマップでBGを描画してみる。 :

タイルマップでBGを描画してみよう。

とりあえず、2枚描画してみる。メガドライブがBG2枚だったから、Gosuも2枚描けたら、メガドラ程度のゲーム画面は実現できる、はず。

_tilemap_bg_test.rb
require 'gosu'

# 背景描画用クラス
class Map

  # コンストラクタ
  # @param wdw_w [Integer] ウインドウ横幅
  # @param wdw_h [Integer] ウインドウ縦幅
  def initialize(wdw_w, wdw_h)
    @wdw_w = wdw_w
    @wdw_h = wdw_h

    # 画像の読み込み
    @imgs = []
    ["tmp_bg1.png", "tmp_bg2.png"].each do |fn|
      # Gosu::Image.load_tiles()を使えば画像を分割して読み込める。
      # ここでは 512x512の画像を、1チップ32x32として読み込んでるので
      # 16x16個 = 256個の画像に分割されているはず
      imgs = Gosu::Image.load_tiles(fn, 32, 32, :tileable => true)
      @imgs.push(imgs)
    end

    # タイルマップ用の配列を作成
    @bgarr = []
    c = 0
    16.times do |by|
      @bgarr[by] = []
      16.times do |bx|
        @bgarr[by][bx] = c
        c = (c + 1) % 256
      end
    end
  end

  # 背景描画処理
  # @param bx [Integer] BG座標x
  # @param by [Integer] BG座標y
  # @param n [Integer] BG番号(0 or 1)
  def draw(bx, by, n)
    cw, ch = 32, 32  # セル1つ分のサイズ
    bx = bx.to_i
    by = by.to_i

    imgs = @imgs[n]
    lenx = @bgarr[0].length
    leny = @bgarr.length
    cx = (bx / cw) % lenx
    cy = (by / ch) % leny
    sx = (bx % cw)
    sy = (by % ch)
    wcnt = @wdw_w / cw + 1
    hcnt = @wdw_h / ch + 1
    hcnt.times do |y|
      wcnt.times do |x|
        k = @bgarr[(cy + y) % leny][(cx + x) % lenx]
        imgs[k].draw(x * cw - sx, y * ch - sy, 0)
      end
    end
  end
end

class MyWindow < Gosu::Window

  # コンストラクタ
  def initialize
    super 640, 480, false
    self.caption = "Tilemap BG Test"

    @maps = Map.new(self.width, self.height)  # マップ表示用
    # self.width、self.height はウインドウの横幅、縦幅になってる

    @bgx = [0, 0]
    @bgy = [0, 0]
    @frame = 0
  end

  # 更新処理
  def update
    # BGスクロール位置を更新
    ang = Math::cos(@frame * Math::PI / 180.0)
    @bgx[0] = -64 + (64.0 * ang) + 640
    @bgx[1] = -128 + (128.0 * ang) + 640
    @bgy[0] = (@bgy[0] + 2)
    @bgy[1] = (@bgy[1] + 6)

    @frame += 1
  end

  # 描画処理
  def draw
    2.times do |i|
      @maps.draw(@bgx[i], @bgy[i], i)
    end
  end

  # キーボードチェック
  def button_down(id)
    if id == Gosu::KbEscape
      # ESCキーが押されたらウインドウを閉じて終了する
      close
    end
  end
end

window = MyWindow.new
window.show
使用画像は以下。

_tmp_bg1.png
_tmp_bg2.png

ruby tilemap_bg_test.rb と打って実行してみる。



描画できてる。メガドラ程度にはなりそう。

少し解説。

タイルマップ用の画像は、えてして、たくさんのチップ画像が一枚の画像にまとめてあったりするので、画像を分割して読み込む必要が出てくる。

Gosu も、画像を分割して読み込む機能が用意されてる。以下のように書けばOK。結果は、Gosu::Image の配列で返ってくる。
# 画像を分割して読み込む
@imgs = Gosu::Image.load_tiles("画像ファイル名", 32, 32, :tileable => true)
「32, 32」のあたりは、1チップが何x何ドットなのか、の指定。例えばこれが DXRuby だったら、「画像を何分割するか」で指定するけど、Gosuの場合は「チップの大きさ」を指定するので少し注意。

タイルマップ用の画像なので、画像の端がクッキリスパッとしていてくれないと困る。敷き詰めた時に隙間が入ったら見苦しい。故に、:tileable => true を指定してる。

描画については…。例えば DXRuby なら、タイルマップBGを描画するための機能があらかじめ用意されてるけど、どうやら Gosu には無いらしい。仕方ないので、Rubyスクリプト内でループを回して描画してる。

ESCキーを押したら終了するようにしたい。 :

前述のスクリプトは、ESCキーを押すと終了することができる。処理してるのは以下の部分。
  # キーボードチェック
  def button_down(id)
    if id == Gosu::KbEscape
      # ESCキーが押されたらウインドウを閉じて終了する
      close
    end
  end
button_down(id) というメソッドを書くと、何かキーが押された時に、このメソッドを呼んでくれるらしい。id にはキーの種類が入ってるので、Gosu::KbEscape (ESCキー)だったら、close を呼んでウインドウを閉じている。

今気づいたけど、上の部分、Ruby なら以下のように書けますな…。1行で済む…。
  def button_down(id)
    close if id == Gosu::KbEscape
  end

キー種類は、 _Module: Gosu - Documentation for gosu/gosu (master) を眺めてもらえば予想できるかなと。KbXXXXX てのがキー種類、だと思われます。

スプライト相当を描画してみる。 :

スプライト相当を描画してみる。64x64ドットの画像を、512枚描画してみよう。

_sprite_test.rb
require 'gosu'

# スプライト相当のクラス
class MySpr

  # コンストラクタ
  def initialize(x, y, vx, vy, img, scrw, scrh)
    @fpx = x
    @fpy = y
    @fpvx = vx
    @fpvy = vy
    @scrw = scrw
    @scrh = scrh
    @w = img.width
    @h = img.height
    @whf = @w / 2
    @hhf = @h / 2
    @image = img
    @x = (@fpx - @whf).to_i
    @y = (@fpy - @hhf).to_i
  end

  # 更新処理
  def update
    @fpx += @fpvx
    @fpy += @fpvy
    @x = (@fpx - @whf).to_i
    @y = (@fpy - @hhf).to_i
    @fpvx *= -1 if @x + @w >= @scrw or @x <= 0
    @fpvy *= -1 if @y + @h >= @scrh or @y <= 0
  end

  # 描画処理
  def draw
    @image.draw(@x, @y, 0)
  end
end

class MyWindow < Gosu::Window

  # コンストラクタ
  def initialize
    super 640, 480, false
    self.caption = "Sprite Test"
    scrw = self.width
    scrh = self.height

    # スプライト発生
    pmax = 512
    img = Gosu::Image.new("tmp_ufo.png", :tileable => true)
    x, y = 320, 240
    @sprgroup = []
    pmax.times do |i|
      rad = (i * 360 / pmax) * Math::PI / 180
      dx = 3.0 * Math::cos(rad)
      dy = 3.0 * Math::sin(rad)
      @sprgroup.push(MySpr.new(x, y, dx, dy, img, scrw, scrh))
    end

    @frame = 0
  end

  # 更新処理
  def update
    @sprgroup.each do |spr|
      spr.update
    end

    @frame += 1
  end

  # 描画処理
  def draw
    @sprgroup.each do |spr|
      spr.draw
    end
  end

  # キーボードチェック
  def button_down(id)
    if id == Gosu::KbEscape
      # ESCキーが押されたらウインドウを閉じて終了する
      # Gosu::Window.close() を呼ぶとウインドウが閉じる
      close
    end
  end
end

window = MyWindow.new
window.show
使用画像は以下。

_tmp_ufo.png

ruby sprite_test.rb で実行してみる。



動きました。

DXRuby には、Sprite というクラスが用意されてたりするけど、Gosu には無いみたい。なので、スプライト相当のクラスを自前で作って、描画処理等もその中で書いている。

FPS(フレームレート)を測定する。 :

ところで、自分の手元の環境で Gosu を動かすと、なんだか動きがガクガクするんだよな…。Gosuって、本当に60FPS出てるのかな?

不安になってきたので、 _フレームレートの計測 を参考にして、FPSを測定する処理を書いてみたり。

_framerate_test.rb
require 'gosu'

# フレームレートを測定するクラス
class FrameRate
  attr_reader :framerate

  def initialize
    @cnt = 0
    @framerate = 0
    @start_time = Time.now
  end

  # 毎フレーム呼ぶ
  def update
    @cnt += 1
    n = Time.now
    nd = n - @start_time
    return if nd < 1.0
    @framerate = @cnt / nd
    @start_time = n
    @cnt = 0
  end
end

# メインウインドウ
class MyWindow < Gosu::Window
  # コンストラクタ
  def initialize
    super 640, 480, false
    self.caption = 'Sprite Test'
    @font = Gosu::Font.new(20)
    @frate = FrameRate.new
  end

  # 更新処理
  # def update
  # end

  # 描画処理
  def draw
    @frate.update
    f = @frate.framerate.to_s
    @font.draw("FPS #{f}", 10, 10, 0)
  end

  # キーボードチェック
  def button_down(id)
    # ESCキーが押されたらウインドウを閉じて終了する
    # Gosu::Window.close() を呼ぶとウインドウが閉じる
    close if id == Gosu::KbEscape
  end
end

window = MyWindow.new
window.show

ruby framerate_test.rb で実行。



計測できてるみたい。しかし、どうも微妙に60FPSに足りてない感じが。なんでだろ。

合体させる。 :

今まで書いてきたソレを全部合体させてみる。ソースが長くなってきたので貼らないけど。

やってることは、スプライト相当 512枚 + タイルマップBG x 2枚の描画。その程度の描画ができれば、一般的というか、若干レトロ風なリアルタイム2Dゲームも書けるだろう…。

_gosu_fps_test.rb

使用画像。

_tmp_bg1.png
_tmp_bg2.png
_tmp_ufo.png

ruby gosu_fps_test.rb で実行。



何故か微妙に60FPSに足りてなくて、そのせいかガクガクしてる感じもするけど、このくらいの速度で動けば、まあ、ゲームになるんじゃないかな、と。

別のWindows機で動かしてみる。 :

このスクリプトを他の環境に持っていっても動くのかどうか。気になる…。

ちなみに、今まで動かしてた環境(ハードウェアスペック)は以下。
  • CPU : Intel Core i5-2500 (4コア, 3.3GHz)
  • GPU : NVIDIA GeForce GTX 750 Ti (RAM 2GB)
  • RAM : 8GB (DDR3-1333/PC-10600 SDRAM, 4GB x 2)
  • OS : Windows10 x64

前述の gosu_fps_test.rb を、他のWindows機でも動かせるように、ocra で exe化。ocra を使うと Rubyスクリプトを exe化してくれる。使い方は、DXRuby の解説記事が参考になるかと。

_ocraによるexe化

少し古い別PCに持っていって動かしてみた。
  • CPU : AMD AthlonII X4 605e (4コア, 2.3GHz, TDP 45W) …当時としては処理能力より省電力性を重視したCPU。
  • M/B : ASRock M3A785GMH/128M (MicroATX, Socket AM3, AMD 785G)
  • GPU : オンボードビデオ Radeon HD 4200 (RS800, VRAM 624MB) AMD785Gチップセットと統合されてる。
  • RAM : 8GB (DDR3-1333/PC3-10600, 4GB x 2)
  • OS : Windows7 Home x64

AMD/ATI製とは言え所詮はオンボードGPUなので、どうかなーと思ったけど。60FPS前後で動いてくれた。

一昔前の省電力性を重視したCPU + 一昔前のオンボードGPUでもこの程度動くなら、Gosuを使ってゲームを作っても動かせる環境は比較的多いのではあるまいか、と。

もっとも、Atom CPU あたりが載った環境で動かすとどうなるか、気になるところではあるけど…。もちろん初期のAtomでは話にならないはずだけど、今時のAtomならどうなのだろうと。60FPSが出ちゃうのか、ガクガクしちゃうのか、ちょっと気になるなと。

#3 [ruby][gosu][ubuntu] Ubuntu 16.04 LTS上で Ruby + Gosu を動かしてみる

Gosuはクロスプラットフォーム対応ライブラリなので、せっかくだから Ubuntu Linux 16.04 LTS上でも動かしてみる。

環境は以下。 要するに、Windows上で仮想PCを動かして、その上で Ubuntu を動かす。

Linux上での Gosu のインストール手順は、以下のページにまとまってた。ありがたや。

_Getting Started on Linux - gosu/gosu Wiki

Gosu の動作に必要なパッケージを、apt-get を使ってインストールする。端末を開いて、以下を打ち込む。
sudo apt-get install build-essential libsdl2-dev libsdl2-ttf-dev libpango1.0-dev libgl1-mesa-dev libopenal-dev libsndfile-dev
sudo apt-get install ruby-dev

準備が出来たら Gosu をインストール。
$ sudo gem install gosu

Fetching: gosu-0.10.8.gem (100%)
Building native extensions.  This could take a while...
Successfully installed gosu-0.10.8
Parsing documentation for gosu-0.10.8
Installing ri documentation for gosu-0.10.8
Done installing documentation for gosu after 7 seconds
1 gem installed
ビルドされて、インストールができた模様。

Windows上で動かしていたスクリプトを、Ubuntu上にコピーして実行してみた。



画像表示しかしてないスクリプト群ではあるけど、あっさり動いてしまった。

仮想PC上で動かすからガクガクしちゃうかなと想像していたけど、見た目それほど悪くない感じ。結構滑らかに動いてくれた。

Ubuntuを入れた実機上でも動かしてみる。 :

足元で埃を被ってる、Ubuntu 16.04 LTS を入れてある実機でも動かしてみる。スペックは以下。
  • CPU : AMD Athlon II X2 250 (2コア,3GHz, TDP 65W)
  • GPU : オンボードGPU AMD 785G (Radeon HD 4200)
  • OS : Ubuntu 16.04 LTS



フツーに60FPS前後が出た。

ていうか、メインPC(Windows10機)で動かした時より、ガクガクしてないのですけど…。となると、どうやらメインPCが、何かしらおかしい可能性が…。

Ubuntu 14.04 の実機でも動かしてみる。 :

更に、部屋の隅で埃を被ってた Lubuntu 14.04 LTS が入れてある実機でも動かしてみた。スペックは以下。
  • CPU : AMD Sempron 3100+ (シングルコア, 1.8GHz, Socket754)
  • M/B : MSI K8MM-V (VIA K8M800チップセット)
  • GPU : オンボードGPU (K8M800に統合, UniChrome Pro)
  • RAM : 1.5GB (PC3200/DDR400, SDRAM, 1GB + 512MB, シングルチャネル)
  • OS : Lubuntu 14.04 LTS (LXDEで構成された比較的軽量な Ubuntu)
ご覧の通り、かなり古いハードウェア。

動くことは動くけど、2〜3 FPSだった。60FPSには程遠い。全く話にならない。さすがにハードウェアが古過ぎた。

改善する方法は無いのかなと少しググってみたけど、チップセット VIA K8M800 に統合されてるオンボードビデオ S3 UniChrome Pro はVIAが資料を見せてくれないからLinux用のドライバ開発がなかなか進まなくてパフォーマンスが出ないのじゃよ、と嘆いてる記事が2012年頃に書かれてた。このPC上では、別途ビデオカードを追加しないとダメっぽいな…。

さておき。Ubuntu 16.04 なら Gosu の動作に必要なパッケージがすんなりインストールできるのだけど。Ubuntu(Lubuntu) 14.04 上に Gosu をインストールしようとしたらちょっとハマったので、そのあたりは別記事にしてメモ。

#4 [ruby][gosu][ubuntu] Lubuntu 14.04 LTSに Ruby 2.3 + Gosu をインストール

Lubuntu 14.04 LTS 上で、Ruby 2.3 + Gosu をインストールした際の手順をメモ。

以下の、Ubuntu 14.04版のインストール手引書を参考にして打ち込んでみたけれど…。

_Getting Started on Linux - gosu/gosu Wiki

$ sudo apt-get install build-essential libsdl2-dev libsdl2-ttf-dev libpango1.0-dev libgl1-mesa-dev libfreeimage-dev libopenal-dev libsndfile-dev

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
注意、'libsndfile-dev' の代わりに 'libsndfile1-dev' を選択します
build-essential はすでに最新版です。
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 libsdl2-dev : 依存: libgles2-mesa-dev
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

そもそも libsdl2-dev がインストールできないという。

以下を参考にして、もう少し作業。

_Raspberry Pi 2にUbuntu 14.04を入れてみた - Qiita
_Raspberry Pi - View topic - Ubuntu 14.04 (trusty) Raspberry Pi 2 image

$ sudo apt-get download libegl1-mesa-dev
$ sudo apt-get download libgles2-mesa-dev
$ sudo dpkg -i --force-overwrite libegl1-mesa-dev_*.deb
# => エラーになる
$ sudo dpkg -i --force-overwrite libgles2-mesa-dev_*.deb
# => エラーになる
$ sudo apt-get install -f

ここまでやってから、以下を実行。
$ sudo apt-get install libsdl2-dev
インストールできた、かな。続けて以下を実行。
$ sudo apt-get install build-essential libsdl2-dev libsdl2-ttf-dev libpango1.0-dev libgl1-mesa-dev libfreeimage-dev libopenal-dev libsndfile-dev
インストールできた。が、コレでいいのかどうか…。

続けて Ruby自体をインストール。Ubuntu 14.04 LTS は、公式では Ruby 1.9 までしかパッケージが用意されてないので、リポジトリ?を追加して Ruby 2.3 をインストールすることにする。

_Ubuntu 14.04 に apt-get で Ruby 2.1 をインストールする方法 - Rails 雑感 - Ruby on Rails with OIAX
_PPAパッケージを利用してRuby 2.2をUbuntu 14.04にインストールする | hrendoh's memo

$ sudo add-apt-repository -y ppa:brightbox/ruby-ng
$ sudo apt-get update
$ sudo apt-get install ruby2.3 ruby2.3-dev

$ ruby --version
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux-gnu]
インストールできた、かな。

ちなみに、Rubyのバージョンを切り替えたい時は以下を打って設定する。
$ sudo update-alternatives --list ruby
$ sudo update-alternatives --config ruby

これで必要なアレコレは入ったはずなので、Gosuをインストールしてみた。
$ gem install gosu
インストールできた。

ここまでやって、ようやく Lubuntu (Ubuntu) 14.04 LTS 上でも Gosu が動くようになった。

apt-get関係でもう少し作業。 :

libsdl2-dev をインストールする際、 _apt - Cannot install libgles2-mesa-dev - Ask Ubuntu に従って、以下も実行してみた。
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg --configure -a
sudo apt-get -f install
sudo apt-get -u dist-upgrade
sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
関係してくるのかどうかは分からないけど一応メモ。

以上、1 日分です。

過去ログ表示

Prev - 2016/12 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project