https://github.com/CicholGricenchos/toho-like-rb
做了个类似东方的 demo,用 gosu 做的,gem install gosu
然后直接运行 game.rb 就能玩。(忘了说要 ruby2.3,因为用了&.)
完成度比较低不过懒得做了,一方面是 gosu 这个库在 windows 下有谜之卡顿,而且确认了不是 ruby 本身的问题,要么是 SDL 的锅要么是 binding 的锅。
所以 ruby 目前做游戏还没有特别好的方案,除非自己处理一次绘图库的 binding,之后还是打算去玩 js。 然后我之前考虑过一个方案是,用 ruby 处理游戏逻辑,然后绘图数据用 websocket 发到前端用 canvas 绘图,但是实测了一下 js websocket 的带宽很小,几百 k 的数据就要几十 ms 了,满足不了 60 帧的需求。 当然还有一个是 opal-pixi,翻译成 js,不过这个是邪道。。
demo 的素材全部取自https://github.com/takahirox/toho-like-js 这个 js 版,完成度很不错,顺带一提作者是《Unix 内核源码剖析》的作者,我买过这本书,无意中点进 linkedin 发现的。。
代码方面没什么好说的,我是因为看不懂 js 版这个才自己写的,所以别人看我写的估计也是看不懂的,不如自己写好懂。。结构上面游戏开发有点类似 react,也是组件树,然后每帧 更新 -> 重绘,有时候前端发明的新概念其实在十几年前人们已经用 c 在这么做了。。
顺带发现的一个好东西:http://www.voidelement.com/bullet/ 这个是一个生成弹幕的 dsl 工具,这套 dsl 也可以用 ruby 实现,弹幕的设计大概就是这么做的,点进一个预设然后点右上角的プレビュー预览,有很多十分华丽的设计