物理エンジンでゲームのようなものを作ってみた
空から何かが降ってくるので、カーソルキーで左右に移動してよける。スペースキーでジャンプ。3回当たったら終了。まるで横スクロールみたいだけどスクロールしません。どこにも行けないし何も起きません。ゲームと呼ぶには楽しくなさ過ぎるわけですが、せっかく物理エンジンを移植したので、とにかく何かそれっぽいことに使ってみたくて・・・。
とりあえず背景とキャラクタに画像を表示して、キー操作に応じて動かして、衝突を判定するところまではわりと簡単ということが分かった。根性さえ見せればまともなゲームを作るのにも使えなくはないかなと。
触ってみたいという奇特な人がいたら、ここからソース落として来て
$ shoes sample/shoes/game.rb
で実行できます。なお上のコマンドを見れば分かるように、要Shoes2。いやーShoesでGUI作るのはホント楽でいいっす。さすがwhyプロダクツ。
ちなみに、これ作るにあたってAPEそのままのAPIが冗長で面倒くさかったので、インターフェースをいろいろ修正。素のAPEよりすっきり書けるようになったと思う。
旧API(APEと一緒)使用例
require 'pongo' require 'pongo/container/shoes_container' include Pongo Shoes.app :width => 500, :height => 350 do APEngine.container = Container::ShoesContainer.new(self) APEngine.init APEngine.add_force VectorForce.new(false, 0, 2) default_group = Group.new default_group.collide_internal = true ball = CircleParticle.new(245, 100, 10) default_group.add_particle(ball) ground = RectangleParticle.new(250, 250, 300, 50, :fixed => true) default_group.add_particle(ground) APEngine.add_group(default_group) animate(60) do |anim| APEngine.step APEngine.paint end end
新API(Pongo独自)使用例
require 'pongo' require 'pongo/container/shoes_container' include Pongo Shoes.app :width => 500, :height => 350 do APEngine.setup :gravity => 2, :container => Container::ShoesContainer.new(self) APEngine.create_group do |g| g.circle(245, 100, 10) g.rectangle(250, 250, 300, 50, :fixed => true) end animate(60) do |anim| APEngine.next_frame end end
今のところ画面の描画とイベント処理のコードがかなり行き当たりばったりなので、少し整理して誰でも簡単に物理エンジンを利用したゲームを作れるようにできるといいっすね。