すごい広島#9に参加してきました。
最近、RubyMotionで遊べてなかったので、
この機会にRubyMotionでcocos2dやってみようと思い立ちました。
RubyMotionからCocoapodsを使ってcocos2dをインストールすると、
毎回、cocos2dのソースのダウンロードで待たされてしまう様なので
rubymotion + joyboxを使うとその辺が楽になるのか試してみました。
今回やったこと
- joyboxのインストール
- プロジェクトの雛形の生成
- joyboxで簡単な処理を書いてみる
joyboxのインストール
joyboxはgemコマンドでインストールし、
その後、joyboxコマンドでセットアップします。
セットアップ後、rubymotionでjoybox用のプロジェクトテンプレートが使えるようになります。
1 2 3
| $ gem install joybox $ joybox install Joybox RubyMotion Templates and Commands installed correctly
|
joyboxのインストール場所を覗いてみると、
gems/joybox-1.0.0/vendor/vendor-ios/cocos_2d/cocos_2d_include
あたりにcocos2dのヘッダファイルが入っているようです。
cocos2dの2.1.0が入っているっぽいです。
コンパイル済みの静的ライブラリファイルは、
gems/joybox-1.0.0/vendor/vendor-ios/cocos_2d/libcocos2d.a
に置いてありました。
これで、ソースファイルのダウンロードやコンパイルで待たされずに済みそうです。
プロジェクトの雛形の生成
rubymotionのプロジェクトを作成します。
–templateオプションに、joybox用のテンプレートを指定することで、
joyboxを動かすのに必要なソースコードが自動生成されます
1 2 3 4 5 6 7 8 9
| $ motion create --template=joybox-ios joybox_test Create joybox_test Create joybox_test/app/app_delegate.rb Create joybox_test/Rakefile Create joybox_test/resources/Default-568h@2x.png Create joybox_test/resources/fps_images-hd.png Create joybox_test/resources/fps_images-ipadhd.png Create joybox_test/resources/fps_images.png Create joybox_test/spec/main_spec.rb
|
生成されたコードを見てみると、
cocos2dの初期化コードをJoyboxが隠蔽してくれているようで、
だいぶスッキリした感じです。
app/app_delegate.rb1 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| class AppDelegate
def application(application, didFinishLaunchingWithOptions:launchOptions)
@director = Joybox::Configuration.setup do director display_stats: true end
@navigation_controller = UINavigationController.alloc.initWithRootViewController(@director) @navigation_controller.navigationBarHidden = true
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds) @window.setRootViewController(@navigation_controller) @window.makeKeyAndVisible true end
def applicationWillResignActive(app) @director.pause if @navigation_controller.visibleViewController == @director end
def applicationDidBecomeActive(app) @director.resume if @navigation_controller.visibleViewController == @director end
def applicationDidEnterBackground(app) @director.stop_animation if @navigation_controller.visibleViewController == @director end
def applicationWillEnterForeground(app) @director.start_animation if @navigation_controller.visibleViewController == @director end
def applicationWillTerminate(app) @director.end end
def applicationDidReceiveMemoryWarning(app) @director.purge_cached_data end
def applicationSignificantTimeChange(app) @director.set_next_delta_time_zero true end end
|
Rakefileは「require ‘joybox’」以外はいつも通りのようです。
Rakefile1 2 3 4 5 6 7 8 9
| $:.unshift("/Library/RubyMotion/lib") require 'motion/project/template/ios' require 'joybox'
Motion::Project::App.setup do |app| app.name = 'joybox_test' end
|
joyboxで簡単な処理を書いてみる
cocos2dでお馴染みのCCSceneクラスをjoybox風に書いてみました。
ラベルを表示したり、画像を表示したりする処理を行なってます。
app/my_scene.rb1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class MyScene < Joybox::Core::Scene
def on_enter
label = Label.new( text: "Congratulations!!", font_size: 40, color: Color.new(255, 255, 255), position: [Screen.half_width, Screen.half_height], dimensions: [120, 40] )
self << label
sprite = Sprite.new( file_name: 'apple.jpg', position: [Screen.half_width, Screen.half_height + 80], )
self << sprite end
end
|
app_delegate.rbのapplicationメソッド内に処理を追加します。
app/app_delegate.rb1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| def application(application, didFinishLaunchingWithOptions:launchOptions)
@director = Joybox::Configuration.setup do director display_stats: true end
@navigation_controller = UINavigationController.alloc.initWithRootViewController(@director) @navigation_controller.navigationBarHidden = true
@window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds) @window.setRootViewController(@navigation_controller) @window.makeKeyAndVisible
@director << MyScene.new true end
|
rakeコマンドを実行します。
こんな感じで表示されました。
感想
joyboxを使った場合、cocos2dの処理をスネークケースでrubyぽく書けるようです。
ただ、いつの間にかRubymotionのライセンスが切れていて、
古いRubymotionでjoyboxが動かず色々ハマりました。
ちゃんとライセンス更新したほうがいいみたいです。