ruby-miyako 2.1.10 → 2.1.11

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,8 +1,8 @@
1
1
  *******************************************************************************
2
2
  【 作者名 】 サイロス誠
3
3
  【 ソフト名 】 Interactive Media Authoring System "Miyako"
4
- 【 バージョン 】 2.1.10
5
- 【 作成日 】 2010/04/20
4
+ 【 バージョン 】 2.1.11
5
+ 【 作成日 】 2010/05/01
6
6
  【 種別 】 フリーウェア
7
7
  【 開発言語 】 Ruby 1.9.1
8
8
  【 ランタイム 】 Ruby 1.9.1~,Ruby/SDL 2.1~,SDL
@@ -15,7 +15,7 @@
15
15
 
16
16
  【 注意事項 】
17
17
 
18
- 本バージョンは、2.1.10公式リリース版です。
18
+ 本バージョンは、2.1.11公式リリース版です。
19
19
  本バージョンでは、ドキュメント・リファレンスは不十分ですが、「サイログ。」内や、サンプルプログラムの紹介等で随時ドキュメントを公開して行きます。
20
20
  (RDOC化を進めていますので、我こそはと思う方は是非・・・)
21
21
 
@@ -1673,5 +1673,59 @@ v2.1.10(2010.04.20)
1673
1673
  <ドキュメント>
1674
1674
  ・リファレンスマニュアルの項目追加
1675
1675
 
1676
+ v2.1.11(2010.05.01)
1677
+ <バグ修正>
1678
+ ・エラーメッセージの修正(ScenarioEngine,InitiativeScenarioEngine)
1679
+ <機能改善>
1680
+ <仕様変更>
1681
+ ・ScenarioEngine/InitiativeScenarioEngine#commandメソッドの見直し
1682
+  ・インタフェース使用に変化なし
1683
+  ・配列の中身がChoicesクラスオブジェクト(の配列)のときにも対応した
1684
+ ・Choice構造体の:rightと:upの順番を入れ替え
1685
+ ・SpriteAnimation.newメソッドの:sprite引数に加えて、:sprites引数に置き換え可能とした
1686
+ ・SpriteAnimation#render,render_toの高速化を廃止
1687
+ ・SpriteAnimation#newに渡すスプライトの範囲を拡大(要素はSpriteBase・Layoutモジュールを取り込んだ物なら何でも良くなった)
1688
+ <ファイル追加>
1689
+ ・lib/EXT/drawer.rb
1690
+ ・sample/drawer_sample.rb
1691
+ <ファイル削除>
1692
+ <グローバル変数追加>
1693
+ <定数追加>
1694
+ <定数削除>
1695
+ <構造体追加>
1696
+ <クラス追加>
1697
+ Drawer
1698
+ <モジュール追加>
1699
+ <mixin>
1700
+ <クラス・モジュールメソッド追加>
1701
+ <クラス・モジュールメソッド廃止>
1702
+ <モジュール関数追加>
1703
+ ・SpriteBase#.ox=
1704
+ ・SpriteBase#.oy=
1705
+ ・SpriteBase#.ow=
1706
+ ・SpriteBase#.oh=
1707
+ ・SpriteArray#.render_xy
1708
+ ・SpriteArray#.render_xy_to
1709
+ <モジュール関数廃止>
1710
+ <インスタンスメソッド追加>
1711
+ ・ScenarioEngine::Command#to_choice
1712
+ ・ScenarioEngine::CommandEx#to_choice
1713
+ ・ScenarioEngine#start_all
1714
+ ・ScenarioEngine#stop_all
1715
+ ・ScenarioEngine#reset_all
1716
+ ・ScenarioEngine#animation_all
1717
+ ・InitiativeScenarioEngine::Command#to_choice
1718
+ ・InitiativeScenarioEngine::CommandEx#to_choice
1719
+ ・InitiativeScenarioEngine#start_all
1720
+ ・InitiativeScenarioEngine#stop_all
1721
+ ・InitiativeScenarioEngine#reset_all
1722
+ ・InitiativeScenarioEngine#animation_all
1723
+ ・Choice#arrow
1724
+ ・SpriteList#render_xy
1725
+ ・SpriteList#render_xy_to
1726
+ <インスタンスメソッド廃止>
1727
+ <ドキュメント>
1728
+ ・リファレンスマニュアルの項目追加
1729
+
1676
1730
  *******************************************************************************
1677
1731
  このReadMeファイルは「れ~どめ~えじた~」によって作成されました。
@@ -26,6 +26,8 @@ module Miyako
26
26
  include Animation
27
27
  include Layout
28
28
 
29
+ DIRECTION_LIST = [:up, :down, :left, :right, :base]
30
+
29
31
  attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
30
32
 
31
33
  def initialize(*params)
@@ -120,6 +122,18 @@ module Miyako
120
122
  min_y, max_y = yy.minmax
121
123
  return Rect.new(min_x, min_y, max_x-min_x, max_y-min_y)
122
124
  end
125
+
126
+ #===方向と移動先とを関連づける
127
+ # _hash_:: (方向)=>(移動先)の関係を持つハッシュ
128
+ # ハッシュキーは、:up,:down,:left,:right,:baseの5つ
129
+ #返却値:: 生成された矩形(Rect構造体のインスタンス)
130
+ def arrow(hash)
131
+ hash.each{|key, value|
132
+ raise MiakoValueError, "illegal hash key!" unless DIRECTION_LIST.include?(key)
133
+ self[key] = value
134
+ }
135
+ return self
136
+ end
123
137
  end
124
138
 
125
139
  #==選択肢構造体
@@ -136,10 +150,10 @@ module Miyako
136
150
  #_selected_:: 選択肢が選択されているときはtrue、選択されていないときはfalse
137
151
  #_result_:: 選択した結果を示すインスタンス
138
152
  #_left_:: 左方向を選択したときに参照するChoice構造体のインスタンス
139
- #_right_:: 右方向を選択したときに参照するChoice構造体のインスタンス
140
153
  #_up_:: 上方向を選択したときに参照するChoice構造体のインスタンス
154
+ #_right_:: 右方向を選択したときに参照するChoice構造体のインスタンス
141
155
  #_down_:: 下方向を選択したときに参照するChoice構造体のインスタンス
142
- #_base_:: 構造体が要素となっている配列
156
+ #_base_:: 構造体が要素となっているChoices
143
157
  #_attribute_:: 属性を示すハッシュ
144
158
  #_end_select_proc_:: この選択肢を選択したときに優先的に処理するブロック。
145
159
  #ブロックは1つの引数を取る(コマンド選択テキストボックス))。
@@ -147,7 +161,7 @@ module Miyako
147
161
  #_name_:: 選択肢の名前。名前を明示的に指定しないときは、オブジェクトIDを文字列化したものが入る
148
162
  Choice = ChoiceStruct.new(:body, :body_selected, :body_disable,
149
163
  :condition, :enable, :selected, :result,
150
- :left, :right, :up, :down,
164
+ :left, :up, :right, :down,
151
165
  :base, :attribute, :end_select_proc, :name)
152
166
 
153
167
  #==選択肢を管理するクラス
@@ -71,6 +71,8 @@ module Miyako
71
71
  include SpriteBase
72
72
  include Animation
73
73
 
74
+ ALL_TRUE = lambda{ true }
75
+
74
76
  #==キャンセルを示す構造体
75
77
  #コマンド選択がキャンセルされたときに生成される構造体
76
78
  Canceled = Struct.new(:dummy)
@@ -84,6 +86,43 @@ module Miyako
84
86
  #_enabe_:: コマンド選択の時はtrue、選択不可の時はfalseを設定
85
87
  Command = Struct.new(:body, :body_selected, :body_disable, :enable, :condition, :result)
86
88
 
89
+ class Command
90
+ # Command構造体をChoice構造体に変換する
91
+ def to_choice(font=Font.sans_serif, size=16, color=Color[:white])
92
+ org_font_color = font.color
93
+ org_font_size = font.size
94
+
95
+ font.color = color
96
+ tmp = self[:body]
97
+ body = tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)
98
+
99
+ font.color = Color[:red]
100
+ tmp = self[:body_selected]
101
+ body_selected = tmp ? (tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)) : body
102
+
103
+ font.color = Color[:dark_gray]
104
+ tmp = self[:body_disable]
105
+ body_disable= tmp ? (tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)) : body
106
+
107
+ cond = self[:condition] || ALL_TRUE
108
+
109
+ choice = Choice.new(body, body_selected, body_disable,
110
+ cond, self[:enable], false, self[:result],
111
+ nil, nil, nil, nil,
112
+ nil, {}, lambda{}, nil)
113
+ choice.left = choice
114
+ choice.right = choice
115
+ choice.up = choice
116
+ choice.down = choice
117
+ choice.name = choice.__id__.to_s
118
+
119
+ font.color = org_font_color
120
+ font.size = org_font_size
121
+
122
+ choice
123
+ end
124
+ end
125
+
87
126
  #==コマンド構造体
88
127
  #_body_:: コマンドの名称(移動する、調べるなど、アイコンなどの画像も可)
89
128
  #_body_selected_:: 選択時コマンドの名称(移動する、調べるなど、アイコンなどの画像も可)(省略時は、bodyと同一)
@@ -95,6 +134,43 @@ module Miyako
95
134
  #_enabe_:: コマンド選択の時はtrue、選択不可の時はfalseを設定
96
135
  CommandEX = Struct.new(:body, :body_selected, :condition, :body_disable, :enable, :result, :end_select_proc)
97
136
 
137
+ class CommandEx
138
+ # Command構造体をChoice構造体に変換する
139
+ def to_choice(font=Font.sans_serif, size=16, color=Color[:white])
140
+ org_font_color = font.color
141
+ org_font_size = font.size
142
+
143
+ font.color = color
144
+ tmp = self[:body]
145
+ body = tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)
146
+
147
+ font.color = Color[:red]
148
+ tmp = self[:body_selected]
149
+ body_selected = tmp ? (tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)) : body
150
+
151
+ font.color = Color[:dark_gray]
152
+ tmp = self[:body_disable]
153
+ body_disable= tmp ? (tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)) : body
154
+
155
+ cond = self[:condition] || ALL_TRUE
156
+
157
+ choice = Choice.new(body, body_selected, body_disable,
158
+ cond, self[:enable], false, self[:result],
159
+ nil, nil, nil, nil,
160
+ nil, {}, self[:end_select_proc], nil)
161
+ choice.left = choice
162
+ choice.right = choice
163
+ choice.up = choice
164
+ choice.down = choice
165
+ choice.name = choice.__id__.to_s
166
+
167
+ font.color = org_font_color
168
+ font.size = org_font_size
169
+
170
+ choice
171
+ end
172
+ end
173
+
98
174
  attr_reader :visibles, :pre_visibles, :bgs, :base
99
175
  attr_reader :valign
100
176
  #release_checks:: ポーズ解除を問い合わせるブロックの配列。
@@ -224,7 +300,7 @@ module Miyako
224
300
 
225
301
  @engine_stack = []
226
302
 
227
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if proc && proc.arity.abs != params.length
303
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if proc && proc.arity.abs != params.length
228
304
  instance_exec(*params, &proc) if block_given?
229
305
  end
230
306
 
@@ -274,6 +350,38 @@ module Miyako
274
350
  self.pre_visibles.render
275
351
  end
276
352
 
353
+ def start_all
354
+ self.bgs.start
355
+ self.visibles.start
356
+ self.textbox_all.start
357
+ self.commandbox_all.start unless self.box_shared?
358
+ self.pre_visibles.start
359
+ end
360
+
361
+ def stop_all
362
+ self.bgs.stop
363
+ self.visibles.stop
364
+ self.textbox_all.stop
365
+ self.commandbox_all.stop unless self.box_shared?
366
+ self.pre_visibles.stop
367
+ end
368
+
369
+ def reset_all
370
+ self.bgs.reset
371
+ self.visibles.reset
372
+ self.textbox_all.reset
373
+ self.commandbox_all.reset unless self.box_shared?
374
+ self.pre_visibles.reset
375
+ end
376
+
377
+ def animation_all
378
+ self.bgs.update_animation
379
+ self.visibles.update_animation
380
+ self.textbox_all.update_animation
381
+ self.commandbox_all.update_animation unless self.box_shared?
382
+ self.pre_visibles.update_animation
383
+ end
384
+
277
385
  #===Yuki#showで表示指定した画像を描画する
278
386
  #描画順は、showメソッドで指定した順に描画される(先に指定した画像は後ろに表示される)
279
387
  #なお、visibleの値がfalseの時は描画されない。
@@ -798,7 +906,7 @@ module Miyako
798
906
  @now_page = nil
799
907
  @first_page = nil
800
908
 
801
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if proc && proc.arity.abs != params.length
909
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if proc && proc.arity.abs != params.length
802
910
  instance_exec(*params, &proc) if proc
803
911
 
804
912
  return self
@@ -829,9 +937,9 @@ module Miyako
829
937
  #返却値:: 自分自身を返す
830
938
  def start_plot(base, plot_proc = nil, *params, &plot_block)
831
939
  raise MiyakoValueError, "Yuki Error! Textbox is not selected!" unless @text_box
832
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if plot_proc && plot_proc.arity.abs != params.length
833
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if plot_block && plot_block.arity.abs != params.length
834
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if @exec_plot && @exec_plot.arity.abs != params.length
940
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if plot_proc && plot_proc.arity.abs != params.length
941
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if plot_block && plot_block.arity.abs != params.length
942
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if @exec_plot && @exec_plot.arity.abs != params.length
835
943
  @base = base
836
944
  plot_facade(plot_proc, *params, &plot_block)
837
945
  return self
@@ -1314,7 +1422,7 @@ module Miyako
1314
1422
  #引数無しのブロックを渡せば、コマンド選択開始前に、決定判別・キャンセル判別に必要な前処理を施すことが出来る
1315
1423
  #選択中、update_innerメソッドを呼び出し、続けて、処理をYuki#startもしくはYuki#update呼び出し直後に戻す
1316
1424
  #Yuki#updateが呼び出されても選択中の場合は、再び上記の処理を繰り返す
1317
- #_command_list_:: 表示するコマンド群。各要素はCommand構造体の配列
1425
+ #_command_list_:: 表示するコマンド群。各要素はCommand構造体/CommandEx構造体/Choicesクラスオブジェクトの配列
1318
1426
  #_cancel_to_:: キャンセルボタンを押したときの結果。デフォルトはnil(キャンセル無効)
1319
1427
  #_chain_block_:: コマンドの表示方法。TextBox#create_choices_chainメソッド参照
1320
1428
  #返却値:: 自分自身を返す
@@ -1322,22 +1430,29 @@ module Miyako
1322
1430
  raise MiyakoValueError, "Yuki Error! Commandbox is not selected!" unless @command_box
1323
1431
  @cancel = cancel_to
1324
1432
 
1325
- choices = []
1326
- command_list.each{|cm|
1327
- if (cm[:condition] == nil || cm[:condition].call)
1328
- cm_array = [cm[:body], cm[:body_selected], cm[:body_disable], cm[:enable], cm[:result]]
1329
- methods = cm.methods
1330
- cm_array << (methods.include?(:end_select_proc) ? cm[:end_select_proc] : nil)
1331
- choices.push(cm_array)
1332
- end
1333
- }
1334
- return self if choices.length == 0
1433
+ if command_list.kind_of?(Choices)
1434
+ @pre_command.each{|proc| proc.call}
1435
+ @pre_cancel.each{|proc| proc.call}
1436
+ @command_box_all.show if @command_box_all.object_id != @text_box_all.object_id
1437
+ @command_box.command(command_list)
1438
+ else
1439
+ choices = []
1440
+ command_list.each{|cm|
1441
+ if (cm[:condition] == nil || cm[:condition].call)
1442
+ cm_array = [cm[:body], cm[:body_selected], cm[:body_disable], cm[:enable], cm[:result]]
1443
+ methods = cm.methods
1444
+ cm_array << (methods.include?(:end_select_proc) ? cm[:end_select_proc] : nil)
1445
+ choices.push(cm_array)
1446
+ end
1447
+ }
1448
+ return self if choices.length == 0
1449
+
1450
+ @pre_command.each{|proc| proc.call}
1451
+ @pre_cancel.each{|proc| proc.call}
1452
+ @command_box_all.show if @command_box_all.object_id != @text_box_all.object_id
1453
+ @command_box.command(@command_box.create_choices_chain(choices, &chain_block))
1454
+ end
1335
1455
 
1336
- @pre_command.each{|proc| proc.call}
1337
- @pre_cancel.each{|proc| proc.call}
1338
- yield if block_given?
1339
- @command_box_all.show if @command_box_all.object_id != @text_box_all.object_id
1340
- @command_box.command(@command_box.create_choices_chain(choices, &chain_block))
1341
1456
  @result = nil
1342
1457
  selecting = true
1343
1458
  reset_selecting
@@ -86,6 +86,18 @@ module Miyako
86
86
  return 0
87
87
  end
88
88
 
89
+ #=== mixin されたインスタンスの部分矩形開始位置(x軸)を取得する
90
+ #返却値:: 部分矩形開始位置(デフォルトは0)
91
+ def ox=(v)
92
+ v
93
+ end
94
+
95
+ #=== mixin されたインスタンスの部分矩形開始位置(y軸)を取得する
96
+ #返却値::部分矩形開始位置(デフォルトは0)
97
+ def oy=(v)
98
+ v
99
+ end
100
+
89
101
  #=== mixin されたインスタンスの部分矩形幅を取得する
90
102
  #返却値:: インスタンスの幅(デフォルトは0)
91
103
  def ow
@@ -98,6 +110,18 @@ module Miyako
98
110
  return 0
99
111
  end
100
112
 
113
+ #=== mixin されたインスタンスの部分矩形幅を取得する
114
+ #返却値:: インスタンスの幅(デフォルトは0)
115
+ def ow=(v)
116
+ v
117
+ end
118
+
119
+ #=== mixin されたインスタンスの部分矩形高を取得する
120
+ #返却値:: インスタンスの高さ(デフォルトは0)
121
+ def oh=(v)
122
+ v
123
+ end
124
+
101
125
  #=== スプライトの部分矩形を返す
102
126
  #返却値:: Rect構造体インスタンス(デフォルトはnil)
103
127
  def part_rect
@@ -284,7 +308,7 @@ module Miyako
284
308
  #_v_:: 設定する値(true/false)
285
309
  #返却値:: 自分自身を返す
286
310
  def visible=(v)
287
- self.sprite_only.each{|e| e.visible = v}
311
+ self.each{|e| e.visible = v if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
288
312
  return self
289
313
  end
290
314
 
@@ -308,9 +332,9 @@ module Miyako
308
332
  #返却値:: 自分自身を返す
309
333
  def move!(dx, dy)
310
334
  if block_given?
311
- self.sprite_only.each_with_index{|e, i| e.move!(*(yield e, i, dx, dy))}
335
+ self.each_with_index{|e, i| e.move!(*(yield e, i, dx, dy)) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
312
336
  else
313
- self.sprite_only.each{|e| e.move!(dx, dy)}
337
+ self.each{|e| e.move!(dx, dy) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
314
338
  end
315
339
  self
316
340
  end
@@ -335,9 +359,9 @@ module Miyako
335
359
  #返却値:: 自分自身を返す
336
360
  def move_to!(x, y)
337
361
  if block_given?
338
- self.sprite_only.each_with_index{|e, i| e.move_to!(*(yield e, i, x, y))}
362
+ self.each_with_index{|e, i| e.move_to!(*(yield e, i, x, y)) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
339
363
  else
340
- self.sprite_only.each{|e| e.move_to!(x, y)}
364
+ self.each{|e| e.move_to!(x, y) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
341
365
  end
342
366
  self
343
367
  end
@@ -346,7 +370,7 @@ module Miyako
346
370
  #各要素のstartメソッドを呼び出す
347
371
  #返却値:: 自分自身を返す
348
372
  def start
349
- self.sprite_only.each{|sprite| sprite.start }
373
+ self.each{|sprite| sprite.start if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
350
374
  return self
351
375
  end
352
376
 
@@ -354,7 +378,7 @@ module Miyako
354
378
  #各要素のstopメソッドを呼び出す
355
379
  #返却値:: 自分自身を返す
356
380
  def stop
357
- self.sprite_only.each{|sprite| sprite.stop }
381
+ self.each{|sprite| sprite.stop if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
358
382
  return self
359
383
  end
360
384
 
@@ -362,7 +386,7 @@ module Miyako
362
386
  #各要素のresetメソッドを呼び出す
363
387
  #返却値:: 自分自身を返す
364
388
  def reset
365
- self.sprite_only.each{|sprite| sprite.reset }
389
+ self.each{|sprite| sprite.reset if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
366
390
  return self
367
391
  end
368
392
 
@@ -370,9 +394,7 @@ module Miyako
370
394
  #各要素のupdate_animationメソッドを呼び出す
371
395
  #返却値:: 描く画像のupdate_spriteメソッドを呼び出した結果を配列で返す
372
396
  def update_animation
373
- self.sprite_only.map{|e|
374
- e.update_animation
375
- }
397
+ self.map{|e| (e.class.include?(SpriteBase) || e.class.include?(SpriteArray)) ? e.update_animation : false }
376
398
  end
377
399
 
378
400
  #===指定した要素の内容を入れ替える
@@ -393,7 +415,7 @@ module Miyako
393
415
  #描画するインスタンスは、SpriteBaseモジュールがmixinされているクラスのみ
394
416
  #返却値:: 自分自身を帰す
395
417
  def render
396
- self.sprite_only.each{|e| e.render }
418
+ self.each{|e| e.render if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
397
419
  return self
398
420
  end
399
421
 
@@ -402,9 +424,34 @@ module Miyako
402
424
  #_dst_:: 描画対象の画像インスタンス
403
425
  #返却値:: 自分自身を帰す
404
426
  def render_to(dst)
405
- self.each{|e| e.render_to(dst) }
427
+ self.each{|e| e.render_to(dst) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
406
428
  return self
407
429
  end
430
+
431
+ #===位置を指定して画面への描画を指示するメソッドのテンプレート
432
+ #オブジェクトで保持している位置情報ではなく、引数で渡された位置に描画する
433
+ #基本的に、メソッドのオーバーライドにより機能するが、pos,move_to!メソッドを持っているときは、
434
+ #これらのメソッドを呼び出して同じ動作を行うが処理速度的に課題あり
435
+ #ただし、上記のメソッドを持っていない場合は、単純にrenderメソッドを呼び出す
436
+ #_x_:: 描画位置のx座標
437
+ #_y_:: 描画位置のy座標
438
+ #返却値:: 自分自身を返す
439
+ def render_xy(x, y)
440
+ return self.each{|e| e.render_xy(x, y) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
441
+ end
442
+
443
+ #===位置を指定して画像への描画を指示するメソッドのテンプレート
444
+ #オブジェクトで保持している位置情報ではなく、引数で渡された位置に描画する
445
+ #基本的に、メソッドのオーバーライドにより機能するが、pos,move_to!メソッドを持っているときは、
446
+ #これらのメソッドを呼び出して同じ動作を行うが、処理速度的に課題あり
447
+ #ただし、上記のメソッドを持っていない場合は、単純にrender_toメソッドを呼び出す
448
+ #_dst_:: 対象の画像
449
+ #_x_:: 描画位置のx座標
450
+ #_y_:: 描画位置のy座標
451
+ #返却値:: 自分自身を返す
452
+ def render_xy_to(dst, x, y)
453
+ return self.each{|e| e.render_xy_to(dst, x, y) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
454
+ end
408
455
  end
409
456
 
410
457
  #==ディープコピーを実装するモジュール