cyross-ruby-miyako 2.0.0 → 2.0.5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. data/README +106 -154
  2. data/defines.h +144 -0
  3. data/{miyako_no_katana/extconf.rb → extconf.rb} +10 -0
  4. data/extern.h +29 -0
  5. data/install_miyako.rb +26 -14
  6. data/lib/Miyako/API/audio.rb +2 -2
  7. data/lib/Miyako/API/basic_data.rb +183 -41
  8. data/lib/Miyako/API/bitmap.rb +474 -2
  9. data/lib/Miyako/API/choices.rb +215 -48
  10. data/lib/Miyako/API/collision.rb +267 -251
  11. data/lib/Miyako/API/diagram.rb +58 -70
  12. data/lib/Miyako/API/drawing.rb +93 -52
  13. data/lib/Miyako/API/fixedmap.rb +233 -120
  14. data/lib/Miyako/API/font.rb +59 -40
  15. data/lib/Miyako/API/input.rb +34 -27
  16. data/lib/Miyako/API/layout.rb +154 -172
  17. data/lib/Miyako/API/map.rb +285 -159
  18. data/lib/Miyako/API/map_event.rb +4 -4
  19. data/lib/Miyako/API/modules.rb +1 -1
  20. data/lib/Miyako/API/movie.rb +8 -5
  21. data/lib/Miyako/API/parts.rb +44 -9
  22. data/lib/Miyako/API/plane.rb +37 -2
  23. data/lib/Miyako/API/screen.rb +90 -22
  24. data/lib/Miyako/API/shape.rb +118 -37
  25. data/lib/Miyako/API/sprite.rb +475 -61
  26. data/lib/Miyako/API/sprite_animation.rb +83 -63
  27. data/lib/Miyako/API/spriteunit.rb +47 -13
  28. data/lib/Miyako/API/story.rb +123 -47
  29. data/lib/Miyako/API/textbox.rb +361 -132
  30. data/lib/Miyako/API/utility.rb +388 -0
  31. data/lib/Miyako/API/viewport.rb +54 -349
  32. data/lib/Miyako/API/yuki.rb +570 -353
  33. data/lib/Miyako/EXT/miyako_cairo.rb +5 -3
  34. data/lib/Miyako/EXT/slides.rb +22 -1
  35. data/lib/Miyako/miyako.rb +12 -13
  36. data/logo/EGSR_logo.png +0 -0
  37. data/logo/EGSR_logo_bg.png +0 -0
  38. data/logo/EGSR_logo_fg.png +0 -0
  39. data/logo/EGSR_title_banner.png +0 -0
  40. data/logo/EGSR_title_logo.png +0 -0
  41. data/logo/miyako.png +0 -0
  42. data/logo/miyako_banner.png +0 -0
  43. data/logo/space.png +0 -0
  44. data/miyako_basicdata.c +590 -0
  45. data/miyako_bitmap.c +1225 -0
  46. data/miyako_collision.c +403 -0
  47. data/miyako_drawing.c +187 -0
  48. data/miyako_font.c +334 -0
  49. data/miyako_hsv.c +830 -0
  50. data/miyako_layout.c +191 -0
  51. data/miyako_no_katana.c +1074 -0
  52. data/miyako_transform.c +438 -0
  53. data/miyako_utility.c +288 -0
  54. data/sample/Animation1/m1ku.rb +10 -31
  55. data/sample/Animation1/readme.txt +6 -6
  56. data/sample/Animation2/lex.rb +1 -0
  57. data/sample/Animation2/readme.txt +6 -6
  58. data/sample/Diagram_sample/diagram_sample_yuki2.rb +152 -48
  59. data/sample/Diagram_sample/readme.txt +9 -6
  60. data/sample/Room3/blue.rb +234 -187
  61. data/sample/Room3/ending.rb +68 -63
  62. data/sample/Room3/green.rb +159 -124
  63. data/sample/Room3/main.rb +50 -32
  64. data/sample/Room3/main_component.rb +3 -2
  65. data/sample/Room3/readme.txt +6 -6
  66. data/sample/Room3/red.rb +161 -134
  67. data/sample/Room3/room3.rb +1 -0
  68. data/sample/Room3/title.rb +75 -62
  69. data/sample/ball_action_sample.rb +204 -0
  70. data/sample/blit_rop.rb +70 -0
  71. data/sample/cairo_sample.rb +25 -0
  72. data/sample/circle_collision_test.rb +66 -0
  73. data/sample/collision_test.rb +33 -0
  74. data/sample/collision_test2.rb +108 -0
  75. data/sample/fixed_map_test/fixed_map_sample.rb +23 -32
  76. data/sample/fixed_map_test/readme.txt +38 -38
  77. data/sample/map_test/chara.rb +17 -9
  78. data/sample/map_test/main_parts.rb +30 -9
  79. data/sample/map_test/main_scene.rb +57 -41
  80. data/sample/map_test/map_manager.rb +13 -30
  81. data/sample/map_test/map_test.rb +2 -2
  82. data/sample/map_test/oasis.rb +17 -11
  83. data/sample/map_test/readme.txt +50 -48
  84. data/sample/map_test/route.rb +46 -33
  85. data/sample/map_test/town.rb +19 -13
  86. data/sample/polygon_test.rb +35 -0
  87. data/sample/rasterscroll.rb +25 -0
  88. data/sample/takahashi.rb +42 -0
  89. data/sample/text.png +0 -0
  90. data/sample/textbox_sample.rb +190 -0
  91. data/sample/transform.rb +54 -0
  92. data/sample/utility_test.rb +73 -0
  93. data/sample/utility_test2.rb +61 -0
  94. data/sample/utility_test3.rb +64 -0
  95. data/sample/utility_test4.rb +73 -0
  96. data/uninstall_miyako.rb +19 -0
  97. data/win/miyako_no_katana.so +0 -0
  98. metadata +165 -148
  99. data/miyako.png +0 -0
  100. data/miyako_banner.png +0 -0
  101. data/miyako_no_katana/miyako_no_katana.c +0 -3301
  102. data/sample/fixed_map_test/map_sample.rb +0 -121
@@ -2,7 +2,7 @@
2
2
  =begin
3
3
  --
4
4
  Miyako v2.0
5
- Copyright (C) 2007-2008 Cyross Makoto
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
6
 
7
7
  This library is free software; you can redistribute it and/or
8
8
  modify it under the terms of the GNU Lesser General Public
@@ -151,7 +151,7 @@ module Miyako
151
151
  #イベント発生が可能なときはtrueを返す(その後、startメソッドを呼び出す)処理を実装する
152
152
  #_param_:: 問い合わせに使用するパラメータ群。デフォルトはnil
153
153
  #返却値:: イベント発生可能ならばtrue
154
- def met?(params = nil)
154
+ def met?(*params)
155
155
  return false
156
156
  end
157
157
 
@@ -165,7 +165,7 @@ module Miyako
165
165
  #ここに、イベント発生イベントを実装する。更新はupdateメソッドに実装する
166
166
  #_param_:: イベント発生に必要なパラメータ群。デフォルトはnil
167
167
  #返却値:: 自分自身を返す
168
- def start(params = nil)
168
+ def start(*params)
169
169
  return self
170
170
  end
171
171
 
@@ -173,7 +173,7 @@ module Miyako
173
173
  #ここに、イベント停止・終了イベントを実装する。更新はupdateメソッドに実装する
174
174
  #_param_:: イベント発生に必要なパラメータ群。デフォルトはnil
175
175
  #返却値:: 自分自身を返す
176
- def stop(params = nil)
176
+ def stop(*params)
177
177
  return self
178
178
  end
179
179
 
@@ -2,7 +2,7 @@
2
2
  =begin
3
3
  --
4
4
  Miyako v2.0
5
- Copyright (C) 2007-2008 Cyross Makoto
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
6
 
7
7
  This library is free software; you can redistribute it and/or
8
8
  modify it under the terms of the GNU Lesser General Public
@@ -2,7 +2,7 @@
2
2
  =begin
3
3
  --
4
4
  Miyako v2.0
5
- Copyright (C) 2007-2008 Cyross Makoto
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
6
 
7
7
  This library is free software; you can redistribute it and/or
8
8
  modify it under the terms of the GNU Lesser General Public
@@ -29,6 +29,8 @@ module Miyako
29
29
  extend Forwardable
30
30
 
31
31
  @@movie_list = []
32
+
33
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
32
34
 
33
35
  #===動画のインスタンスを作成する
34
36
  #(但し、現在の所、loopパラメータは利用できない)
@@ -45,6 +47,7 @@ module Miyako
45
47
  @size = Size.new(@movie.info.width, @movie.info.height)
46
48
  set_layout_size(*(@size.to_a))
47
49
 
50
+ @visible = true
48
51
  @sprite = Sprite.new({:size=>@size , :type=>:movie})
49
52
  @sprite.snap(self)
50
53
 
@@ -60,6 +63,7 @@ module Miyako
60
63
  def update_layout_position #:nodoc:
61
64
  @x = @layout.pos[0]
62
65
  @y = @layout.pos[1]
66
+ @sprite.move_to(*@layout.pos)
63
67
  end
64
68
 
65
69
  #===動画再生時の音量を指定する
@@ -101,7 +105,7 @@ module Miyako
101
105
  #===動画を再生させる
102
106
  #動画の先頭から再生する。ブロックを渡したときは、ブロックを評価している間動画を再生する
103
107
  #_vol_:: 動画再生時の音量。0~100の整数
104
- def play(vol = nil)
108
+ def start(vol = nil)
105
109
  set_volume(vol) if vol
106
110
  @movie.play
107
111
  if block_given?
@@ -131,11 +135,10 @@ module Miyako
131
135
 
132
136
  #===画面に描画を指示する
133
137
  #現在表示できる選択肢を、現在の状態で描画するよう指示する
134
- #--
135
- #(但し、実際に描画されるのはScreen.renderメソッドが呼び出された時)
136
- #++
138
+ #visibleメソッドの値がfalseのときは描画されない。
137
139
  #返却値:: 自分自身を返す
138
140
  def render
141
+ return slef nless @visible
139
142
  @sprite.render
140
143
  return self
141
144
  end
@@ -2,7 +2,7 @@
2
2
  =begin
3
3
  --
4
4
  Miyako v2.0
5
- Copyright (C) 2007-2008 Cyross Makoto
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
6
 
7
7
  This library is free software; you can redistribute it and/or
8
8
  modify it under the terms of the GNU Lesser General Public
@@ -33,14 +33,17 @@ module Miyako
33
33
  include Layout
34
34
  extend Forwardable
35
35
 
36
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
37
+
36
38
  #===Partsクラスインスタンスを生成
37
39
  #_size_:: パーツ全体の大きさ。Size構造体のインスタンスもしくは要素数が2の配列
38
40
  def initialize(size)
39
- init_layout
40
- set_layout_size(size[0], size[1])
41
-
42
41
  @parts = {}
43
42
  @parts_list = []
43
+ @visible = true
44
+
45
+ init_layout
46
+ set_layout_size(size[0], size[1])
44
47
  end
45
48
 
46
49
  #===nameで示した補助パーツを返す
@@ -97,7 +100,7 @@ module Miyako
97
100
  return self
98
101
  end
99
102
 
100
- #===メインパーツと補助パーツのすべてのアニメーションを更新する(自動実行)
103
+ #===メインパーツと補助パーツのすべてのアニメーションを更新する
101
104
  #返却値:: 自分自身
102
105
  def update_animation
103
106
  self.each{|parts| parts.update_animation }
@@ -110,23 +113,32 @@ module Miyako
110
113
  return self
111
114
  end
112
115
 
113
- #===メインパーツと補助パーツのすべてのアニメーションを更新する(自動実行)
114
- #返却値:: 自分自身
115
- def update
116
- self.update_animation
116
+ def update #:nodoc:
117
+ self.each{|parts| parts.update }
117
118
  return self
118
119
  end
119
120
 
120
121
  #===スプライトに変換した画像を表示する
121
122
  #すべてのパーツを貼り付けた、1枚のスプライトを返す
123
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
122
124
  #返却値:: 描画したスプライト
123
125
  def to_sprite
124
126
  rect = self.broad_rect
125
127
  sprite = Sprite.new(:size=>rect.to_a[2,2], :type=>:ac)
128
+ Drawing.fill(sprite, [0,0,0])
129
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
126
130
  self.render_to(sprite){|sunit, dunit| sunit.x -= rect.x; sunit.y -= rect.y }
131
+ yield sprite if block_given?
127
132
  return sprite
128
133
  end
129
134
 
135
+ #===SpriteUnit構造体を生成する
136
+ #いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。
137
+ #返却値:: 生成したSpriteUnit構造体
138
+ def to_unit
139
+ return self.to_sprite.to_unit
140
+ end
141
+
130
142
  #===現在の画面の最大の大きさを矩形で取得する
131
143
  #各パーツの位置により、取得できる矩形の大きさが変わる
132
144
  #但し、パーツ未登録の時は、インスタンス生成時の大きさから矩形を生成する
@@ -150,5 +162,28 @@ module Miyako
150
162
  @parts.clear
151
163
  @parts = nil
152
164
  end
165
+
166
+ #===パーツを画面に描画する
167
+ #各パーツの描画範囲は、それぞれのSpriteUnitの(ox,oy)を起点にする。
168
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、各パーツを貼り付ける。
169
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
170
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
171
+ #ブロックの引数は、|パーツのSpriteUnit|となる。
172
+ #デフォルトでは、描画順は登録順となる。順番を変更したいときは、renderメソッドをオーバーライドする必要がある
173
+ #visibleメソッドの値がfalseのときは描画されない。
174
+ def render
175
+ end
176
+
177
+ #===パーツを画面に描画する
178
+ #各パーツの描画範囲は、それぞれのSpriteUnitの(ox,oy)を起点にする。
179
+ #転送先の描画範囲は、src側SpriteUnitの(x,y)を起点に、タイリングを行いながら貼り付ける。
180
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
181
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
182
+ #ブロックの引数は、|パーツのSpriteUnit|となる。
183
+ #デフォルトでは、描画順は登録順となる。順番を変更したいときは、render_toメソッドをオーバーライドする必要がある
184
+ #visibleメソッドの値がfalseのときは描画されない。
185
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
186
+ def render_to(dst)
187
+ end
153
188
  end
154
189
  end
@@ -2,7 +2,7 @@
2
2
  =begin
3
3
  --
4
4
  Miyako v2.0
5
- Copyright (C) 2007-2008 Cyross Makoto
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
6
 
7
7
  This library is free software; you can redistribute it and/or
8
8
  modify it under the terms of the GNU Lesser General Public
@@ -45,6 +45,7 @@ module Miyako
45
45
  end
46
46
  resize
47
47
  @pos = Point.new(0, 0)
48
+ @visible = true
48
49
  end
49
50
 
50
51
  #===プレーン画像左上の x 座標の値を取得する
@@ -115,17 +116,51 @@ module Miyako
115
116
  @size.w.times{|x|
116
117
  u = @sprite.to_unit
117
118
  u.move_to(x * @sprite.ow + @pos.x, y * @sprite.oh + @pos.y)
118
- Screen.render_screen(u) if u.x >= 0 && u.y >= 0 && u.x + u.ow <= Screen.screen.w && u.y + u.oh <= Screen.screen.h
119
+ Screen.render_screen(u) if u.x >= 0 && u.y >= 0 && u.x + u.ow <= Screen.bitmap.w && u.y + u.oh <= Screen.bitmap.h
119
120
  }
120
121
  }
121
122
  return self
122
123
  end
123
124
 
125
+ #===現在表示されているプレーンをSpriteクラスのインスタンスとして取得
126
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
127
+ #返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス
128
+ def to_sprite
129
+ sprite = Sprite.new(:size=>self.rect.to_a[2..3], :type=>:ac)
130
+ Drawing.fill(sprite, [0,0,0])
131
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
132
+ self.render_to(sprite)
133
+ yield sprite if block_given?
134
+ return sprite
135
+ end
136
+
137
+ #===SpriteUnit構造体を生成する
138
+ #いったんSpriteインスタンスを作成し、それをもとにSpriteUnit構造体を生成する。
139
+ #返却値:: 生成したSpriteUnit構造体
140
+ def to_unit
141
+ return self.to_sprite.to_unit
142
+ end
143
+
124
144
  def Plane::resize #:nodoc:
125
145
  @@planes.each{|p| p.resize }
126
146
  return nil
127
147
  end
128
148
 
149
+ #===プレーンを画面に描画する
150
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点にする。
151
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、タイリングを行いながら貼り付ける。
152
+ #visibleメソッドの値がfalseのときは描画されない。
153
+ def render
154
+ end
155
+
156
+ #===プレーンを画像に描画する
157
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点にする。
158
+ #転送先の描画範囲は、src側SpriteUnitの(x,y)を起点に、タイリングを行いながら貼り付ける。
159
+ #visibleメソッドの値がfalseのときは描画されない。
160
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
161
+ def render_to(dst)
162
+ end
163
+
129
164
  def_delegators(:sprite)
130
165
  end
131
166
  end
@@ -2,7 +2,7 @@
2
2
  =begin
3
3
  --
4
4
  Miyako v2.0
5
- Copyright (C) 2007-2008 Cyross Makoto
5
+ Copyright (C) 2007-2009 Cyross Makoto
6
6
 
7
7
  This library is free software; you can redistribute it and/or
8
8
  modify it under the terms of the GNU Lesser General Public
@@ -46,9 +46,17 @@ module Miyako
46
46
  FULLSCREEN_MODE = 1
47
47
 
48
48
  #ウインドウモード・フルスクリーンモードを切り替える際のフラグを示す配列
49
- ScreenFlag = Array.new
50
- ScreenFlag.push(SDL::HWSURFACE | SDL::DOUBLEBUF | SDL::ANYFORMAT)
51
- ScreenFlag.push(SDL::ANYFORMAT | SDL::FULLSCREEN)
49
+ ScreenFlag = $miyako_use_opengl ? [SDL::OPENGL, SDL::OPENGL | SDL::FULLSCREEN] : [SDL::HWSURFACE | SDL::DOUBLEBUF | SDL::ANYFORMAT, SDL::ANYFORMAT | SDL::FULLSCREEN]
50
+
51
+ if $miyako_use_opengl
52
+ SDL::GL.set_attr(SDL::GL::RED_SIZE, 8)
53
+ SDL::GL.set_attr(SDL::GL::GREEN_SIZE, 8)
54
+ SDL::GL.set_attr(SDL::GL::BLUE_SIZE, 8)
55
+ SDL::GL.set_attr(SDL::GL::ALPHA_SIZE, 8)
56
+ SDL::GL.set_attr(SDL::GL::DEPTH_SIZE, 32)
57
+ SDL::GL.set_attr(SDL::GL::STENCIL_SIZE, 32)
58
+ SDL::GL.set_attr(SDL::GL::DOUBLEBUFFER, 1)
59
+ end
52
60
 
53
61
  def Screen::get_fps_count
54
62
  return @@fps == 0 ? 0 : FpsMax / @@fps
@@ -71,6 +79,9 @@ module Miyako
71
79
  @@screen = nil
72
80
  @@viewport = nil
73
81
 
82
+ @@pre_render_array = []
83
+ @@auto_render_array = []
84
+
74
85
  #===画面の状態(ウインドウモードとフルスクリーンモード)を設定する
75
86
  #_v_:: ウィンドウモードのときは、Screen::WINDOW_MODE、 フルスクリーンモードのときはScreen::FULLSCREEN_MODE
76
87
  def Screen::set_mode(v)
@@ -80,6 +91,27 @@ module Miyako
80
91
  end
81
92
  end
82
93
 
94
+ #=== 事前描画インスタンス配列を取得する
95
+ #Screenモジュールに属している事前レンダー(プリレンダー)配列にアクセス可能
96
+ #この配列に取り込んだインスタンスは、配列インデックスの順に描画される
97
+ #また、配列の要素は、必ずrenderメソッドを実装していなければならない(renderメソッドで描画するため)
98
+ #但し、配列の要素が配列のときは、再帰的に描画が可能
99
+ #描画は、Screen.pre_renderメソッドの明示的呼び出しで実行される
100
+ #返却値:: 自動描画配列
101
+ def Screen::pre_render_array
102
+ @@pre_render_array
103
+ end
104
+
105
+ #=== 自動描画インスタンス配列を取得する
106
+ #Screenモジュールに属しているオートレンダー(自動描画)配列にアクセス可能
107
+ #この配列に取り込んだインスタンスは、配列インデックスの順に描画される
108
+ #また、配列の要素は、必ずrenderメソッドを実装していなければならない(renderメソッドで描画するため)
109
+ #但し、配列の要素が配列のときは、再帰的に描画が可能
110
+ #返却値:: 自動描画配列
111
+ def Screen::auto_render_array
112
+ @@auto_render_array
113
+ end
114
+
83
115
  #===ウインドウモードとフルスクリーンモードを切り替える
84
116
  def Screen::toggle_mode
85
117
  @@mode = (@@mode + 1) % WINMODES
@@ -105,7 +137,7 @@ module Miyako
105
137
 
106
138
  #===画面を管理するインスタンスを取得する
107
139
  #返却値:: 画面インスタンス(SDL::Screenクラスのインスタンス)
108
- def Screen::screen
140
+ def Screen::bitmap
109
141
  return @@screen
110
142
  end
111
143
 
@@ -122,9 +154,10 @@ module Miyako
122
154
  end
123
155
 
124
156
  #===画面を管理するSpriteUnitを取得する
157
+ #得られるインスタンスは複写していないので、インスタンスの値を調整するには、dupメソッドで複製する必要がある
125
158
  #返却値:: SpriteUnitインスタンス
126
159
  def Screen::to_unit
127
- return @@unit.dup
160
+ return @@unit
128
161
  end
129
162
 
130
163
  #===画像の回転・拡大・縮小の中心座標を取得する
@@ -181,11 +214,26 @@ module Miyako
181
214
  return @@size.dup
182
215
  end
183
216
 
184
- def Screen::set_screen(f) #:nodoc:
185
- return false unless SDL.checkVideoMode(*(@@size.to_a << BPP << f))
186
- @@screen = SDL.setVideoMode(*(@@size.to_a << BPP << f))
217
+ #===Segment構造体を生成する
218
+ # 生成される線分は、x方向が[0,w-1]、y方向が[0,h-1]となる
219
+ #返却値:: 生成したSegment構造体インスタンス
220
+ def Screen::segment
221
+ return Segment.new([0, @@size[0]-1], [0, @@size[1]-1])
222
+ end
223
+
224
+ #===画面のサーフェスを生成する
225
+ #グローバル変数$miyako_open_screen==falseの時に有効
226
+ #画面サーフェスを生成し、表示させる
227
+ #require 'Miyako/miyako'を記述する前に、"$miyako_open_screen=false"と記述すると
228
+ def Screen::open
229
+ @@screen = SDL::Screen.open(*(@@size.to_a << BPP << ScreenFlag[@@mode]))
187
230
  SpriteUnitFactory.apply(@@unit, {:bitmap=>@@screen, :ow=>@@screen.w, :oh=>@@screen.h})
188
231
  @@viewport = Viewport.new(0, 0, @@screen.w, @@screen.h)
232
+ end
233
+
234
+ def Screen::set_screen #:nodoc:
235
+ return false unless SDL.checkVideoMode(*(@@size.to_a << BPP << ScreenFlag[@@mode]))
236
+ self.open
189
237
  return true
190
238
  end
191
239
 
@@ -195,16 +243,15 @@ module Miyako
195
243
  #_h_:: 画面の高さ
196
244
  #返却値:: 変更に成功したときは trueを返す
197
245
  def Screen::set_size(w, h)
246
+ return unless @@screen
198
247
  return false unless SDL.checkVideoMode(w, h, BPP, ScreenFlag[@@mode])
199
248
  @@size = Size.new(w, h)
200
- @@screen = SDL.setVideoMode(*(@@size.to_a << BPP << ScreenFlag[@@mode]))
201
- SpriteUnitFactory.apply(@@unit, {:bitmap=>@@screen, :ow=>@@screen.w, :oh=>@@screen.h})
202
- @@viewport = Viewport.new(0, 0, @@screen.w, @@screen.h)
249
+ self.open
203
250
  return true
204
251
  end
205
252
 
206
253
  def Screen::check_mode_error #:nodoc:
207
- unless Screen::set_screen(ScreenFlag[@@mode])
254
+ unless Screen::set_screen
208
255
  print "Sorry, this system not supported display...\n";
209
256
  exit(1)
210
257
  end
@@ -227,31 +274,52 @@ module Miyako
227
274
 
228
275
  #===現在表示されている画面を複製し、Spriteクラスのインスタンスとして取得
229
276
  #Screen.captureとの違いは、パラメータ・サイズは不変(画面の大きさで複製)で取り扱う。
230
- #
231
- #_param_:: Spriteインスタンスを生成するときに渡すパラメータ(但し、:sizeと:typeのみ使用する)
232
- #_rect_:: 取り込む画像の矩形(4要素の配列もしくはRect構造体のインスタンス)
233
- #デフォルトは画面の大きさ
277
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
234
278
  #返却値:: 取り込んだ画像を含むSpriteクラスのインスタンス
235
279
  def Screen::to_sprite
236
- param[:size] = Size.new(*(rect[2..3]))
237
- dst = Sprite.new(param)
238
- Bitmap.screen_to_ac!(Screen, dst)
280
+ dst = Sprite.new(:size => Size.new(*(rect[2..3])), :type => :ac)
281
+ Bitmap.screen_to_ac(Screen, dst)
282
+ yield dst if block_given?
239
283
  return dst
240
284
  end
241
285
 
242
286
  #===画像を消去する
243
287
  #画像を黒色([0,0,0,0])で塗りつぶす
244
288
  def Screen::clear
289
+ return unless @@screen
245
290
  @@screen.fillRect(0, 0, @@screen.w, @@screen.h, [0, 0, 0, 0])
246
291
  end
247
292
 
293
+ #===プリレンダー配列に登録されたインスタンスを画面に描画する
294
+ #Screen.pre_render_arrayに登録したインスタンスを描画する
295
+ def Screen::pre_render
296
+ end
297
+
248
298
  #===画面を更新する
249
299
  #描画した画面を、実際にミニ見える形に反映させる
250
- #呼び出し時に画面の消去は行われないため、明示的にScreen.clearメソッドを呼び出す必要がある
300
+ #呼び出し時に画面の消去は行われないため、消去が必要なときは明示的にScreen.clearメソッドを呼び出す必要がある
301
+ #また、自動描画配列にインスタンスを入れているときは、このメソッドを呼び出した時に描画されるため
302
+ #(つまり、表示の最後に描画される)、描画の順番に注意して配列を利用すること
251
303
  def Screen::render
252
- Shape.text({:text => (FpsMax/(@@interval == 0 ? 1 : @@interval)).to_s() + " fps", :font => Font.sans_serif}).render if @@fpsView
304
+ Shape.text(
305
+ {
306
+ :text => (FpsMax/(@@interval == 0 ? 1 : @@interval)).to_s() + " fps",
307
+ :font => Font.sans_serif
308
+ }
309
+ ).render if @@fpsView
253
310
  Screen::update_tick
254
311
  @@screen.flip
255
312
  end
313
+
314
+ #===インスタンスの内容を画面に描画する
315
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
316
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
317
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
318
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
319
+ #ブロックの引数は、|インスタンスのSpriteUnit,画面のSpriteUnit|となる。
320
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
321
+ #返却値:: 自分自身を返す
322
+ def Screen::render_screen(src)
323
+ end
256
324
  end
257
325
  end