Barcelona Ruby Conferenceにおいて、Integrallisの創業者であるBrian Sam-Bodden氏が、RubyMotionとオープンソースの2Dグラフィックライブラリを使って、Objective-Cの知識なしにRubyでiOSの2Dゲームをすばやく作る方法についてデモをした。
Ruby MotionはiOSとOSX向けのRuby実装で、Objective-CランタイムとFoundation Framework上に作られている。彼はグラフィックライブラリとして、Cocos2Dゲームエンジンとゲーム内のオブジェクトに物理法則を適用するためのBox2Dを使った。Joyboxはこれらのライブラリをラップするgemで、これらをクリーンなRuby APIで使えるようにする。おかげで、あなたはインストールに苦労することなく、純粋なRuby環境で開発することができる。
Brian氏は最初の例として、AppleのCoreAnimationライブラリだけを使った、Rubyで書かれたテトリスクローンを示した。
class TetrisController < UIViewController
このコントローラは、CoreAnimationが提供する2Dビューのアニメーション、たとえばゲームビューをフリップするアニメーションを使うことができる。
def flip(view)
UIView.transitionWithView(view,
duration: 0.5,
options: UIViewAnimationOptionTransitionFlipFromBottom,
animations: proc {
# any other code that we want to run!
},
completion:nil)
end
2番目の例はもっと複雑で、Joybox gemを使ったスーパーマリオブラザーズ風のゲームだ。
@director = Joybox::Configuration.setup do
director display_stats: true
end
上のコードはデフォルト設定のdirectorインスタンスを返す。このオブジェクトはゲームフローをコントロールするものだ。この例では、もはやCoreAnimationビューはゲームアクションのセットアップを直接操作してはない。もしそうしていれば、テトリスクローンの例でやったよりも、ずっと大量のコーディネーションやグラフィックアニメーション用のコードが必要になっただろう。ここではそうする代わりに、JoyboxのLayerクラスを使って、キャンバス描画とすべてのユーザインタラクションを処理している。これによって、ゲームレイヤーは個々のゲーム面にフォーカスした子を複数持つことができる。
@blue_sky = LayerColor.new color: "#6365fc".to_color
self << @blue_sky
実際のところ、Director、Layer、Sprite(アニメーションさせる2D画像、ゲームの動的要素になる)はすべてCocos2Dライブラリから継承されたコンセプトだが、JoyboxのAPIでラップされて、下位のObjective-C実装ライブラリの代わりに純粋にRubyで書くことができる。
最後に、Box2Dの物理エンジンをラップしたJoyboxのPhysics Spriteクラスを利用することで、Brian氏は作成したゲームworldに、物理法則をいかに簡単に適用できるかを示した。
@world = World.new(gravity: [0, -9.8])
ゲームworld内のbodyを作るのも、その特性を指定することになる。
@player_body = @world.new_body(
position: [16*1, 16*9],
type: Body::Dynamic,
fixed_rotation: true
)
Audio Effectのような機能もJoybox gemから利用できる。
Brian氏はRubyMotionを使ったiOS開発によって、UI操作を必要としないRSpecのような通常のRubyテスティングフレームワークが使えることにも言及した。
このプレゼンテーションは聴衆の興味をかき立てたようで、複数の人がTwitterで彼を賞賛している。