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

以上です。

過去ログ表示

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