| 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