cyross-ruby-miyako 2.0.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 (125) hide show
  1. data/README +977 -0
  2. data/Rakefile +7 -0
  3. data/img/cursor.png +0 -0
  4. data/img/cursors.png +0 -0
  5. data/img/dice.png +0 -0
  6. data/img/wait_cursor.png +0 -0
  7. data/img/win_base.png +0 -0
  8. data/img/window.png +0 -0
  9. data/install_miyako.rb +75 -0
  10. data/lib/Miyako/API/audio.rb +198 -0
  11. data/lib/Miyako/API/basic_data.rb +431 -0
  12. data/lib/Miyako/API/bitmap.rb +35 -0
  13. data/lib/Miyako/API/choices.rb +308 -0
  14. data/lib/Miyako/API/collision.rb +444 -0
  15. data/lib/Miyako/API/diagram.rb +573 -0
  16. data/lib/Miyako/API/drawing.rb +110 -0
  17. data/lib/Miyako/API/fixedmap.rb +315 -0
  18. data/lib/Miyako/API/font.rb +384 -0
  19. data/lib/Miyako/API/input.rb +440 -0
  20. data/lib/Miyako/API/layout.rb +451 -0
  21. data/lib/Miyako/API/map.rb +403 -0
  22. data/lib/Miyako/API/map_event.rb +198 -0
  23. data/lib/Miyako/API/modules.rb +109 -0
  24. data/lib/Miyako/API/movie.rb +151 -0
  25. data/lib/Miyako/API/parts.rb +154 -0
  26. data/lib/Miyako/API/plane.rb +131 -0
  27. data/lib/Miyako/API/screen.rb +257 -0
  28. data/lib/Miyako/API/shape.rb +362 -0
  29. data/lib/Miyako/API/sprite.rb +338 -0
  30. data/lib/Miyako/API/sprite_animation.rb +461 -0
  31. data/lib/Miyako/API/spriteunit.rb +113 -0
  32. data/lib/Miyako/API/story.rb +224 -0
  33. data/lib/Miyako/API/textbox.rb +496 -0
  34. data/lib/Miyako/API/viewport.rb +435 -0
  35. data/lib/Miyako/API/yuki.rb +779 -0
  36. data/lib/Miyako/EXT/miyako_cairo.rb +60 -0
  37. data/lib/Miyako/EXT/raster_scroll.rb +138 -0
  38. data/lib/Miyako/EXT/slides.rb +136 -0
  39. data/lib/Miyako/miyako.rb +172 -0
  40. data/miyako.png +0 -0
  41. data/miyako_banner.png +0 -0
  42. data/miyako_no_katana/extconf.rb +34 -0
  43. data/miyako_no_katana/miyako_no_katana.c +3301 -0
  44. data/sample/Animation1/m1ku.rb +89 -0
  45. data/sample/Animation1/m1ku_arm_0.png +0 -0
  46. data/sample/Animation1/m1ku_arm_1.png +0 -0
  47. data/sample/Animation1/m1ku_arm_2.png +0 -0
  48. data/sample/Animation1/m1ku_arm_3.png +0 -0
  49. data/sample/Animation1/m1ku_back.jpg +0 -0
  50. data/sample/Animation1/m1ku_body.png +0 -0
  51. data/sample/Animation1/m1ku_eye_0.png +0 -0
  52. data/sample/Animation1/m1ku_eye_1.png +0 -0
  53. data/sample/Animation1/m1ku_eye_2.png +0 -0
  54. data/sample/Animation1/m1ku_eye_3.png +0 -0
  55. data/sample/Animation1/m1ku_hair_front.png +0 -0
  56. data/sample/Animation1/m1ku_hair_rear.png +0 -0
  57. data/sample/Animation1/readme.txt +72 -0
  58. data/sample/Animation2/lex.rb +95 -0
  59. data/sample/Animation2/lex_back.png +0 -0
  60. data/sample/Animation2/lex_body.png +0 -0
  61. data/sample/Animation2/lex_roadroller.png +0 -0
  62. data/sample/Animation2/lex_wheel_0.png +0 -0
  63. data/sample/Animation2/lex_wheel_1.png +0 -0
  64. data/sample/Animation2/lex_wheel_2.png +0 -0
  65. data/sample/Animation2/readme.txt +72 -0
  66. data/sample/Animation2/song_title.png +0 -0
  67. data/sample/Diagram_sample/back.png +0 -0
  68. data/sample/Diagram_sample/chr01.png +0 -0
  69. data/sample/Diagram_sample/chr02.png +0 -0
  70. data/sample/Diagram_sample/cursor.png +0 -0
  71. data/sample/Diagram_sample/diagram_sample_yuki2.rb +283 -0
  72. data/sample/Diagram_sample/readme.txt +87 -0
  73. data/sample/Diagram_sample/wait_cursor.png +0 -0
  74. data/sample/Room3/blue.rb +250 -0
  75. data/sample/Room3/ending.rb +175 -0
  76. data/sample/Room3/green.rb +185 -0
  77. data/sample/Room3/image/akamatsu.png +0 -0
  78. data/sample/Room3/image/aoyama.png +0 -0
  79. data/sample/Room3/image/congra.png +0 -0
  80. data/sample/Room3/image/congratulation.png +0 -0
  81. data/sample/Room3/image/congratulation_bg.png +0 -0
  82. data/sample/Room3/image/cursor.png +0 -0
  83. data/sample/Room3/image/midori.png +0 -0
  84. data/sample/Room3/image/mittsu_no_oheya.png +0 -0
  85. data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
  86. data/sample/Room3/image/room_blue.png +0 -0
  87. data/sample/Room3/image/room_green.png +0 -0
  88. data/sample/Room3/image/room_red.png +0 -0
  89. data/sample/Room3/image/start.png +0 -0
  90. data/sample/Room3/image/three_doors.png +0 -0
  91. data/sample/Room3/image/wait_cursor.png +0 -0
  92. data/sample/Room3/main.rb +102 -0
  93. data/sample/Room3/main_component.rb +58 -0
  94. data/sample/Room3/readme.txt +76 -0
  95. data/sample/Room3/red.rb +200 -0
  96. data/sample/Room3/room3.rb +26 -0
  97. data/sample/Room3/title.rb +171 -0
  98. data/sample/fixed_map_test/cursor.png +0 -0
  99. data/sample/fixed_map_test/fixed_map_sample.rb +149 -0
  100. data/sample/fixed_map_test/map.csv +19 -0
  101. data/sample/fixed_map_test/map_01.png +0 -0
  102. data/sample/fixed_map_test/map_sample.rb +121 -0
  103. data/sample/fixed_map_test/mapchip.csv +23 -0
  104. data/sample/fixed_map_test/monster.png +0 -0
  105. data/sample/fixed_map_test/readme.txt +72 -0
  106. data/sample/map_test/chara.rb +50 -0
  107. data/sample/map_test/chr1.png +0 -0
  108. data/sample/map_test/cursor.png +0 -0
  109. data/sample/map_test/main_parts.rb +48 -0
  110. data/sample/map_test/main_scene.rb +137 -0
  111. data/sample/map_test/map.png +0 -0
  112. data/sample/map_test/map2.png +0 -0
  113. data/sample/map_test/map_layer.csv +127 -0
  114. data/sample/map_test/map_manager.rb +92 -0
  115. data/sample/map_test/map_test.rb +23 -0
  116. data/sample/map_test/mapchip.csv +21 -0
  117. data/sample/map_test/oasis.rb +65 -0
  118. data/sample/map_test/readme.txt +87 -0
  119. data/sample/map_test/route.rb +144 -0
  120. data/sample/map_test/sea.png +0 -0
  121. data/sample/map_test/town.rb +68 -0
  122. data/sample/map_test/wait_cursor.png +0 -0
  123. data/sample/map_test/window.png +0 -0
  124. data/win/miyako_no_katana.so +0 -0
  125. metadata +194 -0
@@ -0,0 +1,451 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.0
5
+ Copyright (C) 2007-2008 Cyross Makoto
6
+
7
+ This library is free software; you can redistribute it and/or
8
+ modify it under the terms of the GNU Lesser General Public
9
+ License as published by the Free Software Foundation; either
10
+ version 2.1 of the License, or (at your option) any later version.
11
+
12
+ This library is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ Lesser General Public License for more details.
16
+
17
+ You should have received a copy of the GNU Lesser General Public
18
+ License along with this library; if not, write to the Free Software
19
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
+ ++
21
+ =end
22
+
23
+ class Numeric
24
+ #===自身の値を割合として、値を算出する
25
+ #_base_:: 算出元の値
26
+ #返却値:: baseのself割りの値を返す
27
+ #
28
+ #(例)self=0.5、base=1000のとき、1000*0.5=500が出力される
29
+ def ratio(base)
30
+ return self * base
31
+ end
32
+
33
+ #===自身の値をパーセンテージとして、値を算出する
34
+ #_base_:: 算出元の値
35
+ #返却値:: baseのself%の値を返す
36
+ #
37
+ #(例)self=10、base=100のとき、100*10/100(%)=10が出力される
38
+ def percent(base)
39
+ return self * base / 100
40
+ end
41
+
42
+ #ピクセル値をそのまま返す
43
+ #返却値:: 自分自身を返す
44
+ def px
45
+ return self
46
+ end
47
+ end
48
+
49
+ module Miyako
50
+
51
+ #==レイアウト情報を示す構造体
52
+ LayoutStruct = Struct.new(:pos, :size, :base, :off, :snap, :zero, :margin, :lower, :middle, :upper, :loc)
53
+ #==スナップ構造体
54
+ LayoutSnapStruct = Struct.new(:sprite, :children)
55
+ #==レイアウト表示位置ラムダ構造体
56
+ LayoutSideStruct = Struct.new(:inside, :between, :outside)
57
+
58
+ #==レイアウト管理モジュール
59
+ #位置情報やスナップ、座標丸めなどを管理する
60
+ #なお、本モジュールをmixinした場合は、インスタンス変数 @layout が予約される。
61
+ #@kayoutへの参照のみ許される。
62
+ module Layout
63
+ #===現在の位置情報を別のインスタンス変数に反映させるためのテンプレートメソッド
64
+ #move や centering などのメソッドを呼び出した際に@layout[:pos]の値を反映させるときに使う
65
+ #(例)@sprite.move(*@layout[:pos])
66
+ def update_layout_position
67
+ end
68
+
69
+ #===レイアウト管理の初期化
70
+ #mixin したクラスの initialize メソッド内で必ず呼び出しておくこと
71
+ def init_layout
72
+ @layout = LayoutStruct.new
73
+ @layout.pos = Point.new(0, 0)
74
+ @layout.size = Size.new(0, 0)
75
+ @layout.base = Rect.new(0, 0, nil, nil)
76
+ @layout.off = Point.new(0, 0)
77
+ @layout.snap = LayoutSnapStruct.new(nil, Array.new)
78
+ @layout.zero = lambda{|data| 0 }
79
+ @layout.margin = [@layout.zero, @layout.zero]
80
+
81
+ @layout.lower = LayoutSideStruct.new
82
+ @layout.lower.inside = lambda{|pos, base_size| @layout.base[pos] + @layout.margin[pos][base_size].to_i}
83
+ @layout.lower.between = lambda{|pos, base_size| @layout.base[pos] - @layout.size[pos]/2 + @layout.margin[pos][base_size].to_i}
84
+ @layout.lower.outside = lambda{|pos, base_size| @layout.base[pos] - @layout.size[pos] + @layout.margin[pos][base_size].to_i}
85
+ @layout.middle = LayoutSideStruct.new
86
+ @layout.middle.inside = lambda{|pos, base_size| @layout.base[pos] + base_size/2 - @layout.size[pos] + @layout.margin[pos][base_size].to_i}
87
+ @layout.middle.between= lambda{|pos, base_size| @layout.base[pos] + base_size/2 - @layout.size[pos]/2 + @layout.margin[pos][base_size].to_i}
88
+ @layout.middle.outside = lambda{|pos, base_size| @layout.base[pos] + base_size/2 + @layout.margin[pos][base_size].to_i}
89
+ @layout.upper = LayoutSideStruct.new
90
+ @layout.upper.inside = lambda{|pos, base_size| @layout.base[pos] + base_size - @layout.size[pos] - @layout.margin[pos][base_size].to_i}
91
+ @layout.upper.between = lambda{|pos, base_size| @layout.base[pos] + base_size - @layout.size[pos]/2 - @layout.margin[pos][base_size].to_i}
92
+ @layout.upper.outside = lambda{|pos, base_size| @layout.base[pos] + base_size + @layout.margin[pos][base_size].to_i}
93
+
94
+ @layout.loc = [@layout.lower.inside, @layout.lower.inside]
95
+ end
96
+
97
+ #===mixinしたインスタンスの位置を左端(x軸)に移動させる
98
+ #ブロックでは、数値を返却することで、左端からのマージンを設定できる
99
+ #ブロック引数は、自分自身の幅
100
+ #_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
101
+ #返却値:: 自分自身
102
+ def left(side=:inside, &margin)
103
+ set_layout_inner(0, @layout.lower[side], margin)
104
+ return self
105
+ end
106
+
107
+ #===mixinしたインスタンスの位置を中間(x軸)に移動させる
108
+ #ブロックでは、数値を返却することで、真ん中からのマージンを設定できる
109
+ #ブロック引数は、自分自身の幅
110
+ #_side_:: 設置する側。但し機能するのは :between のみ。デフォルトは :between
111
+ #返却値:: 自分自身
112
+ def center(side=:between, &margin)
113
+ set_layout_inner(0, @layout.middle[side], margin)
114
+ return self
115
+ end
116
+
117
+ #===mixinしたインスタンスの位置を右端(x軸)に移動させる
118
+ #ブロックでは、数値を返却することで、右端からのマージンを設定できる
119
+ #ブロック引数は、自分自身の幅
120
+ #_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
121
+ #返却値:: 自分自身
122
+ def right(side=:inside, &margin)
123
+ set_layout_inner(0, @layout.upper[side], margin)
124
+ return self
125
+ end
126
+
127
+ #===mixinしたインスタンスの位置を上端(y軸)に移動させる
128
+ #ブロックでは、数値を返却することで、上端からのマージンを設定できる
129
+ #ブロック引数は、自分自身の幅
130
+ #_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
131
+ #返却値:: 自分自身
132
+ def top(side=:inside, &margin)
133
+ set_layout_inner(1, @layout.lower[side], margin)
134
+ return self
135
+ end
136
+
137
+ #===mixinしたインスタンスの位置を中間(y軸)に移動させる
138
+ #ブロックでは、数値を返却することで、真ん中からのマージンを設定できる
139
+ #ブロック引数は、自分自身の幅
140
+ #_side_:: 設置する側。但し機能するのは :between のみ。デフォルトは :between
141
+ #返却値:: 自分自身
142
+ def middle(side=:between, &margin)
143
+ set_layout_inner(1, @layout.middle[side], margin)
144
+ return self
145
+ end
146
+
147
+ #===mixinしたインスタンスの位置を下端(y軸)に移動させる
148
+ #ブロックでは、数値を返却することで、下端からのマージンを設定できる
149
+ #ブロック引数は、自分自身の幅
150
+ #_side_:: 設置する側。:inside、:between、:outside の3種類ある。デフォルトは :inside
151
+ #返却値:: 自分自身
152
+ def bottom(side=:inside, &margin)
153
+ set_layout_inner(1, @layout.upper[side], margin)
154
+ return self
155
+ end
156
+
157
+ def set_layout_inner(pos, lambda, margin) #:nodoc:
158
+ @layout.loc[pos] = lambda
159
+ @layout.margin[pos] = margin || @layout.zero
160
+ @layout.off.x = 0 if pos == 0
161
+ @layout.off.y = 0 if pos == 1
162
+ calc_layout
163
+ end
164
+
165
+ private :set_layout_inner
166
+
167
+ #===レイアウトに関するインスタンスを解放する
168
+ #インスタンス変数 @layout 内のインスタンスを解放する
169
+ def layout_dispose
170
+ @layout.snap.sprite.delete_snap_child(self) if @layout.snap.sprite
171
+ @layout.snap.children.each{|sc| sc.reset_snap }
172
+ end
173
+
174
+ #=== mixin されたインスタンスの x 座標の値を取得する
175
+ #返却値:: x 座標の値(@layout[:pos][0]の値)
176
+ def x
177
+ return @layout.pos[0]
178
+ end
179
+
180
+ #=== mixin されたインスタンスの y 座標の値を取得する
181
+ #返却値:: y 座標の値(@layout[:pos][1]の値)
182
+ def y
183
+ return @layout.pos[1]
184
+ end
185
+
186
+ #=== mixin されたインスタンスの幅を取得する
187
+ #返却値:: インスタンスの幅(@layout[:size][0]の値)
188
+ def w
189
+ return @layout.size[0]
190
+ end
191
+
192
+ #=== mixin されたインスタンスの高さを取得する
193
+ #返却値:: インスタンスの高さ(@layout[:size][1]の値)
194
+ def h
195
+ return @layout.size[1]
196
+ end
197
+
198
+ #=== mixin されたインスタンスの位置情報(x,yの値)を取得する
199
+ #返却値:: インスタンスの位置情報(@layout[:pos]の値)
200
+ def pos
201
+ return @layout.pos
202
+ end
203
+
204
+ #=== mixin されたインスタンスのサイズ情報(w,hの値)を取得する
205
+ #返却値:: インスタンスのサイズ情報(@layout[:size]の値)
206
+ def size
207
+ return @layout.size
208
+ end
209
+
210
+ #=== mixin されたインスタンスの表示上の幅を取得する
211
+ #返却値:: インスタンスの幅(@layout[:size][0]の値)
212
+ def ow
213
+ return @layout.size[0]
214
+ end
215
+
216
+ #=== mixin されたインスタンスの表示上の高さを取得する
217
+ #返却値:: インスタンスの高さ(@layout[:size][0]の値)
218
+ def oh
219
+ return @layout.size[1]
220
+ end
221
+
222
+ #===インスタンスのサイズをレイアウト情報に反映させる
223
+ #_w_:: インスタンスの幅(たとえば、Sprite#ow の値)
224
+ #_h_:: インスタンスの幅(たとえば、Sprite#oh の値)
225
+ #返却値:: 自分自身を返す
226
+ def set_layout_size(w, h)
227
+ @layout.size[0] = w
228
+ @layout.size[1] = h
229
+ calc_layout
230
+ return self
231
+ end
232
+
233
+ def get_base_width #:nodoc:
234
+ return @layout.base[2] || Screen.w
235
+ end
236
+
237
+ def get_base_height #:nodoc:
238
+ return @layout.base[3] || Screen.h
239
+ end
240
+
241
+ private :get_base_width, :get_base_height
242
+
243
+ #===レイアウト情報の値を更新する
244
+ def calc_layout
245
+ @layout.pos[0] = @layout.loc[0][0, get_base_width] + @layout.off[0]
246
+ @layout.pos[1] = @layout.loc[1][1, get_base_height] + @layout.off[1]
247
+ update_layout_position
248
+ @layout.snap.children.each{|sc|
249
+ sc.snap
250
+ }
251
+ end
252
+
253
+ #===あとで書く
254
+ #_w_:: あとで書く
255
+ #_h_:: あとで書く
256
+ #返却値:: あとで書く
257
+ def set_base_size(w, h)
258
+ @layout.base[2] = w
259
+ @layout.base[3] = h
260
+ calc_layout
261
+ return self
262
+ end
263
+
264
+ #===あとで書く
265
+ #返却値:: あとで書く
266
+ def reset_base_size
267
+ @layout.base[2] = nil
268
+ @layout.base[3] = nil
269
+ calc_layout
270
+ return self
271
+ end
272
+
273
+ #===あとで書く
274
+ #_x_:: あとで書く
275
+ #_y_:: あとで書く
276
+ #返却値:: あとで書く
277
+ def set_base_point(x, y)
278
+ @layout.base[0], @layout.base[1] = [x, y]
279
+ calc_layout
280
+ return self
281
+ end
282
+
283
+ #===あとで書く
284
+ #_x_:: あとで書く
285
+ #_y_:: あとで書く
286
+ #_w_:: あとで書く
287
+ #_h_:: あとで書く
288
+ #返却値:: あとで書く
289
+ def set_base(x, y, w, h)
290
+ @layout.base[0] = x
291
+ @layout.base[1] = y
292
+ @layout.base[2] = w
293
+ @layout.base[3] = h
294
+ calc_layout
295
+ return self
296
+ end
297
+
298
+ #===あとで書く
299
+ #返却値:: あとで書く
300
+ def reset_base
301
+ @layout.base[0] = 0
302
+ @layout.base[1] = 0
303
+ @layout.base[2] = nil
304
+ @layout.base[3] = nil
305
+ calc_layout
306
+ return self
307
+ end
308
+
309
+ #===あとで書く
310
+ #返却値:: あとで書く
311
+ def get_base
312
+ return @layout.base
313
+ end
314
+
315
+ #===あとで書く
316
+ #返却値:: あとで書く
317
+ def rect
318
+ return Rect.new(*(@layout.pos.to_a + @layout.size.to_a))
319
+ end
320
+
321
+ #===インスタンスのレイアウトを指定の別のインスタンスに依存(スナップ)させる
322
+ #引数 spr で指定したインスタンスのレイアウト情報は、レシーバのレイアウト情報に依存した位置情報を算出される
323
+ #デフォルトでは、画面にスナップされている状態になっている
324
+ #_spr_:: 位置情報を依存させるインスタンス。デフォルトは nil (画面が対象になる)
325
+ #返却値:: 自分自身を返す
326
+ def snap(spr = nil)
327
+ if spr
328
+ @layout.snap.sprite.delete_snap_child(self) if @layout.snap.sprite
329
+ @layout.snap.sprite = spr
330
+ spr.add_snap_child(self)
331
+ end
332
+ if @layout.snap.sprite
333
+ rect = @layout.snap.sprite.rect
334
+ @layout.base[0] = rect[0]
335
+ @layout.base[1] = rect[1]
336
+ @layout.base[2] = rect[2]
337
+ @layout.base[3] = rect[3]
338
+ end
339
+ calc_layout
340
+ return self
341
+ end
342
+
343
+ #===すべてのインスタンスとの依存関係を解消する
344
+ #返却値:: 自分自身を返す
345
+ def reset_snap
346
+ @layout.snap.sprite =nil
347
+ @layout.snap.children = Array.new
348
+ calc_layout
349
+ return self
350
+ end
351
+
352
+ def add_snap_child(spr) #:nodoc:
353
+ @layout.snap.children.push(spr) unless @layout.snap.children.include?(spr)
354
+ calc_layout
355
+ return self
356
+ end
357
+
358
+ def delete_snap_child(spr) #:nodoc:
359
+ spr.each{|s| @layout.snap.children.delete(s) }
360
+ calc_layout
361
+ return self
362
+ end
363
+
364
+ def get_snap_children #:nodoc:
365
+ return @layout.snap.children
366
+ end
367
+
368
+ def set_snap_children(cs) #:nodoc:
369
+ @layout.snap.children.each{|c| c.set_snap_sprite(nil) }
370
+ @layout.snap.children = cs
371
+ @layout.snap.children.each{|c|
372
+ c.set_snap_sprite(self)
373
+ }
374
+ calc_layout
375
+ return self
376
+ end
377
+
378
+ def get_snap_sprite #:nodoc:
379
+ return @layout.snap.sprite
380
+ end
381
+
382
+ def set_snap_sprite(ss) #:nodoc:
383
+ @layout.snap.sprite.delete_snap_child(self) if @layout.snap.sprite
384
+ @layout.snap.sprite = ss
385
+ @layout.snap.sprite.add_snap_child(self) if @layout.snap.sprite
386
+ calc_layout
387
+ return self
388
+ end
389
+
390
+ #===インスタンスを画面(スナップ先インスタンス)の中心に移動する
391
+ #返却値:: 自分自身を返す
392
+ def centering
393
+ center
394
+ middle
395
+ return self
396
+ end
397
+
398
+ #===インスタンスを指定の移動量で移動させる
399
+ #_x_:: x 座標の移動量
400
+ #_y_:: y 座標の移動量
401
+ #返却値:: 自分自身を返す
402
+ def move(x, y)
403
+ @layout.off[0] = @layout.off[0] + x
404
+ @layout.off[1] = @layout.off[1] + y
405
+ calc_layout
406
+ return self
407
+ end
408
+
409
+ #===インスタンスを指定の位置に移動させる
410
+ #_x_:: 移動後の x 座標の位置
411
+ #_y_:: 移動後の y 座標の位置
412
+ #返却値:: 自分自身を返す
413
+ def move_to(x, y)
414
+ move(x - @layout.pos[0], y - @layout.pos[1])
415
+ return self
416
+ end
417
+ end
418
+
419
+ #==レイアウト空間クラス
420
+ #画像を持たず、レイアウト空間のみを持つインスタンス
421
+ #画像同士が離れているレイアウト構成を構築する際に用いる
422
+ class LayoutSpace
423
+ include SpriteBase
424
+ include Animation
425
+ include Layout
426
+ include SingleEnumerable
427
+ extend Forwardable
428
+
429
+ attr_accessor :dp, :visible
430
+
431
+ #===インスタンスを生成する
432
+ #_size_:: インスタンスの大きさ[w,h]で指定する
433
+ #返却値:: 生成されたインスタンスを返す
434
+ def initialize(size)
435
+ init_layout
436
+ set_layout_size(*(size.to_a))
437
+ end
438
+
439
+ #===現在の画面の最大の大きさを矩形で取得する
440
+ #但し、LayoutSpaceの場合は最大の大きさ=スプライトの大きさなので、rectと同じ値が得られる
441
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
442
+ def broad_rect
443
+ return self.rect
444
+ end
445
+
446
+ #===インスタンスを解放させる
447
+ def dispose
448
+ layout_dispose
449
+ end
450
+ end
451
+ end