Module: Miyako::Screen
- Defined in:
- lib/Miyako/API/layout.rb,
lib/Miyako/API/screen.rb
Overview
画面管理モジュール
Constant Summary collapse
- DefaultWidth =
デフォルトの画面解像度(幅)
640
- DefaultHeight =
デフォルトの画面解像度(高さ)
480
- FpsMax =
fpsの最大値(1000fps)
1000
- WINMODES =
画面モードの数(ウインドウモード、フルスクリーンモード)
2
- WINDOW_MODE =
ウインドウモードを示す値
0
- FULLSCREEN_MODE =
フルスクリーンモードを示す値
1
- ScreenFlag =
ウインドウモード・フルスクリーンモードを切り替える際のフラグを示す配列
$miyako_use_opengl ? [SDL::OPENGL, SDL::OPENGL | SDL::FULLSCREEN] : [SDL::HWSURFACE | SDL::DOUBLEBUF | SDL::ANYFORMAT, SDL::HWSURFACE | SDL::DOUBLEBUF | SDL::ANYFORMAT | SDL::FULLSCREEN]
- @@initialized =
false
- @@fps =
fps=0 : no-limit
0
- @@fpsView =
false
- @@fpscnt =
Screen::get_fps_count
- @@interval =
0
- @@min_interval =
3
- @@min_interval_r =
@@min_interval / 1000
- @@t =
0
- @@freezing =
false
- @@mode =
@@mode = FULLSCREEN_MODE
WINDOW_MODE
- @@unit =
SpriteUnitFactory.create
- @@pos =
Size.new(0,0)
- @@size =
Size.new(DefaultWidth, DefaultHeight)
- @@in_the_scene =
false
- @@screen =
nil
- @@viewport =
nil
- @@pre_render_array =
SpriteList.new
- @@auto_render_array =
SpriteList.new
Class Method Summary collapse
-
.auto_render_array ⇒ Object
自動描画インスタンス配列を取得する Screenモジュールに属しているオートレンダー(自動描画)配列にアクセス可能 この配列に取り込んだインスタンスは、配列インデックスの順に描画される また、配列の要素は、必ずrenderメソッドを実装していなければならない(renderメソッドで描画するため) 但し、配列の要素が配列のときは、再帰的に描画が可能 返却値:: 自動描画配列.
-
.bitmap ⇒ Object
画面を管理するインスタンスを取得する 返却値:: 画面インスタンス(SDL::Screenクラスのインスタンス).
-
.broad_rect ⇒ Object
現在の画面の最大の大きさを矩形で取得する 但し、Screenの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる 返却値:: 画像の大きさ(Rect構造体のインスタンス).
-
.capture(param, rect = ([0, 0] + @@size.to_a)) ⇒ Object
現在表示されている画面を画像(Spriteクラスのインスタンス)として取り込む param:: Spriteインスタンスを生成するときに渡すパラメータ(但し、:sizeと:typeのみ使用する) rect:: 取り込む画像の矩形(4要素の配列もしくはRect構造体のインスタンス) デフォルトは画面の大きさ 返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス.
-
.center_x ⇒ Object
画像の回転・拡大・縮小の中心座標を取得する x方向の中心座標を取得する 返却値:: 中心座標。.
-
.center_x=(pos) ⇒ Object
画像の回転・拡大・縮小の中心座標を取得する x方向の中心座標を取得する pos:: 中心座標.
-
.center_y ⇒ Object
画像の回転・拡大・縮小の中心座標を取得する y方向の中心座標を取得する 返却値:: 中心座標。.
-
.center_y=(pos) ⇒ Object
画像の回転・拡大・縮小の中心座標を取得する y方向の中心座標を取得する pos:: 中心座標.
-
.check_mode_error(screen = nil) ⇒ Object
:nodoc:.
-
.clear ⇒ Object
画像を消去する 画像を黒色()で塗りつぶす.
- .disable_render ⇒ Object
- .enable_render ⇒ Object
-
.fps ⇒ Object
:nodoc:.
-
.fps=(val) ⇒ Object
:nodoc:.
-
.fps_view ⇒ Object
:nodoc:.
-
.fps_view=(val) ⇒ Object
:nodoc:.
- .get_fps_count ⇒ Object
-
.h ⇒ Object
画面の高さを取得する 返却値:: 画面の高さ(ピクセル).
-
.init(screen = nil) ⇒ Object
画面関連の初期化処理 呼び出し時に、別プロセスで生成したSDL::Screenクラスインスタンスを引数として渡すと、 Miyakoはこのインスタンスを利用して描画を行う ただし、既に初期化済みの時はMiyakoErrorが発生する screen:: 別のプロセスで生成されたSDL::Screenクラスのインスタンス。省略時はnil.
-
.initialized? ⇒ Boolean
画面関係の初期化がされた?.
-
.open(screen = nil) ⇒ Object
画面のサーフェスを生成する グローバル変数$miyako_open_screen==falseの時に有効 画面サーフェスを生成し、表示させる 事前に何もせずにrequire ‘Miyako/miyako’を行うと本メソッドが自動的に呼ばれる。 require 前に“$miyako_open_screen=false”と記述すると、本メソッドの呼び出しが抑制される。 screen:: 別のプロセスで生成されたSDL::Screenクラスのインスタンス。省略時はnil.
-
.pos ⇒ Object
画面の左上位置を取得する 位置は必ずを返す 返却値:: Size構造体.
-
.pre_render ⇒ Object
プリレンダー配列に登録されたインスタンスを画面に描画する Screen.pre_render_arrayに登録したインスタンスを描画する.
-
.pre_render_array ⇒ Object
事前描画インスタンス配列を取得する Screenモジュールに属している事前レンダー(プリレンダー)配列にアクセス可能 この配列に取り込んだインスタンスは、配列インデックスの順に描画される また、配列の要素は、必ずrenderメソッドを実装していなければならない(renderメソッドで描画するため) 但し、配列の要素が配列のときは、再帰的に描画が可能 描画は、Screen.pre_renderメソッドの明示的呼び出しで実行される 返却値:: 自動描画配列.
-
.rect ⇒ Object
現在の画面の大きさを矩形で取得する 返却値:: 画像の大きさ(Rect構造体のインスタンス).
-
.render ⇒ Object
画面を更新する 描画した画面を、実際にミニ見える形に反映させる 呼び出し時に画面の消去は行われないため、消去が必要なときは明示的にScreen.clearメソッドを呼び出す必要がある また、自動描画配列にインスタンスを入れているときは、このメソッドを呼び出した時に描画されるため (つまり、表示の最後に描画される)、描画の順番に注意して配列を利用すること.
- .render_attr ⇒ Object
- .render_attr=(value) ⇒ Object
-
.render_screen(src) ⇒ Object
インスタンスの内容を画面に描画する 転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。 画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。 ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る) (ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない) ブロックの引数は、|インスタンスのSpriteUnit,画面のSpriteUnit|となる。 src:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス) 返却値:: 自分自身を返す.
-
.segment ⇒ Object
Segment構造体を生成する 生成される線分は、x方向が、y方向がとなる 返却値:: 生成したSegment構造体インスタンス.
-
.set_mode(v) ⇒ Object
画面の状態(ウインドウモードとフルスクリーンモード)を設定する v:: ウィンドウモードのときは、Screen::WINDOW_MODE、 フルスクリーンモードのときはScreen::FULLSCREEN_MODE.
-
.set_screen(screen = nil) ⇒ Object
:nodoc:.
-
.set_size(w, h) ⇒ Object
画面の大きさを変更する 単位はピクセル単位 w:: 画面の幅 h:: 画面の高さ 返却値:: 変更に成功したときは trueを返す.
-
.size ⇒ Object
現在の画面の大きさを取得する 返却値:: 画像の大きさ(Size構造体のインスタンス).
-
.to_sprite {|dst| ... } ⇒ Object
現在表示されている画面を複製し、Spriteクラスのインスタンスとして取得 Screen.captureとの違いは、パラメータ・サイズは不変(画面の大きさで複製)で取り扱う。 引数1個のブロックを渡せば、スプライトに補正をかけることが出来る 返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス.
-
.to_unit ⇒ Object
画面を管理するSpriteUnitを取得する 新しいSpriteUnitを作成して返す 返却値:: SpriteUnitインスタンス.
-
.toggle_mode ⇒ Object
ウインドウモードとフルスクリーンモードを切り替える.
-
.viewport ⇒ Object
現在のビューポート(表示区画)を取得する ビューポートの設定は、Viewport#renderで行う 返却値:: ビューポート(Viewportクラスのインスタンス).
-
.w ⇒ Object
画面の幅を取得する 返却値:: 画面の幅(ピクセル).
Class Method Details
.auto_render_array ⇒ Object
自動描画インスタンス配列を取得する
Screenモジュールに属しているオートレンダー(自動描画)配列にアクセス可能 この配列に取り込んだインスタンスは、配列インデックスの順に描画される また、配列の要素は、必ずrenderメソッドを実装していなければならない(renderメソッドで描画するため) 但し、配列の要素が配列のときは、再帰的に描画が可能
- 返却値
-
自動描画配列
127 128 129 |
# File 'lib/Miyako/API/screen.rb', line 127 def Screen::auto_render_array @@auto_render_array end |
.bitmap ⇒ Object
画面を管理するインスタンスを取得する
- 返却値
-
画面インスタンス(SDL::Screenクラスのインスタンス)
156 157 158 |
# File 'lib/Miyako/API/screen.rb', line 156 def Screen::bitmap return @@screen end |
.broad_rect ⇒ Object
現在の画面の最大の大きさを矩形で取得する
但し、Screenの場合は最大の大きさ=画面の大きさなので、rectと同じ値が得られる
- 返却値
-
画像の大きさ(Rect構造体のインスタンス)
223 224 225 |
# File 'lib/Miyako/API/screen.rb', line 223 def Screen::broad_rect return Screen.rect end |
.capture(param, rect = ([0, 0] + @@size.to_a)) ⇒ Object
現在表示されている画面を画像(Spriteクラスのインスタンス)として取り込む
- param
-
Spriteインスタンスを生成するときに渡すパラメータ(但し、:sizeと:typeのみ使用する)
- rect
-
取り込む画像の矩形(4要素の配列もしくはRect構造体のインスタンス)
デフォルトは画面の大きさ
- 返却値
-
取り込んだ画像を含むSpriteクラスのインスタンス
291 292 293 294 295 296 297 |
# File 'lib/Miyako/API/screen.rb', line 291 def Screen::capture(param, rect = ([0, 0] + @@size.to_a)) param = param.dup param[:size] = Size.new(*(rect[2..3])) dst = Sprite.new(param) SDL.blit_surface(*([@@screen] + rect.to_a << dst.bitmap << 0 << 0)) return dst end |
.center_x ⇒ Object
画像の回転・拡大・縮小の中心座標を取得する
x方向の中心座標を取得する
- 返却値
-
中心座標。
189 190 191 |
# File 'lib/Miyako/API/screen.rb', line 189 def Screen::center_x return @@unit.cx end |
.center_x=(pos) ⇒ Object
画像の回転・拡大・縮小の中心座標を取得する
x方向の中心座標を取得する
- pos
-
中心座標
196 197 198 |
# File 'lib/Miyako/API/screen.rb', line 196 def Screen::center_x=(pos) @@unit.cx = pos end |
.center_y ⇒ Object
画像の回転・拡大・縮小の中心座標を取得する
y方向の中心座標を取得する
- 返却値
-
中心座標。
203 204 205 |
# File 'lib/Miyako/API/screen.rb', line 203 def Screen::center_y return @@unit.cy end |
.center_y=(pos) ⇒ Object
画像の回転・拡大・縮小の中心座標を取得する
y方向の中心座標を取得する
- pos
-
中心座標
210 211 212 |
# File 'lib/Miyako/API/screen.rb', line 210 def Screen::center_y=(pos) @@unit.cy = pos end |
.check_mode_error(screen = nil) ⇒ Object
:nodoc:
279 280 281 282 283 284 |
# File 'lib/Miyako/API/screen.rb', line 279 def Screen::check_mode_error(screen = nil) #:nodoc: unless Screen::set_screen(screen) raise MiyakoError, "Sorry, this system not supported display..."; exit(1) end end |
.clear ⇒ Object
画像を消去する
画像を黒色()で塗りつぶす
312 313 314 315 |
# File 'lib/Miyako/API/screen.rb', line 312 def Screen::clear return unless @@screen @@screen.fillRect(0, 0, @@screen.w, @@screen.h, [0, 0, 0, 0]) end |
.disable_render ⇒ Object
361 362 363 |
# File 'lib/Miyako/API/screen.rb', line 361 def Screen::disable_render @render_attr = false end |
.enable_render ⇒ Object
357 358 359 |
# File 'lib/Miyako/API/screen.rb', line 357 def Screen::enable_render @render_attr = true end |
.fps ⇒ Object
:nodoc:
137 138 139 |
# File 'lib/Miyako/API/screen.rb', line 137 def Screen::fps # :nodoc: return @@fps end |
.fps=(val) ⇒ Object
:nodoc:
141 142 143 144 |
# File 'lib/Miyako/API/screen.rb', line 141 def Screen::fps=(val) # :nodoc: @@fps = val @@fpscnt = @@fps == 0 ? 0 : Screen::get_fps_count end |
.fps_view ⇒ Object
:nodoc:
146 147 148 |
# File 'lib/Miyako/API/screen.rb', line 146 def Screen::fps_view # :nodoc: return @@fpsView end |
.fps_view=(val) ⇒ Object
:nodoc:
150 151 152 |
# File 'lib/Miyako/API/screen.rb', line 150 def Screen::fps_view=(val) # :nodoc: @@fpsView = val end |
.get_fps_count ⇒ Object
42 43 44 |
# File 'lib/Miyako/API/screen.rb', line 42 def Screen::get_fps_count return @@fps == 0 ? 0 : FpsMax / @@fps end |
.h ⇒ Object
画面の高さを取得する
- 返却値
-
画面の高さ(ピクセル)
168 169 170 |
# File 'lib/Miyako/API/screen.rb', line 168 def Screen::h return @@size[1] end |
.init(screen = nil) ⇒ Object
画面関連の初期化処理
呼び出し時に、別プロセスで生成したSDL::Screenクラスインスタンスを引数として渡すと、 Miyakoはこのインスタンスを利用して描画を行う ただし、既に初期化済みの時はMiyakoErrorが発生する
- screen
-
別のプロセスで生成されたSDL::Screenクラスのインスタンス。省略時はnil
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/Miyako/API/screen.rb', line 75 def Screen.init(screen = nil) raise MiyakoError, "Already initialized!" if @@initialized #プログラムで使用する色深度を示す。デフォルトは現在システムが使用している色深度 $miyako_bpp ||= SDL.video_info.bpp #色深度が32ビット以外の時はエラーを返す raise MiyakoError, "Unsupported Color bits! : #{$miyako_bpp}" unless [32].include?($miyako_bpp) if $miyako_use_opengl SDL::GL.set_attr(SDL::GL::RED_SIZE, 8) SDL::GL.set_attr(SDL::GL::GREEN_SIZE, 8) SDL::GL.set_attr(SDL::GL::BLUE_SIZE, 8) SDL::GL.set_attr(SDL::GL::ALPHA_SIZE, 8) SDL::GL.set_attr(SDL::GL::DEPTH_SIZE, 32) SDL::GL.set_attr(SDL::GL::STENCIL_SIZE, 32) SDL::GL.set_attr(SDL::GL::DOUBLEBUFFER, 1) end Screen::check_mode_error(screen) @@initialized = true end |
.initialized? ⇒ Boolean
画面関係の初期化がされた?
97 98 99 |
# File 'lib/Miyako/API/screen.rb', line 97 def Screen.initialized? @@initialized end |
.open(screen = nil) ⇒ Object
画面のサーフェスを生成する
グローバル変数$miyako_open_screen==falseの時に有効 画面サーフェスを生成し、表示させる 事前に何もせずにrequire ‘Miyako/miyako’を行うと本メソッドが自動的に呼ばれる。 require 前に“$miyako_open_screen=false”と記述すると、本メソッドの呼び出しが抑制される。
- screen
-
別のプロセスで生成されたSDL::Screenクラスのインスタンス。省略時はnil
253 254 255 256 257 258 |
# File 'lib/Miyako/API/screen.rb', line 253 def Screen::open(screen = nil) @@screen = screen ? screen : SDL::Screen.open(*(@@size.to_a << $miyako_bpp << ScreenFlag[@@mode])) SpriteUnitFactory.apply(@@unit, {:bitmap=>@@screen, :ow=>@@screen.w, :oh=>@@screen.h}) @@size = Size.new(@@screen.w, @@screen.h) @@viewport = Viewport.new(0, 0, @@screen.w, @@screen.h) end |
.pos ⇒ Object
175 176 177 |
# File 'lib/Miyako/API/screen.rb', line 175 def Screen::pos return @@pos.dup end |
.pre_render ⇒ Object
プリレンダー配列に登録されたインスタンスを画面に描画する
Screen.pre_render_arrayに登録したインスタンスを描画する
319 320 |
# File 'lib/Miyako/API/screen.rb', line 319 def Screen::pre_render end |
.pre_render_array ⇒ Object
事前描画インスタンス配列を取得する
Screenモジュールに属している事前レンダー(プリレンダー)配列にアクセス可能 この配列に取り込んだインスタンスは、配列インデックスの順に描画される また、配列の要素は、必ずrenderメソッドを実装していなければならない(renderメソッドで描画するため) 但し、配列の要素が配列のときは、再帰的に描画が可能 描画は、Screen.pre_renderメソッドの明示的呼び出しで実行される
- 返却値
-
自動描画配列
117 118 119 |
# File 'lib/Miyako/API/screen.rb', line 117 def Screen::pre_render_array @@pre_render_array end |
.rect ⇒ Object
現在の画面の大きさを矩形で取得する
- 返却値
-
画像の大きさ(Rect構造体のインスタンス)
216 217 218 |
# File 'lib/Miyako/API/screen.rb', line 216 def Screen::rect return Rect.new(*([0, 0]+@@size.to_a)) end |
.render ⇒ Object
画面を更新する
描画した画面を、実際にミニ見える形に反映させる 呼び出し時に画面の消去は行われないため、消去が必要なときは明示的にScreen.clearメソッドを呼び出す必要がある また、自動描画配列にインスタンスを入れているときは、このメソッドを呼び出した時に描画されるため (つまり、表示の最後に描画される)、描画の順番に注意して配列を利用すること
327 328 329 330 331 332 333 334 335 336 |
# File 'lib/Miyako/API/screen.rb', line 327 def Screen::render Shape.text( { :text => (FpsMax/(@@interval == 0 ? 1 : @@interval)).to_s() + " fps", :font => Font.sans_serif } ).render if @@fpsView Screen::update_tick @@screen.flip end |
.render_attr ⇒ Object
349 350 351 |
# File 'lib/Miyako/API/screen.rb', line 349 def Screen::render_attr @render_attr end |
.render_attr=(value) ⇒ Object
353 354 355 |
# File 'lib/Miyako/API/screen.rb', line 353 def Screen::render_attr=(value) @render_attr = value ? true : false end |
.render_screen(src) ⇒ Object
インスタンスの内容を画面に描画する
転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。 画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。 ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る) (ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない) ブロックの引数は、|インスタンスのSpriteUnit,画面のSpriteUnit|となる。
- src
-
転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
- 返却値
-
自分自身を返す
346 347 |
# File 'lib/Miyako/API/screen.rb', line 346 def Screen::render_screen(src) end |
.segment ⇒ Object
243 244 245 |
# File 'lib/Miyako/API/screen.rb', line 243 def Screen::segment return Segments.create([0, 0, @@size[0]-1, @@size[1]-1]) end |
.set_mode(v) ⇒ Object
画面の状態(ウインドウモードとフルスクリーンモード)を設定する
- v
-
ウィンドウモードのときは、Screen::WINDOW_MODE、 フルスクリーンモードのときはScreen::FULLSCREEN_MODE
103 104 105 106 107 108 |
# File 'lib/Miyako/API/screen.rb', line 103 def Screen::set_mode(v) if v.to_i == WINDOW_MODE || v.to_i == FULLSCREEN_MODE @@mode = v.to_i Screen::check_mode_error end end |
.set_screen(screen = nil) ⇒ Object
:nodoc:
260 261 262 263 264 |
# File 'lib/Miyako/API/screen.rb', line 260 def Screen::set_screen(screen = nil) #:nodoc: return false unless (screen || SDL.checkVideoMode(*(@@size.to_a << $miyako_bpp << ScreenFlag[@@mode]))) self.open(screen) return true end |
.set_size(w, h) ⇒ Object
画面の大きさを変更する
単位はピクセル単位
- w
-
画面の幅
- h
-
画面の高さ
- 返却値
-
変更に成功したときは trueを返す
271 272 273 274 275 276 277 |
# File 'lib/Miyako/API/screen.rb', line 271 def Screen::set_size(w, h) return unless @@screen return false unless SDL.checkVideoMode(w, h, $miyako_bpp, ScreenFlag[@@mode]) @@size = Size.new(w, h) self.open return true end |
.size ⇒ Object
現在の画面の大きさを取得する
- 返却値
-
画像の大きさ(Size構造体のインスタンス)
236 237 238 |
# File 'lib/Miyako/API/screen.rb', line 236 def Screen::size return @@size.dup end |
.to_sprite {|dst| ... } ⇒ Object
現在表示されている画面を複製し、Spriteクラスのインスタンスとして取得
Screen.captureとの違いは、パラメータ・サイズは不変(画面の大きさで複製)で取り扱う。 引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
- 返却値
-
取り込んだ画像を含むSpriteクラスのインスタンス
303 304 305 306 307 308 |
# File 'lib/Miyako/API/screen.rb', line 303 def Screen::to_sprite dst = Sprite.new(:size => Size.new(*(rect[2..3])), :type => :ac) Bitmap.screen_to_ac(Screen, dst) yield dst if block_given? return dst end |
.to_unit ⇒ Object
画面を管理するSpriteUnitを取得する
新しいSpriteUnitを作成して返す
- 返却値
-
SpriteUnitインスタンス
182 183 184 |
# File 'lib/Miyako/API/screen.rb', line 182 def Screen::to_unit return @@unit.dup end |
.toggle_mode ⇒ Object
ウインドウモードとフルスクリーンモードを切り替える
132 133 134 135 |
# File 'lib/Miyako/API/screen.rb', line 132 def Screen::toggle_mode @@mode = (@@mode + 1) % WINMODES Screen::check_mode_error end |