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

MyGame リファレンスマニュアル

Copyright:Copyright (C) Dan Yamamoto, 2007. All rights reserved.
License:Ruby ライセンスに準拠

MyGame は Ruby/SDL をラップしたゲーム開発用のライブラリです。 「シンプルなゲーム開発」を目指して開発されています。

外部サイトへのリンク

開発履歴

  • 2007-05-25
    • ドキュメント追記
    • ver 0.9.0 リリース
  • 2007-03-03
    • ハッシュによるキーワード引数的 API 導入
  • 2007-01-07
    • RDOC でリファレンス作成
  • 2006-12-07
    • 基本仕様と実装が完成

Methods

Classes and Modules

Module MyGame::Key
Module MyGame::Scene
Class MyGame::DrawPrimitive
Class MyGame::FillSquare
Class MyGame::Font
Class MyGame::Image
Class MyGame::Music
Class MyGame::ShadowFont
Class MyGame::Square
Class MyGame::TransparentImage
Class MyGame::Wave

Public Instance methods

イベント処理を追加します。 event はシンボルで指定します。

 # マウスを動かしたときに発生するイベントを登録する例
 MyGame.add_event(:mouse_motion) {|event| puts "x:#{event.x} y:#{event.y}" }

event に指定できるシンボルには次のものがあります。

  • :active …… マウスカーソルのウインドウの出入り、キーボードフォーカスの得失、および最小化・アイコン化されたり元に戻ったときに発生します。
  • :key_down …… キーボードを押したときに発生するイベントです。
  • :key_up …… キーボードを離したときに発生するイベントです。
  • :mouse_motion …… マウスを動かしたときに発生するイベントです。
  • :mouse_button_down …… マウスボタンを押したときのイベントです。
  • :mouse_button_up …… マウスボタンを離したときのイベントです。
  • :joy_axis joy_ball …… ユーザがジョイスティックの軸を移動させるとこのイベントが発生します。
  • :joy_hat joy_button_up …… ジョイスティックのトラックボールの動きイベントです。
  • :joy_button_down …… ジョイスティックのハットスイッチの位置変化イベントです。
  • :quit …… 終了要請イベントです。
  • :video_resize …… ウィンドウがリサイズされた時にこのイベントが発生します。

参考: www.kmc.gr.jp/~ohai/rubysdl_ref.html (SDL::Event2の部分)

[Source]

# File mygame/lib/mygame.rb, line 890
  def add_event(event, key = nil, &block)
    @@events[event] || raise("unknown event type `#{event}'")
    key ||= block.object_id
    @@events[event][key] = block
    key
  end

背景色を取得します。

 MyGame.background_color # => [0, 0, 0]

[Source]

# File mygame/lib/mygame.rb, line 843
  def background_color
    @@background_color
  end

背景色を設定します。 設定したい色の RGB 値を配列として与えます。デフォルト値は黒 [0, 0, 0] です。

 MyGame.background_color = [0, 0, 255]  # 背景色を青に設定

[Source]

# File mygame/lib/mygame.rb, line 853
  def background_color=(color)
    @@background_color = color
  end

スクリーンを生成します。 デフォルトでは 640x480 のスクリーンが生成されます。

以下のサンプルは 320x240 のスクリーンを生成する例です。

 require 'mygame'
 MyGame.create_screen 320, 240    # 320 × 240 のスクリーンを生成
 MyGame.main_loop do
   MyGame.Image.render "sample.bmp"
 end

mygame/boot をロードするとデフォルトのスクリーンサイズ 640x480 でスクリーンが生成されます。 mygame/boot で自動的に生成されるスクリーンのサイズを変更したい場合は、 次のようにスクリーンサイズを設定してください。

 DEFAULT_SCREEN_W, DEFAULT_SCREEN_H = 320, 240
 require 'mygame/boot'
 main_loop do
   Image.render "sample.bmp"
 end

※ mygame/boot をロードした場合は自動的に create_screen が呼ばれます。

[Source]

# File mygame/lib/mygame.rb, line 731
  def create_screen(screen_w = (defined?(DEFAULT_SCREEN_W) && DEFAULT_SCREEN_W) || 640,
                    screen_h = (defined?(DEFAULT_SCREEN_H) && DEFAULT_SCREEN_H) || 480,
                    bpp = 16, flags = SDL::SWSURFACE)
    init unless @@ran_init
    @@ran_create_screen = true
    screen = SDL.set_video_mode(screen_w, screen_h, bpp, flags)
    def screen.update(x = 0, y = 0, w = 0, h = 0)
      self.update_rect x, y, w, h
    end
    @@screen = screen
  end

FPS を取得します。

[Source]

# File mygame/lib/mygame.rb, line 811
  def fps
    @@fps
  end

FPS を設定します。

[Source]

# File mygame/lib/mygame.rb, line 817
  def fps=(fps)
    @@fps = fps
  end

MyGame を初期化します。

※ mygame/boot をロードした場合は自動的に呼ばれます。

[Source]

# File mygame/lib/mygame.rb, line 692
  def init(flags = SDL::INIT_AUDIO | SDL::INIT_VIDEO)
    raise if SDL.inited_system(flags) > 0
    @@ran_init = true
    init_events
    SDL.init flags
    SDL::Mixer.open if flags & SDL::INIT_AUDIO
    SDL::Mixer.allocate_channels(16)
    SDL::TTF.init
  end

イベントを初期化します。このメソッドを実行すると登録されているイベントはすべてクリアされます。

[Source]

# File mygame/lib/mygame.rb, line 916
  def init_events
    Events.each {|e| @@events[e] = {} }
    add_event(:quit, :close) { @@loop_end = true }
    add_event(:key_down, :close) {|e| @@loop_end = true if e.sym == Key::ESCAPE }
    @@press_last_key = {}
  end

キー入力のチェックを行います。 使用できるキーシンボルについては MyGame::Key を参照してください。

次のプログラムはスペースキーが押されている間 puts が実行されます。

 MyGame.mian_loop do
   puts "押された!" if key_pressed?(MyGame::Key::SPACE)
 end

[Source]

# File mygame/lib/mygame.rb, line 933
  def key_pressed?(key)
    SDL::Key.press?(key)
  end

メインループを実行します。 メインループ内で実行する処理をブロックで記述します。

 require 'mygame/boot'
 main_loop do
   # ループ処理
   Font.render "Hello, World"
 end

ブロックで渡したループ処理は秒間 60 回呼ばれます。 つまりデフォルトでは秒間60フレームでループ処理が実行されます。

 require 'mygame/boot'
 ct = 0
 main_loop do
   Font.render ct
   ct += 1    # 1秒間に 60 回加算される
 end

[Source]

# File mygame/lib/mygame.rb, line 763
  def  main_loopmain_loop(fps = 60)
    create_screen unless @@ran_create_screen
    @@ran_loop = true
    @@fps = fps
    @@real_fps = 0

    do_wait = true
    @@count = 0
    @@tm_start = @@ticks = SDL.get_ticks

    until @@loop_end
      poll_event
      if block_given?
        screen.fillRect 0, 0, screen.w, screen.h, background_color if background_color
        yield screen
      end
      sync(@@fps) if do_wait
      screen.flip
    end
  end

新規キー入力のチェックを行います。 使用できるキーシンボルについては MyGame::Key を参照してください。

 MyGame.mian_loop do
   puts "押された!" if new_key_pressed?(MyGame::Key::SPACE)
 end

[Source]

# File mygame/lib/mygame.rb, line 945
  def new_key_pressed?(key)
    flag = @@press_last_key[key] == false && SDL::Key.press?(key)
    @@press_last_key[key] = SDL::Key.press?(key)
    flag
  end

MyGame を終了します。

[Source]

# File mygame/lib/mygame.rb, line 704
  def quit
    SDL.quit
  end

FPS (実測値)を取得します。

[Source]

# File mygame/lib/mygame.rb, line 823
  def real_fps
    @@real_fps
  end

イベント処理を削除します。

 # マウスを動かしたときに発生するイベントを削除
 MyGame.remove_event(:mouse_motion)

[Source]

# File mygame/lib/mygame.rb, line 903
  def remove_event(event, key=nil)
    if key
      @@events[event].delete(key)
    else
      @@events[event].each {|key, | @@events[event].delete(key) }
    end
  end

スクリーンオブジェクトを取得します。

[Source]

# File mygame/lib/mygame.rb, line 834
  def screen
    @@screen
  end

背景色を設定します。 設定したい色の RGB 値を配列として与えます。デフォルト値は黒 [0, 0, 0] です。

 MyGame.set_background_color [0, 0, 255]  # 背景色を青に設定

[Source]

# File mygame/lib/mygame.rb, line 863
  def set_background_color(color)
    self.background_color = color
  end

[Validate]