ruby-miyako-mswin32 2.1.10 → 2.1.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -53,7 +53,7 @@ module Miyako
53
53
  #
54
54
  #利用できるパラメータは以下の通り
55
55
  #
56
- #:sprite => sprite|spriteの配列 アニメーションさせるスプライト(インスタンス単体もしくはインスタンスの配列)。必須パラメータ
56
+ #:sprite/:sprites => sprite|spriteの配列 アニメーションさせるスプライト(インスタンス単体もしくはインスタンスの配列)。必須パラメータ
57
57
  #
58
58
  #:dir => :h|:v 単体アニメーションのとき、縦方向に位置をずらして表示させる(:h指定時)か、横方向か(:v指定時)を決定する。デフォルトは:h
59
59
  #
@@ -65,12 +65,11 @@ module Miyako
65
65
  #返却値:: 生成されたインスタンス
66
66
  def initialize(hash)
67
67
  init_layout
68
- @units = Array.new
69
68
  @slist = nil
70
69
 
71
70
  hash[:dir] ||= :h
72
71
  @dir = hash[:dir]
73
- s = hash[:sprite]
72
+ s = hash[:sprite] || hash[:sprites]
74
73
  hash[:pattern_list] ||= nil
75
74
  @plist = hash[:pattern_list]
76
75
  hash[:wait] ||= 0
@@ -91,25 +90,13 @@ module Miyako
91
90
 
92
91
  @slist = Array.new
93
92
  if s.kind_of?(Sprite)
94
- @now = s.to_unit unless @now
95
- set_layout_size(s.ow, s.oh)
96
- move_to!(s.x, s.y)
97
- s.snap(self)
98
- s.left!.top!
99
93
  @pat_len = @dir == :h ? s.h : s.w
100
94
  @pat_olen = @dir == :h ? s.oh : s.ow
101
95
  @chr_len = @dir == :h ? s.w : s.h
102
96
  @chr_olen = @dir == :h ? s.ow : s.oh
103
97
  @pats = @pat_len / @pat_olen
104
98
  elsif s.kind_of?(Array)
105
- first = s[0]
106
- @now = first.to_unit unless @now
107
- set_layout_size(first.ow, first.oh)
108
- move_to!(first.x, first.y)
109
- @slist = s.map{|ss|
110
- ss.snap(self)
111
- ss.left!.top!
112
- }
99
+ @slist = s.dup
113
100
  @pat_len = @slist.length
114
101
  @pats = @slist.length
115
102
  else
@@ -164,23 +151,18 @@ module Miyako
164
151
  end
165
152
 
166
153
  if @slist.length == 0
167
- @slist = Array.new(@pats){|pat| s }
168
- @units = Array.new(@pats){|pat|
169
- u = @slist[pat].to_unit.dup
154
+ @slist = Array.new(@pats){|pat|
155
+ u = s.dup
170
156
  px = pat % (@pat_len / @pat_olen)
171
157
  if @dir == :h
172
- u.oy = @slist[pat].oh * @plist[px]
158
+ u.oy = u.oh * @plist[px]
173
159
  else
174
- u.ox = @slist[pat].ow * @plist[px]
160
+ u.ox = u.ow * @plist[px]
175
161
  end
176
162
  u
177
163
  }
178
164
  elsif @slist.length < @pats
179
- tmp = @slist
180
165
  @slist = @slist.cycle.take(@pats)
181
- @units = Array.new(@pats){|pat| @slist[pat].to_unit.dup }
182
- else
183
- @units = Array.new(@pats){|pat| @slist[pat].to_unit.dup }
184
166
  end
185
167
 
186
168
  if @move_offset.length == 0
@@ -215,7 +197,16 @@ module Miyako
215
197
  @exec = false
216
198
  @visible = true
217
199
 
218
- @now = @units[0]
200
+ @now = @slist[@plist[@pnum]]
201
+
202
+ first = @slist[0]
203
+ set_layout_size(first.ow, first.oh)
204
+ move_to!(first.x, first.y)
205
+ @slist.each{|ss|
206
+ ss.snap(self)
207
+ ss.left!.top!
208
+ }
209
+
219
210
  @now.move_to!(@slist[@plist[@pnum]].x + @move_offset[@pnum][0],
220
211
  @slist[@plist[@pnum]].y + @move_offset[@pnum][1])
221
212
  end
@@ -224,12 +215,11 @@ module Miyako
224
215
  #複写と同時に、本インスタンスに対するスナップの関係を解消するが、
225
216
  #新しいパターンスプライトとスナップをやり直す
226
217
  def initialize_copy(obj)
227
- @units = @units.deep_dup
228
218
  @slist = @slist.deep_dup
229
219
  @plist = @plist.dup
230
220
  @move_offset = @move_offset.dup
231
221
  @pos_offset = @pos_offset.dup
232
- @now = @units[@plist[@pnum]]
222
+ @now = @slist[@plist[@pnum]]
233
223
  copy_layout
234
224
  @slist.each{|s| s.snap(self)}
235
225
  end
@@ -261,7 +251,7 @@ module Miyako
261
251
  end
262
252
 
263
253
  def update_layout_position #:nodoc:
264
- @units.each{|u| u.move_to!(*@layout.pos)}
254
+ @slist.each{|u| u.move_to!(*@layout.pos)}
265
255
  end
266
256
 
267
257
  #===現在表示しているスプライトのowを取得する
@@ -298,8 +288,8 @@ module Miyako
298
288
  end
299
289
 
300
290
  #===キャラクター番号を設定する
301
- #キャラクター番号(アニメーションさせるときに表示させるパターン群インデックス)
302
- #を設定する。範囲外のキャラクター番号が設定された時は何も行わない
291
+ #キャラクター番号(アニメーションさせるときに表示させるパターン群インデックス)
292
+ #を設定する。範囲外のキャラクター番号が設定された時は何も行わない
303
293
  #_cnum_:: キャラクター番号
304
294
  def character=(cnum)
305
295
  return self if (cnum < 0 || cnum >= @chrs)
@@ -317,8 +307,8 @@ module Miyako
317
307
  return self
318
308
  end
319
309
 
320
- #===現在のキャラクター番号を取得する
321
- #返却値:: キャラクター番号(0以上の整数)
310
+ #===現在のキャラクター番号を取得する
311
+ #返却値:: キャラクター番号(0以上の整数)
322
312
  def character
323
313
  return @cnum
324
314
  end
@@ -409,11 +399,11 @@ module Miyako
409
399
  end
410
400
 
411
401
  def set_pat #:nodoc:
412
- @now = @units[@plist[@pnum]]
402
+ @now = @slist[@plist[@pnum]]
413
403
  end
414
404
 
415
405
  def set_chr #:nodoc:
416
- @units.each{|u|
406
+ @slist.each{|u|
417
407
  if @dir == :h
418
408
  u.ox = @chr_olen * @cnum
419
409
  else
@@ -460,6 +450,7 @@ module Miyako
460
450
  #===現在表示しているスプライトの大きさを矩形で取得する
461
451
  #返却値:: 生成された矩形(Rect構造体のインスタンス)
462
452
  def rect
453
+ v = @slist[@plist[@pnum]]
463
454
  return Rect.new(@now.x, @now.y, @now.ow, @now.oh)
464
455
  end
465
456
 
@@ -473,8 +464,6 @@ module Miyako
473
464
  #===インスタンスに束縛されているオブジェクトを解放する
474
465
  def dispose
475
466
  @slist.clear
476
- @units.each{|u| u.bitmap = nil}
477
- @units.clear
478
467
  @waits.clear
479
468
  @plist.clear
480
469
  @move_offset.clear
@@ -489,6 +478,9 @@ module Miyako
489
478
  #ブロックの引数は、|インスタンスのSpriteUnit|となる。
490
479
  #visibleメソッドの値がfalseのときは描画されない。
491
480
  def render
481
+ return self unless @now
482
+ pos = @now.move(*@move_offset[@pnum])
483
+ @now.render_xy(*pos)
492
484
  end
493
485
 
494
486
  #===アニメーションの現在の画像を画像に描画する
@@ -500,6 +492,9 @@ module Miyako
500
492
  #visibleメソッドの値がfalseのときは描画されない。
501
493
  #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
502
494
  def render_to(dst)
495
+ return self unless @now
496
+ pos = @now.move(*@move_offset[@pnum])
497
+ @now.render_xy_to(dst, *pos)
503
498
  end
504
499
  end
505
500
  end
@@ -1349,6 +1349,40 @@ module Miyako
1349
1349
  return self
1350
1350
  end
1351
1351
 
1352
+
1353
+ #===位置を指定して画面への描画を指示するメソッドのテンプレート
1354
+ #オブジェクトで保持している位置情報ではなく、引数で渡された位置に描画する
1355
+ #基本的に、メソッドのオーバーライドにより機能するが、pos,move_to!メソッドを持っているときは、
1356
+ #これらのメソッドを呼び出して同じ動作を行うが処理速度的に課題あり
1357
+ #ただし、上記のメソッドを持っていない場合は、単純にrenderメソッドを呼び出す
1358
+ #_x_:: 描画位置のx座標
1359
+ #_y_:: 描画位置のy座標
1360
+ #返却値:: 自分自身を返す
1361
+ def render_xy(x, y)
1362
+ return self.each{|pair|
1363
+ obj = pair[1]
1364
+ cl = e.class
1365
+ obj.render_xy(x, y) if cl.include?(SpriteBase) || cl.include?(SpriteArray)
1366
+ }
1367
+ end
1368
+
1369
+ #===位置を指定して画像への描画を指示するメソッドのテンプレート
1370
+ #オブジェクトで保持している位置情報ではなく、引数で渡された位置に描画する
1371
+ #基本的に、メソッドのオーバーライドにより機能するが、pos,move_to!メソッドを持っているときは、
1372
+ #これらのメソッドを呼び出して同じ動作を行うが、処理速度的に課題あり
1373
+ #ただし、上記のメソッドを持っていない場合は、単純にrender_toメソッドを呼び出す
1374
+ #_dst_:: 対象の画像
1375
+ #_x_:: 描画位置のx座標
1376
+ #_y_:: 描画位置のy座標
1377
+ #返却値:: 自分自身を返す
1378
+ def render_xy_to(dst, x, y)
1379
+ return self.each{|pair|
1380
+ obj = pair[1]
1381
+ cl = e.class
1382
+ obj.render_xy_to(dst, x, y) if cl.include?(SpriteBase) || cl.include?(SpriteArray)
1383
+ }
1384
+ end
1385
+
1352
1386
  #===オブジェクトを文字列に変換する
1353
1387
  #いったん、名前とスプライトとの対の配列に変換し、to_sメソッドで文字列化する。
1354
1388
  #例:[[name1, sprite1], [name2, sprite2],...]
@@ -519,7 +519,7 @@ module Miyako
519
519
  #返却値:: 自分自身を返す
520
520
  def command(choices, dx = nil, dy = nil)
521
521
  if choices.methods.include?(:start_choice)
522
- @choices = choices.dup
522
+ @choices = choices
523
523
  @choices.snap(self)
524
524
  else
525
525
  @choices.clear
@@ -36,6 +36,8 @@ module Miyako
36
36
  include SpriteBase
37
37
  include Animation
38
38
 
39
+ ALL_TRUE = lambda{ true }
40
+
39
41
  #==キャンセルを示す構造体
40
42
  #コマンド選択がキャンセルされたときに生成される構造体
41
43
  Canceled = Struct.new(:dummy)
@@ -49,6 +51,43 @@ module Miyako
49
51
  #_result_:: 選択結果(移動先シーンクラス名、シナリオ(メソッド)名他のオブジェクト)
50
52
  Command = Struct.new(:body, :body_selected, :body_disable, :enable, :condition, :result)
51
53
 
54
+ class Command
55
+ # Command構造体をChoice構造体に変換する
56
+ def to_choice(font=Font.sans_serif, size=16, color=Color[:white])
57
+ org_font_color = font.color
58
+ org_font_size = font.size
59
+
60
+ font.color = color
61
+ tmp = self[:body]
62
+ body = tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)
63
+
64
+ font.color = Color[:red]
65
+ tmp = self[:body_selected]
66
+ body_selected = tmp ? (tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)) : body
67
+
68
+ font.color = Color[:dark_gray]
69
+ tmp = self[:body_disable]
70
+ body_disable= tmp ? (tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)) : body
71
+
72
+ cond = self[:condition] || ALL_TRUE
73
+
74
+ choice = Choice.new(body, body_selected, body_disable,
75
+ cond, self[:enable], false, self[:result],
76
+ nil, nil, nil, nil,
77
+ nil, {}, lambda{}, nil)
78
+ choice.left = choice
79
+ choice.right = choice
80
+ choice.up = choice
81
+ choice.down = choice
82
+ choice.name = choice.__id__.to_s
83
+
84
+ font.color = org_font_color
85
+ font.size = org_font_size
86
+
87
+ choice
88
+ end
89
+ end
90
+
52
91
  #==コマンド構造体
53
92
  #_body_:: コマンドの名称(移動する、調べるなど、アイコンなどの画像も可)
54
93
  #_body_selected_:: 選択時コマンドの名称(移動する、調べるなど、アイコンなどの画像も可)(省略時は、bodyと同一)
@@ -60,6 +99,43 @@ module Miyako
60
99
  #ブロックは1つの引数を取る(コマンド選択テキストボックス))。デフォルトはnil
61
100
  CommandEX = Struct.new(:body, :body_selected, :condition, :body_disable, :enable, :result, :end_select_proc)
62
101
 
102
+ class CommandEx
103
+ # Command構造体をChoice構造体に変換する
104
+ def to_choice(font=Font.sans_serif, size=16, color=Color[:white])
105
+ org_font_color = font.color
106
+ org_font_size = font.size
107
+
108
+ font.color = color
109
+ tmp = self[:body]
110
+ body = tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)
111
+
112
+ font.color = Color[:red]
113
+ tmp = self[:body_selected]
114
+ body_selected = tmp ? (tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)) : body
115
+
116
+ font.color = Color[:dark_gray]
117
+ tmp = self[:body_disable]
118
+ body_disable= tmp ? (tmp.method(:to_sprite).arity == 0 ? tmp.to_sprite : tmp.to_sprite(font)) : body
119
+
120
+ cond = self[:condition] || ALL_TRUE
121
+
122
+ choice = Choice.new(body, body_selected, body_disable,
123
+ cond, self[:enable], false, self[:result],
124
+ nil, nil, nil, nil,
125
+ nil, {}, self[:end_select_proc], nil)
126
+ choice.left = choice
127
+ choice.right = choice
128
+ choice.up = choice
129
+ choice.down = choice
130
+ choice.name = choice.__id__.to_s
131
+
132
+ font.color = org_font_color
133
+ font.size = org_font_size
134
+
135
+ choice
136
+ end
137
+ end
138
+
63
139
  #===Yuki#update実行中に行わせる処理を実装するテンプレートメソッド
64
140
  #但し、メソッド本体は、update_inner=メソッドで設定する必要がある
65
141
  #_yuki_:: 実行中のYukiクラスインスタンス
@@ -228,7 +304,7 @@ module Miyako
228
304
  @now_page = nil
229
305
  @first_page = nil
230
306
 
231
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if proc && proc.arity.abs != params.length
307
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if proc && proc.arity.abs != params.length
232
308
  instance_exec(*params, &proc) if block_given?
233
309
  end
234
310
 
@@ -314,6 +390,38 @@ module Miyako
314
390
  self.pre_visibles.render_to(dst)
315
391
  end
316
392
 
393
+ def start_all
394
+ self.bgs.start
395
+ self.visibles.start
396
+ self.textbox_all.start
397
+ self.commandbox_all.start unless self.box_shared?
398
+ self.pre_visibles.start
399
+ end
400
+
401
+ def stop_all
402
+ self.bgs.stop
403
+ self.visibles.stop
404
+ self.textbox_all.stop
405
+ self.commandbox_all.stop unless self.box_shared?
406
+ self.pre_visibles.stop
407
+ end
408
+
409
+ def reset_all
410
+ self.bgs.reset
411
+ self.visibles.reset
412
+ self.textbox_all.reset
413
+ self.commandbox_all.reset unless self.box_shared?
414
+ self.pre_visibles.reset
415
+ end
416
+
417
+ def animation_all
418
+ self.bgs.update_animation
419
+ self.visibles.update_animation
420
+ self.textbox_all.update_animation
421
+ self.commandbox_all.update_animation unless self.box_shared?
422
+ self.pre_visibles.update_animation
423
+ end
424
+
317
425
  #===Yuki#showで表示指定した画像のアニメーションを更新する
318
426
  #showメソッドで指定した画像のupdate_animationメソッドを呼び出す
319
427
  #返却値:: 描く画像のupdate_spriteメソッドを呼び出した結果を配列で返す
@@ -803,7 +911,7 @@ module Miyako
803
911
  @now_page = nil
804
912
  @first_page = nil
805
913
 
806
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if proc && proc.arity.abs != params.length
914
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if proc && proc.arity.abs != params.length
807
915
  instance_exec(*params, &proc) if proc
808
916
 
809
917
  return self
@@ -833,9 +941,9 @@ module Miyako
833
941
  #返却値:: 自分自身を返す
834
942
  def start_plot(plot_proc = nil, *params, &plot_block)
835
943
  raise MiyakoValueError, "Yuki Error! Textbox is not selected!" unless @text_box
836
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if plot_proc && plot_proc.arity.abs != params.length
837
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if plot_block && plot_block.arity.abs != params.length
838
- raise MiyakoProcError, "Aagument count is not same block parameter count!" if @exec_plot && @exec_plot.arity.abs != params.length
944
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if plot_proc && plot_proc.arity.abs != params.length
945
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if plot_block && plot_block.arity.abs != params.length
946
+ raise MiyakoProcError, "Argument count is not same block parameter count!" if @exec_plot && @exec_plot.arity.abs != params.length
839
947
  @executing_fiber = Fiber.new{ plot_facade(plot_proc, *params, &plot_block) }
840
948
  @executing_fiber.resume
841
949
  return self
@@ -1337,7 +1445,7 @@ module Miyako
1337
1445
  #引数無しのブロックを渡せば、コマンド選択開始前に、決定判別・キャンセル判別に必要な前処理を施すことが出来る
1338
1446
  #選択中、update_innerメソッドを呼び出し、続けて、処理をYuki#startもしくはYuki#update呼び出し直後に戻す
1339
1447
  #Yuki#updateが呼び出されても選択中の場合は、再び上記の処理を繰り返す
1340
- #_command_list_:: 表示するコマンド群。各要素はCommand/CommandEx構造体の配列
1448
+ #_command_list_:: 表示するコマンド群。各要素はCommand構造体/CommandEx構造体の配列
1341
1449
  #_cancel_to_:: キャンセルボタンを押したときの結果。デフォルトはnil(キャンセル無効)
1342
1450
  #_chain_block_:: コマンドの表示方法。TextBox#create_choices_chainメソッド参照
1343
1451
  #返却値:: 自分自身を返す
@@ -1345,22 +1453,28 @@ module Miyako
1345
1453
  raise MiyakoValueError, "Yuki Error! Commandbox is not selected!" unless @command_box
1346
1454
  @cancel = cancel_to
1347
1455
 
1348
- choices = []
1349
- command_list.each{|cm|
1350
- if (cm[:condition] == nil || cm[:condition].call)
1351
- cm_array = [cm[:body], cm[:body_selected], cm[:body_disable], cm[:enable], cm[:result]]
1352
- methods = cm.methods
1353
- cm_array << (methods.include?(:end_select_proc) ? cm[:end_select_proc] : nil)
1354
- choices.push(cm_array)
1355
- end
1356
- }
1357
- return self if choices.length == 0
1358
-
1359
- @pre_command.each{|proc| proc.call}
1360
- @pre_cancel.each{|proc| proc.call}
1361
- yield if block_given?
1362
- @command_box_all.show if @command_box_all.object_id != @text_box_all.object_id
1363
- @command_box.command(@command_box.create_choices_chain(choices, &chain_block))
1456
+ if command_list.kind_of?(Choices)
1457
+ @pre_command.each{|proc| proc.call}
1458
+ @pre_cancel.each{|proc| proc.call}
1459
+ @command_box_all.show if @command_box_all.object_id != @text_box_all.object_id
1460
+ @command_box.command(command_list)
1461
+ else
1462
+ choices = []
1463
+ command_list.each{|cm|
1464
+ if (cm[:condition] == nil || cm[:condition].call)
1465
+ cm_array = [cm[:body], cm[:body_selected], cm[:body_disable], cm[:enable], cm[:result]]
1466
+ methods = cm.methods
1467
+ cm_array << (methods.include?(:end_select_proc) ? cm[:end_select_proc] : nil)
1468
+ choices.push(cm_array)
1469
+ end
1470
+ }
1471
+ return self if choices.length == 0
1472
+
1473
+ @pre_command.each{|proc| proc.call}
1474
+ @pre_cancel.each{|proc| proc.call}
1475
+ @command_box_all.show if @command_box_all.object_id != @text_box_all.object_id
1476
+ @command_box.command(@command_box.create_choices_chain(choices, &chain_block))
1477
+ end
1364
1478
  @result = nil
1365
1479
  @selecting = true
1366
1480
  while @selecting
@@ -0,0 +1,117 @@
1
+ #encoding: utf-8
2
+ # Drawerクラス
3
+ # 図形描画をスプライトとして扱うクラス
4
+ # 2010.05.01 Cyross Makoto
5
+
6
+ module Miyako
7
+ # SpriteBase, Animation, Layoutモジュールのメソッドが利用可能
8
+ class Drawer
9
+ include SpriteBase
10
+ include Animation
11
+ include Layout
12
+
13
+ attr_accessor :method, :color
14
+ attr_accessor :r, :rx, :ry, :aa, :fill
15
+ attr_accessor :visible
16
+ attr_accessor :base, :point, :rect, :points
17
+
18
+ # 図形描画オブジェクトを作る
19
+ # 引数はハッシュ引数
20
+ # それぞれのキーは、Drawerクラスオブジェクトのメソッドとしてアクセス可能
21
+ # :method => メソッドを指定(:fill,:pset,:line,:rect,:circle,:ellipse,:polygon) 省略不可
22
+ # :base => 描画先スプライト 全メソッドで有効 省略時はScreen(画面)
23
+ # :color => 描画色 全メソッドで有効 省略時は白色([255,255,255,255])
24
+ # :point => 描画開始座標/円の中心座標(Point構造体) :pset, :circle, :ellipseのみ有効 省略時はPoint(0,0)
25
+ # :rect => 描画矩形(Rect構造体) :line,:rectのみ有効 省略時はRect(0,0,1,1)
26
+ # :points => 座標の配列([Point構造体,Point構造体,...]) :polygonのみ有効 省略時は空の配列
27
+ # :r => 円の半径(数値) :circleのみ有効 省略時は1
28
+ # :rx => 楕円の横方向半径 :ellipseのみ有効 省略時は1
29
+ # :ry => 楕円の縦方向半径 :ellipseのみ有効 省略時は1
30
+ # :aa => アンチエイリアスを付けるかどうか(true/false) :line, :cirle, :ellipse, :polygonのみ有効 省略時はfalse
31
+ # :fill => 描画色で図形の中を塗りつぶすかどうか(true/false) :rect, :circle, :ellipse, :polygonのみ有効 省略時はfalse
32
+ def initialize(hash)
33
+ init_layout
34
+ set_layout_size(1,1)
35
+ @method = hash[:method]
36
+ @base = hash[:base] || Screen
37
+ @color = hash[:color] || [255,255,255]
38
+ @point = hash[:point] ? Point.new(*(hash[:point].to_a)) : Point.new(0,0)
39
+ @rect = hash[:rect] ? Rect.new(*(hash[:rect].to_a)) : Rect.new(0,0,1,1)
40
+ @points = hash[:points] ? hash[:points].map{|pos| Point.new(*pos.to_a)} : []
41
+ @r = hash[:r] || 1
42
+ @rx = hash[:rx] || 1
43
+ @ry = hash[:ry] || 1
44
+ @aa = hash[:aa] || false
45
+ @fill = hash[:fill] || false
46
+ @visible = true
47
+ @off = Point.new(0,0)
48
+ raise MiyakoError, "set correct method name by symbol!" unless @method
49
+ end
50
+
51
+ def render
52
+ return self unless @visible
53
+ @off.move_to!(0,0)
54
+ __send__(@method)
55
+ end
56
+
57
+ def render_xy(x, y)
58
+ return self unless @visible
59
+ @off.move_to!(x,y)
60
+ __send__(@method)
61
+ end
62
+
63
+ def fill
64
+ Drawing.fill(@base,
65
+ @color)
66
+ end
67
+
68
+ def pset
69
+ Drawing.pser(@base,
70
+ @point.move(*@layout.pos).move!(*@off),
71
+ @color)
72
+ end
73
+
74
+ def line
75
+ Drawing.line(@base,
76
+ @rect.move(*@layout.pos).move!(*@off),
77
+ @color,
78
+ @aa)
79
+ end
80
+
81
+ def rect
82
+ Drawing.rect(@base,
83
+ @rect.move(*@layout.pos).move!(*@off),
84
+ @color,
85
+ @fill)
86
+ end
87
+
88
+ def circle
89
+ Drawing.circle(@base,
90
+ @point.move(*@layout.pos).move!(*@off),
91
+ @r,
92
+ @color,
93
+ @fill,
94
+ @aa)
95
+ end
96
+
97
+ def ellipse
98
+ Drawing.ellipse(@base,
99
+ @point.move(*@layout.pos).move!(*@off),
100
+ @rx,
101
+ @ry,
102
+ @color,
103
+ @fill,
104
+ @aa)
105
+ end
106
+
107
+ def polygon
108
+ Drawing.polygon(@base,
109
+ @points.map{|pos| pos.move(*@layout.pos).move!(*@off)},
110
+ @color,
111
+ @fill,
112
+ @aa)
113
+ end
114
+
115
+ private :fill, :pset, :line, :rect, :circle, :ellipse, :polygon
116
+ end
117
+ end
data/lib/Miyako/miyako.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  #=コンテンツ作成ライブラリMiyako2.1
4
4
  #
5
5
  #Authors:: サイロス誠
6
- #Version:: 2.1.9
6
+ #Version:: 2.1.11
7
7
  #Copyright:: 2007-2010 Cyross Makoto
8
8
  #License:: LGPL2.1
9
9
  #
@@ -63,7 +63,7 @@ Thread.abort_on_exception = true
63
63
 
64
64
  #==Miyako基幹モジュール
65
65
  module Miyako
66
- VERSION = "2.1.9"
66
+ VERSION = "2.1.11"
67
67
 
68
68
  #===アプリケーション実行中に演奏する音楽のサンプリングレートを指定する
69
69
  #単位はHz(周波数)
Binary file
@@ -0,0 +1,67 @@
1
+ #encoding: utf-8
2
+ #Drawerクラスサンプル
3
+ #画面に星を表示させる
4
+ #2010.05.01 Cyross Makoto
5
+
6
+ require 'miyako'
7
+ require 'Miyako/EXT/drawer'
8
+
9
+ include Miyako
10
+
11
+ RadianBase = 0.4 * Math::PI # inner point (radian of 72deg)
12
+ RadianOffset = 0.2 * Math::PI # inner point (radian of 36deg)
13
+ W = 7
14
+ H = 5
15
+ R = 32
16
+
17
+ def base_line(sprite)
18
+ end
19
+
20
+ def star_points(r, r2=r*0.4, dx=0, dy=0, rad=0.0, scale=1.0)
21
+ (0...5).to_a.inject([]){|ary, n|
22
+ rad1 = RadianBase * n + Math::PI + rad
23
+ rad2 = rad1 + RadianOffset
24
+ ary.push(Point.new(dx+(Math.sin(rad1)*r*scale).to_i, dy+(Math.cos(rad1)*r*scale).to_i),
25
+ Point.new(dx+(Math.sin(rad2)*r2*scale).to_i, dy+(Math.cos(rad2)*r2*scale).to_i))
26
+ ary
27
+ }
28
+ end
29
+
30
+ def point_to_s(point)
31
+ sprintf("[%4d,%4d]", point[0], point[1])
32
+ end
33
+
34
+ def points_to_s(points)
35
+ points.map{|pt| point_to_s(pt)}.join("")
36
+ end
37
+
38
+ def multi_star_points(num, r, r2=r*0.4, dx=0, dy=0, rad=0.0, scale=1.0)
39
+ num.times.to_a.map{|n| star_points(r, r2, dx, dy, rad + (n.to_f/num.to_f * 2 * Math::PI), scale) }
40
+ end
41
+
42
+ # axis line
43
+ axis = [Drawer.new(:method=>:line, :rect=>[320,0,1,480], :color=>:white), # y-axis
44
+ Drawer.new(:method=>:line, :rect=>[0,240,640,1], :color=>:white)] # x-axis
45
+
46
+ # stars
47
+ stars = H.times.to_a.map{|y|
48
+ W.times.to_a.map{|x|
49
+ tmp = multi_star_points(8, R, R*0.4, x*R*3+R, y*R*3+R+16).map{|points|
50
+ Drawer.new(:method=>:polygon,
51
+ :points=>points,
52
+ :color=>[255,255,255,128],
53
+ :fill=>true)
54
+ }
55
+ SpriteAnimation.new(:sprites=>tmp, :wait=>0.1)
56
+ }
57
+ }
58
+
59
+ Sprite[:axis] = axis
60
+ Sprite[:stars] = stars
61
+
62
+ Animation[:stars] = stars
63
+ stars.start
64
+
65
+ Miyako.main_loop do
66
+ break if Input.quit_or_escape?
67
+ end