Module MyGame::Scene
In: mygame/lib/mygame/scene.rb

Scene

シーンとシーン遷移を実現する簡易フレームワークです。 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               # シーンクラスを実行

Methods

main_loop  

Classes and Modules

Class MyGame::Scene::Base
Class MyGame::Scene::Exit

Public Class methods

シーンクラスを実行します。

  Scene.main_loop MyScene             # シーンクラスを実行

[Source]

# 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

[Validate]