Integrallis网站的创始人Brian Sam-Bodden在Barcelona Ruby大会上演示了在没有任何Object-C知识的情况下,如何使用普通的Ruby语言利用RubyMotion 和开源的2D图形类库快速地创建iOS平台上的2D游戏。
\u0026#xD;
Ruby Motion是iOS和OS X平台上的Ruby实现,构建在Objective-C运行时和基础框架之上。它使用的图形类库是Cocos2D游戏引擎,并使用Box2D向游戏中的对象应用物理定律。Joybox则封装了这两个类库并通过一个干净的Ruby API将它们暴露了出来。这样避免了安装的麻烦,并且能够使用纯的Ruby环境进行开发。
\u0026#xD;
Brian给出的第一个例子是使用Ruby编写的一个iOS平台上的俄罗斯方块,它仅通过Ruby使用了Apple的核心动画(CoreAnimation)类库。
\u0026#xD;
\u0026#xD;class TetrisController \u0026lt; UIViewController
\u0026#xD;
通过上面这行代码控制器就能够使用由核心动画类库所提供的2D视图动画了,例如翻转(flip)游戏视图:
\u0026#xD;
\u0026#xD;def flip(view)\u0026#xD; UIView.transitionWithView(view,\u0026#xD; duration: 0.5, \u0026#xD; options: UIViewAnimationOptionTransitionFlipFromBottom, \u0026#xD; animations: proc { \u0026#xD; # any other code that we want to run!\u0026#xD; }, \u0026#xD; completion:nil)\u0026#xD;end\u0026#xD;
\u0026#xD;
第二个更加复杂一点的例子是使用Joybox实现的一个类似于超级玛丽(Super Mario Brothers)的游戏:
\u0026#xD;
\u0026#xD;@director = Joybox::Configuration.setup do\u0026#xD; director display_stats: true\u0026#xD;end\u0026#xD;
\u0026#xD;
上面的代码会返回一个使用默认配置集合的director实例。该对象本质上控制了游戏的流程。在这个例子中,设置游戏活动的时候不再需要直接操作核心动画视图。与俄罗斯方块的例子相比,这个示例需要更多的协作和图形化的动画代码。另外,这个示例还使用了Joybox的图层(Layer)类,它处理了绘图画布和所有的用户交互。然后有一个拥有多个孩子的游戏层关注游戏的不同方面:
\u0026#xD;
\u0026#xD;@blue_sky = LayerColor.new color: \"#6365fc\".to_color\u0026#xD;self \u0026lt;\u0026lt; @blue_sky\u0026#xD;
\u0026#xD;
事实上,Director、Layers和Sprites(可以在动画中使用的2D图片,它们是游戏中的动态元素)都是从Cocos2D类库继承而来的概念,但是Joybox API对它们做了封装,所以开发人员才能够使用纯Ruby语言进行游戏开发,但是底层还是使用Objective-C类库实现。
\u0026#xD;
最后,通过使用Box2D的物理引擎和Joybox 物理Sprite类所封装的内容,Brian展示了如何容易地向被创建的游戏世界应用物理定律:
\u0026#xD;
\u0026#xD;@world = World.new(gravity: [0, -9.8])
\u0026#xD;
在游戏世界中创建一个主体还需要为其指定一些特征:
\u0026#xD;
\u0026#xD;@player_body = @world.new_body(\u0026#xD; position: [16*1, 16*9],\u0026#xD; type: Body::Dynamic,\u0026#xD; fixed_rotation: true\u0026#xD; )
\u0026#xD;
其他的功能,例如音频效果在Joybox中也有。
\u0026#xD;
Brian还强调了使用RubyMotion进行iOS游戏开发时还能够使用常见的Ruby测试框架,例如不需要UI操作的RSpec。
\u0026#xD;
Brian的演讲好像在听众里引起了不小的兴趣,因为一些与会者在Twitter上盛赞了Brian。
\u0026#xD;