Module | MyGame::Scene |
In: |
mygame/lib/mygame/scene.rb
|
シーンとシーン遷移を実現する簡易フレームワークです。 Scene::Base クラスを継承してシーンを作成します。
シーンクラスには init, quit, update, render メソッドを定義してください(使わないメソッドは省略可能)。 シーンクラスは Scene.main_loop メソッドを使って実行します。
Scene.main_loop MyScene # シーンクラスを実行
2 つのシーンクラスを作成し、 Title シーンから Game シーンへ遷移するサンプルです。
require 'mygame/boot' class Title < Scene::Base # タイトルシーン def init # 初期化処理(シーン生成時に呼ばれる) @image = Image.new("sample.png") end def quit # 終了処理(シーン終了時に呼ばれる) end def update # 更新処理(毎フレーム呼ばれる) if new_key_pressed?(Key::SPACE) self.next_scene = Game # Game シーンへ遷移 end if new_key_pressed?(Key::Q) self.next_scene = Scene::Exit # プログラムの終了 end end def render # 描画処理(毎フレーム呼ばれる) @image.render end end class Game < Scene::Base # ゲームシーン # ゲームシーン定義(略) end Scene.main_loop Title # シーンクラスを実行
シーンクラスを実行します。
Scene.main_loop MyScene # シーンクラスを実行
# File mygame/lib/mygame/scene.rb, line 105 def self.main_loop(scene_class, fps = 60, step = 1) MyGame.create_screen scene = scene_class.new default_step = step MyGame.main_loop(fps) do if MyGame.new_key_pressed?(Key::PAGEDOWN) step += 1 MyGame.fps = fps * default_step / step end if MyGame.new_key_pressed?(Key::PAGEUP) and step > default_step step -= 1 MyGame.fps = fps * default_step / step end step.times do break if scene.next_scene scene.__send__ :__update end scene.__send__ :__render if scene.next_scene scene.__send__ :__quit break if Exit == scene.next_scene scene = scene.next_scene.new end end end