目次へもどる

GameMain?

シーンができたので今度はシーンを管理する機構,すなわちゲームの処理のメインとなる部分を作る.

シーンの追加考察

まずシーンについてだが, シーンの切り替えについてはいくつかのパターンがある.

  1. change
  2. push
  3. jump

changeは「タイトル画面→ゲーム画面」のように単純にシーンが切り替わる. pushは「マップ画面→メニュー画面→マップ画面」のようにもとのシーンを保持したままシーンを切り替え,また戻ってくるような切り替え. jumpは「リセットボタン」のようにとにかくそのシーンへぶっ飛ぶ切り替え.

これらを実現するデータ構造としてはスタックが適切である. changeならスタックトップのシーンをポップして新たなシーンをプッシュすればよい. pushなら単純にシーンをプッシュして,戻るときはポップする. jumpはスタックを全部捨てれば良い.

今回はこれらの実装はおいおいやればどうにでもなるのでpushだけ作っといた. どうせ当分ScenePuyoPuyo?しかないので問題ない.

GameMain?の定義

ゲームのメイン処理は複数存在しないので,クラスではなくモジュールで実装する.

module GameMain
  @scene = []

  def self.main
    scene_push(ScenePuyoPuyo)
    StarRuby::Game.run(320, 240, :title => "PuyoPuyo", :fps => 60) do |game|
      break if @scene.empty?
      @scene.last.main
    end
  end
  
  def self.game
    StarRuby::Game.current
  end
  def self.screen
    StarRuby::Game.current.screen
  end

  def self.scene_push(scene)
    @scene.push scene.new
    @scene.last.start
  end

  def self.scene_pop
    @scene.pop.terminate
  end
end

if __FILE__ == "game_main.rb"
  require "./require.rb"
  GameMain.main
end

上記の説明のとおりシーンはスタックで管理すれば良いので@sceneに配列を作っておく.

「main」メソッドではStarRuby?を使ってゲームウインドウを作成し,メインループを作っている. このループ内でスタックトップのシーンのmainメソッドを呼びまくる. シーンスタックが空になればゲームが終了する仕組みになっている.

以後,テストプレイはgame_main.rbをトップレベルで実行することで行う.

$ ruby game_main.rb

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-30 (金) 21:59:47 (3890d)