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
@@ -35,7 +35,9 @@ module Miyako
35
35
  @ray = parameter[:ray] ||= 0
36
36
  @edge = parameter[:edge] ||= nil
37
37
  @align = parameter[:align] ||= :left
38
+ @valign = parameter[:valign] ||= :middle
38
39
  @lines = parameter[:lines] ||= 2
40
+ @vertexes = parameter[:vertexes] ||= []
39
41
  end
40
42
 
41
43
  @@shape_executer = Shape.new
@@ -44,6 +46,7 @@ module Miyako
44
46
  #_param_:: 設定パラメータ。ハッシュ形式。
45
47
  #(:font => 描画するフォントのインスタンス(デフォルトはFont.sans_serif),
46
48
  #(:align => 複数行描画するときの文字列のアライン(:left,:center,:rightの三種。デフォルトは:left))
49
+ #(:valign => 行中の小さい文字を描画するときの縦の位置(:top,:middle,:bottomの三種。デフォルトは:middle))
47
50
  #_&block_:: 描画するテキスト(Yuki形式)
48
51
  #返却値:: テキストを描画したスプライト
49
52
  def Shape.text(param, &block)
@@ -60,6 +63,7 @@ module Miyako
60
63
  #(:font => 描画するフォントのインスタンス(デフォルトはFont.sans_serif),
61
64
  #(:align => 複数行描画するときの文字列のアライン(:left,:center,:rightの三種。デフォルトは:left),
62
65
  #(:size => 描画するサイズ(ピクセル単位、Size構造体のインスタンス、デフォルトは[100,100]))
66
+ #(:valign => 行中の小さい文字を描画するときの縦の位置(:top,:middle,:bottomの三種。デフォルトは:middle))
63
67
  #(:lines => 描画する行数(デフォルトは2))
64
68
  #_&block_:: 描画するテキスト(Yuki形式)
65
69
  #返却値:: テキストを描画したスプライト
@@ -108,24 +112,45 @@ module Miyako
108
112
  @@shape_executer.ellipse(param)
109
113
  end
110
114
 
115
+ #===多角形を描画する
116
+ #_param_:: 設定パラメータ。ハッシュ形式。
117
+ #:vertexes => 頂点リスト。[x,y]形式の配列の配列,
118
+ #:color => 円の色[r,g,b(,a)]、デフォルトはColor[:white],
119
+ #返却値:: 描画したスプライト
120
+ def Shape.polygon(param)
121
+ @@shape_executer.polygon(param)
122
+ end
123
+
111
124
  def create_text(param, text_block) #:nodoc:
112
125
  init_parameter(param)
113
126
  text_block = lambda{ @text } if @text
114
127
  org_size = @font.size
115
128
  org_color = @font.color
116
129
  @margins = []
130
+ @heights = []
117
131
  area_size = calc(text_block)
118
- @sprite = Sprite.new({:size => area_size, :type => :alpha_channel, :is_fill => true})
132
+ @sprite = Sprite.new({size: area_size, type: :ac})
133
+ Drawing.fill(@sprite, [0, 0, 0])
134
+ Bitmap.ck_to_ac!(@sprite, [0, 0, 0])
119
135
  case @align
120
136
  when :left
121
- @margins = @margins.map{|v| 0 }
137
+ @margins = @margins.map{|v| 0 }
122
138
  when :center
123
- @margins = @margins.map{|v| (area_size.w - v) >> 1 }
139
+ @margins = @margins.map{|v| (area_size.w - v) >> 1 }
124
140
  when :right
125
- @margins = @margins.map{|v| area_size.w - v }
141
+ @margins = @margins.map{|v| area_size.w - v }
126
142
  end
127
143
  @lines = @margins.length
128
- @locate = Point.new(@margins.shift, 0)
144
+ vmargin = 0
145
+ case @valign
146
+ when :top
147
+ vmargin = 0
148
+ when :middle
149
+ vmargin = (area_size.h - @heights.inject(:+)) >> 1
150
+ when :bottom
151
+ vmargin = area_size.h - @heights.inject(:+)
152
+ end
153
+ @locate = Point.new(@margins.shift, vmargin)
129
154
  text instance_eval(&text_block)
130
155
  @font.size = org_size
131
156
  @font.color = org_color
@@ -136,11 +161,18 @@ module Miyako
136
161
  init_parameter(param)
137
162
  org_size = @font.size
138
163
  org_color = @font.color
164
+ olines = @lines
139
165
  # calc font size
140
166
  @font.size = @size[1] / @lines
141
167
  # calc font size incldue line_height
142
168
  @font.size = @font.size * @font.size / @font.line_height
143
169
  set_font_size_inner(text_block)
170
+ # over lines?
171
+ if @lines > olines
172
+ @font.size = @size[1] / @lines
173
+ @font.size = @font.size * @font.size / @font.line_height
174
+ set_font_size_inner(text_block)
175
+ end
144
176
  # over width?
145
177
  if @img_size.w > @size[0]
146
178
  @font.size = @font.size * @size[0] / @img_size.w
@@ -148,14 +180,25 @@ module Miyako
148
180
  end
149
181
  case @align
150
182
  when :left
151
- @margins = @margins.map{|v| 0 }
183
+ @margins = @margins.map{|v| 0 }
152
184
  when :center
153
- @margins = @margins.map{|v| (@size.w - v) / 2 }
185
+ @margins = @margins.map{|v| (@size[0] - v) / 2 }
154
186
  when :right
155
- @margins = @margins.map{|v| @size.w - v }
187
+ @margins = @margins.map{|v| @size[0] - v }
156
188
  end
157
- @sprite = Sprite.new({:size => @size, :type => :alpha_channel, :is_fill => true})
158
- @locate = Point.new(@margins.shift, 0)
189
+ vmargin = 0
190
+ case @valign
191
+ when :top
192
+ vmargin = 0
193
+ when :middle
194
+ vmargin = (@size[1] - @heights.inject(:+)) >> 1
195
+ when :bottom
196
+ vmargin = @size[1] - @heights.inject(:+)
197
+ end
198
+ @sprite = Sprite.new({size: @size, type: :ac})
199
+ Drawing.fill(@sprite, [0, 0, 0])
200
+ Bitmap.ck_to_ac!(@sprite, [0, 0, 0])
201
+ @locate = Point.new(@margins.shift, vmargin)
159
202
  text instance_eval(&text_block)
160
203
  @font.size = org_size
161
204
  @font.color = org_color
@@ -165,6 +208,8 @@ module Miyako
165
208
  def set_font_size_inner(text_block) #:nodoc:
166
209
  @max_height = @font.line_height
167
210
  @margins = []
211
+ @heights = []
212
+ @lines = 1
168
213
  tcalc(text_block)
169
214
  end
170
215
 
@@ -172,6 +217,7 @@ module Miyako
172
217
  @locate = Point.new(0, 0)
173
218
  @img_size = Size.new(0, 0)
174
219
  @max_height = @font.line_height
220
+ @lines = 1
175
221
  @calc_mode = true
176
222
  text instance_eval(&block)
177
223
  @calc_mode = false
@@ -179,6 +225,7 @@ module Miyako
179
225
  @margins << @locate.x
180
226
  @img_size.w = [@locate.x, @img_size.w].max
181
227
  @img_size.h += @max_height
228
+ @heights << @max_height
182
229
  end
183
230
  return @img_size
184
231
  end
@@ -189,7 +236,11 @@ module Miyako
189
236
  @calc_mode = true
190
237
  text instance_eval(&block)
191
238
  @calc_mode = false
192
- @margins << @locate.x if @locate.x != 0
239
+ if @locate.x != 0
240
+ @margins << @locate.x if @locate.x != 0
241
+ @heights << @max_height
242
+ end
243
+ @img_size.w = [@locate.x, @img_size.w].max
193
244
  end
194
245
 
195
246
  #===Shape.textメソッドのブロック内で使用する、文字描画指示メソッド
@@ -223,7 +274,7 @@ module Miyako
223
274
  def size(size, &block)
224
275
  @font.size_during(size){
225
276
  @max_height = [@max_height, @font.line_height].max
226
- size_inner(@font.margin_height(:middle, @max_height)){ text instance_eval(&block) }
277
+ size_inner(@font.margin_height(@valign, @max_height), &block)
227
278
  }
228
279
  return self
229
280
  end
@@ -269,9 +320,11 @@ module Miyako
269
320
  def cr
270
321
  if @calc_mode
271
322
  @margins << @locate.x
323
+ @heights << @max_height
272
324
  @img_size.w = [@locate.x, @img_size.w].max
273
325
  @img_size.h += @max_height
274
326
  @locate.x = 0
327
+ @lines += 1
275
328
  else
276
329
  @locate.x = @margins.shift || 0
277
330
  end
@@ -281,53 +334,58 @@ module Miyako
281
334
 
282
335
  def box(param) #:nodoc:
283
336
  init_parameter(param)
284
- s = Sprite.new({:size => [w, h], :type => :alpha_channel, :is_fill => true})
337
+ s = Sprite.new(size: [w, h], type: :alpha_channel)
285
338
  w = @size[0]
286
339
  h = @size[1]
340
+ Drawing.fill(s, [0, 0, 0])
341
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
287
342
  if @edge
288
343
  width = @edge[:width]
289
- s.bitmap.fill_rect(0, 0, w-1, h-1, Color.to_rgb(@edge[:color]))
290
- s.bitmap.fill_rect(width, width, w-width*2-1, h-width*2-1, Color.to_rgb(@color))
344
+ Drawing.rect(s, [0, 0, w, h], Color.to_rgb(@edge[:color]), true)
345
+ Drawing.rect(s, [width, width, w-width*2-1, h-width*2-1], Color.to_rgb(@color), true)
291
346
  else
292
- s.bitmap.fill_rect(0, 0, w-1, h-1, Color.to_rgb(@color))
347
+ Drawing.rect(s, [0, 0, w, h], Color.to_rgb(@color), true)
293
348
  end
294
349
  return s
295
350
  end
296
351
 
297
352
  def roundbox_basic(s, x, y, w, h, r, c) #:nodoc:
298
353
  color = Color.to_rgb(c)
299
- s.bitmap.draw_aa_filled_circle(r+x, r+y, r, color)
300
- s.bitmap.draw_aa_filled_circle(w-r-x-1, r+y, r, color)
301
- s.bitmap.draw_aa_filled_circle(r+x, h-r-y-1, r, color)
302
- s.bitmap.draw_aa_filled_circle(w-r-x-1, h-r-y-1, r, color)
303
- s.bitmap.fill_rect(x, y+r, w-x*2, h-y*2-r*2, color)
304
- s.bitmap.fill_rect(x+r, y, w-x*2-r*2, h-x*2, color)
354
+ Drawing.circle(s, [r+x, r+y], r, color, true)
355
+ Drawing.circle(s, [w-r-x-1, r+y], r, color, true)
356
+ Drawing.circle(s, [r+x, h-r-y-1], r, color, true)
357
+ Drawing.circle(s, [w-r-x-1, h-r-y-1], r, color, true)
358
+ Drawing.rect(s, [x, y+r, w-x*2, h-y*2-r*2], color, true)
359
+ Drawing.rect(s, [x+r, y, w-x*2-r*2, h-x*2], color, true)
305
360
  end
306
361
 
307
362
  def roundbox(param) #:nodoc:
308
363
  init_parameter(param)
309
364
  w = @size[0]
310
365
  h = @size[1]
311
- s = Sprite.new(@size, nil, nil)
312
- s.fill([0, 0, 0, 0])
366
+ s = Sprite.new(size: @size, type: :ac)
367
+ Drawing.fill(s, [0, 0, 0])
368
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
313
369
  if @edge
314
- roundbox_basic(s, 0, 0, w, h, @ray, Color.to_rgb(@edge[:color]))
315
- roundbox_basic(s, @edge[:width], @edge[:width], w, h, @ray, Color.to_rgb(@color))
370
+ roundbox_basic(s, [0, 0, w, h], @ray, Color.to_rgb(@edge[:color]))
371
+ roundbox_basic(s, [@edge[:width], @edge[:width], w, h], @ray, Color.to_rgb(@color))
316
372
  else
317
- roundbox_basic(s, 0, 0, w, h, @ray, Color.to_rgb(@color))
373
+ roundbox_basic(s, [0, 0, w, h], @ray, Color.to_rgb(@color))
318
374
  end
319
375
  return s
320
376
  end
321
377
 
322
378
  def circle(param) #:nodoc:
323
379
  init_parameter(param)
324
- s = Sprite.new({:size => [@ray*2+1, @ray*2+1], :type => :alpha_channel, :is_fill => true})
380
+ s = Sprite.new(size: [@ray*2+1, @ray*2+1], type: :alpha_channel)
381
+ Drawing.fill(s, [0, 0, 0])
382
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
325
383
  if @edge
326
384
  et, ec = sp.get_param(:edge)[0..1]
327
- s.bitmap.draw_aa_filled_circle(@ray, @ray, @ray, Color.to_rgb(@edge[:color]))
328
- s.bitmap.draw_aa_filled_circle(@ray, @ray, @ray-@edge[:width], Color.to_rgb(@color))
385
+ Drawing.circle(s, [@ray, @ray], @ray, Color.to_rgb(@edge[:color]), true)
386
+ Drawing.circle(s, [@ray, @ray], @ray-@edge[:width], Color.to_rgb(@color), true)
329
387
  else
330
- s.bitmap.draw_aa_filled_circle(@ray, @ray, @ray, Color.to_rgb(@color))
388
+ Drawing.circle(s, [@ray, @ray], @ray, Color.to_rgb(@color), true)
331
389
  end
332
390
  return s
333
391
  end
@@ -338,16 +396,36 @@ module Miyako
338
396
  w2 = w * 2 + 1
339
397
  h = @size[1]
340
398
  h2 = h * 2 + 1
341
- s = Sprite.new({:size => [w2, h2], :type => :alpha_channel, :is_fill => true})
399
+ s = Sprite.new(size: [w2, h2], type: :alpha_channel)
400
+ Drawing.fill(s, [0, 0, 0])
401
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
342
402
  if @edge
343
- s.bitmap.drawAAFilledEllipse(w, h, w, h, Color.to_rgb(@edge[:color]))
344
- s.bitmap.drawAAFilledEllipse(w, h, w-@edge[:width], h-@edge[:width], Color.to_rgb(@color))
403
+ Drawing.ellipse(s, [w, h], w, h, Color.to_rgb(@edge[:color]), true)
404
+ Drawing.ellipse(s, [w, h], w-@edge[:width], h-@edge[:width], Color.to_rgb(@color), true)
345
405
  else
346
- s.bitmap.drawAAFilledEllipse(w, h, w, h, Color.to_rgb(@color))
406
+ Drawing.ellipse(s, [w, h], w, h, Color.to_rgb(@color), true)
347
407
  end
348
408
  return s
349
409
  end
350
410
 
411
+ def polygon(param) #:nodoc:
412
+ init_parameter(param)
413
+
414
+ min_x, max_x = @vertexes.map{|v| v[0]}.minmax
415
+ min_y, max_y = @vertexes.map{|v| v[1]}.minmax
416
+
417
+ w = max_x - min_x
418
+ h = max_y - min_y
419
+
420
+ @vertexes = @vertexes.map{|v| [v[0]-min_x, v[1]-min_y]}
421
+
422
+ s = Sprite.new(size: [w, h], type: :alpha_channel)
423
+ Drawing.fill(s, [0, 0, 0])
424
+ Bitmap.ck_to_ac!(s, [0, 0, 0])
425
+ Drawing.polygon(s, @vertexes, Color.to_rgb(@color), true)
426
+ return s
427
+ end
428
+
351
429
  private :roundbox_basic
352
430
  end
353
431
  end
@@ -355,8 +433,11 @@ end
355
433
  class String
356
434
  #===文字列から、その文字を描画したスプライトを作成する
357
435
  #自分自身が持つ文字列をShape.textメソッドを使用して画像を作成する
436
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
358
437
  #_data_:: 描画するフォント(Fontクラスのインスタンス)
359
438
  def to_sprite(data)
360
- return Miyako::Shape.text({:text => self, :font => data})
439
+ sprite = Miyako::Shape.text({:text => self, :font => data})
440
+ yield sprite if block_given?
441
+ return sprite
361
442
  end
362
443
  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
@@ -30,6 +30,7 @@ module Miyako
30
30
  include SingleEnumerable
31
31
  extend Forwardable
32
32
 
33
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
33
34
  attr_reader :tr_color #カラーキーが有向になっている場合のRGB値。[R,G,B]の配列(各要素は0~255の整数)
34
35
  attr_reader :type #画像の透明度・透過タイプを取得する(詳細はSprite.newメソッドを参照)
35
36
 
@@ -43,6 +44,7 @@ module Miyako
43
44
  @w = 0
44
45
  @h = 0
45
46
  @draw_list = nil
47
+ @visible = true
46
48
  end
47
49
 
48
50
  private :setup
@@ -59,15 +61,24 @@ module Miyako
59
61
  #<引数の内容>
60
62
  #* 1.画像の元データ(括弧内は省略形)。以下の3種類のどれかを必ず指定する。
61
63
  # * 画像ファイル(ファイル名)から生成。 (書式):filename(:file)=>画像ファイル名 (例):file=>"image.png"
62
- # * 画像サイズ(2要素の整数の配列もしくはSize構造体)から生成。 (書式1):size=>2要素の配列((例):size=>[100,100]) (書式2):size=>Size構造体((例):size=>Size.new(100,100))
63
- # * SDL::Surfaceクラスのインスタンスから生成。 (書式):bitmap(:bmp)=>SDL::Surfaceクラスのインスタンス((例):bmp=>@surface)
64
- # * SpriteUnit構造体のインスタンスから生成(ビットマップ以外のUnitの値は引き継がれる。しかし、snapの親子関係は引き継がれない)
64
+ # * 画像サイズ(2要素の整数の配列もしくはSize構造体)から生成。
65
+ #  (書式1):size=>2要素の配列((例):size=>[100,100])
66
+ #  (書式2):size=>Size構造体((例):size=>Size.new(100,100))
67
+ # * SDL::Surfaceクラスのインスタンスから生成。 
68
+ # (書式):bitmap(:bmp)=>SDL::Surfaceクラスのインスタンス((例):bmp=>@surface)
69
+ # * SpriteUnit構造体のインスタンスから生成(ビットマップ以外のUnitの値は引き継がれる。
70
+ # しかし、snapの親子関係は引き継がれない)。
65
71
  # (書式):unit=>SpriteUnit構造体のインスタンス((例):unit=>@spr.to_unit)
66
72
  #* 2.透過設定(括弧内は省略形)。以下の3種類のどれかを必ず指定する。
67
73
  # * カラーキーによる透過は行わない方式(デフォルトの方式) (書式):type=>:alpha_surface(:as)
68
74
  # * カラーキーの指定。 (書式):type=>:color_key(:ck) カラーキー指定の方法は以下のとおり
69
- # * 透明色にするピクセルの位置(2要素の整数の配列、Point構造体) (書式1):point=>2要素の配列((例):type=>:ck, :point=>[20,20]) (書式2):point=>Point構造体((例):type=>:ck, :point=>Point.new(20,20))
70
- # * 色を直接指定 (書式):tr_color=>色情報(Color.to_rgbメソッドで生成できるパラメータ)((1):type=>:ck, :tr_color=>[255,0,255] # 紫色を透明色に (例2):type=>:ck, :tr_color=>:red # 赤色を透明色に)
75
+ # * 透明色にするピクセルの位置(2要素の整数の配列、Point構造体)
76
+ #  (書式1):point=>2要素の配列((例):type=>:ck, :point=>[20,20])
77
+ #  (書式2):point=>Point構造体((例):type=>:ck, :point=>Point.new(20,20))
78
+ # * 色を直接指定
79
+ #  (書式):tr_color=>色情報(Color.to_rgbメソッドで生成できるパラメータ)
80
+ # ((例1):type=>:ck, :tr_color=>[255,0,255] # 紫色を透明色に
81
+ #  (例2):type=>:ck, :tr_color=>:red # 赤色を透明色に)
71
82
  # * デフォルト:画像の[0,0]の位置にあるピクセルの色
72
83
  #* 3. αチャネル付き画像を使用(設定変更不可) (書式):type=>:alpha_channel(:ac)
73
84
  def initialize(param)
@@ -110,7 +121,7 @@ module Miyako
110
121
  bitmap = Bitmap.create(bitmap.w, bitmap.h, SDL::HWSURFACE)
111
122
  bitmap = bitmap.display_format_alpha
112
123
  nunit = SpriteUnitFactory.create(:bitmap => bitmap)
113
- Bitmap.ck_to_ac!(tunit, nunit, @tr_color)
124
+ Bitmap.ck_to_ac(tunit, nunit, @tr_color)
114
125
  self.bitmap = bitmap
115
126
  @unit.bitmap.fill_rect(0,0,@unit.bitmap.w,@unit.bitmap.h,[0, 0, 0, 0]) if param[:is_fill]
116
127
  tbitmap = nil
@@ -121,7 +132,7 @@ module Miyako
121
132
  bitmap = Bitmap.create(bitmap.w, bitmap.h, SDL::HWSURFACE)
122
133
  bitmap = bitmap.display_format_alpha
123
134
  nunit = SpriteUnitFactory.create(:bitmap => bitmap)
124
- Bitmap.normal_to_ac!(tunit, nunit)
135
+ Bitmap.normal_to_ac(tunit, nunit)
125
136
  self.bitmap = bitmap
126
137
  @unit.bitmap.fill_rect(0,0,@unit.bitmap.w,@unit.bitmap.h,[0, 0, 0, 0]) if param[:is_fill]
127
138
  tbitmap = nil
@@ -135,8 +146,6 @@ module Miyako
135
146
 
136
147
  if param.has_key?(:unit)
137
148
  SpriteUnitFactory.apply(@unit, :ow=>param[:unit].ow, :oh=>param[:unit].oh,
138
- :angle => param[:unit].angle,
139
- :xscale => param[:unit].xscale, :yscale => param[:unit].yscale,
140
149
  :cx => param[:unit].cx, :cy => param[:unit].cy)
141
150
  self.move_to(param[:unit].x, param[:unit].y)
142
151
  end
@@ -183,79 +192,42 @@ module Miyako
183
192
 
184
193
  #===画像の表示開始位置(X座標)を指定する
185
194
  #oxを指定すると、表示の左上位置が変更される。
195
+ #値が画像の幅の範囲外(値がマイナス、画像の幅を超える値)のときは例外が発生する
186
196
  #_v_:: 表示開始位置。整数で指定
187
197
  def ox=(v)
198
+ raise MiyakoError, "Illegal ox parameter! : #{v}" if (v < 0 || (v+@unit.ow) > @w)
188
199
  @unit.ox = v
189
200
  end
190
201
 
191
202
  #===画像の表示開始位置(Y座標)を指定する
192
203
  #oyを指定すると、表示の左上位置が変更される。
204
+ #値が画像の高さの範囲外(値がマイナス、画像の高さを超える値)のときは例外が発生する
193
205
  #_v_:: 表示開始位置。整数で指定
194
206
  def oy=(v)
207
+ raise MiyakoError, "Illegal oy parameter! : #{v}" if (v < 0 || (v+@unit.oh) > @h)
195
208
  @unit.oy = v
196
209
  end
197
210
 
198
211
  #===画像の表示幅を指定する
199
212
  #owを指定すると、横方向の一部のみ表示される。
213
+ #値が画像の幅の範囲外(値がマイナス、画像の幅を超える値)のときは例外が発生する
200
214
  #_v_:: 表示幅。整数で指定
201
215
  def ow=(v)
216
+ raise MiyakoError, "Illegal ox parameter! : #{v}" if (v < 0 || (@unit.ox+v) > @w)
202
217
  @unit.ow = v
203
218
  set_layout_size(v, @unit.oh)
204
219
  end
205
220
 
206
221
  #===画像の表示高を指定する
207
222
  #ohを指定すると、縦方向の一部のみ表示される。
223
+ #値が画像の高さの範囲外(値がマイナス、画像の高さを超える値)のときは例外が発生する
208
224
  #_v_:: 表示高。整数で指定
209
225
  def oh=(v)
226
+ raise MiyakoError, "Illegal ox parameter! : #{v}" if (v < 0 || (@unit.oy+v) > @h)
210
227
  @unit.oh = v
211
228
  set_layout_size(@unit.ow, v)
212
229
  end
213
230
 
214
- #===画像の回転角度を取得する
215
- #値はラジアン。範囲は0<=angle<PI*2
216
- #値が正の時は右回りに回転する。
217
- #返却値:: 回転角度。ラジアン(実数)
218
- def angle
219
- return @unit.angle
220
- end
221
-
222
- #===画像の回転角度を設定する
223
- #値はラジアン。範囲は0<=angle<PI*2
224
- #値が正の時は右回りに回転する。
225
- #_radian_:: 回転角度。ラジアン(実数)を指定
226
- def angle=(radian)
227
- raise MiyakoError, "Illegal radian! : #{radian}" if (radian < 0.0 || radian > Math::PI * 2)
228
- @unit.angle = radian
229
- end
230
-
231
- #===画像の拡大縮小度を取得する
232
- #x方向の拡大縮小度を取得する
233
- #返却値:: 拡大縮小度。1.0で等倍。-1.0でミラー反転
234
- def xscale
235
- return @unit.xscale
236
- end
237
-
238
- #===画像の拡大縮小度を設定する
239
- #x方向の拡大縮小度を設定する
240
- #_scale_:: 拡大縮小度。1.0で等倍。-1.0でミラー反転
241
- def xscale=(scale)
242
- @unit.xscale = scale
243
- end
244
-
245
- #===画像の拡大縮小度を取得する
246
- #y方向の拡大縮小度を取得する
247
- #返却値:: 拡大縮小度。1.0で等倍。-1.0でミラー反転
248
- def yscale
249
- return @unit.yscale
250
- end
251
-
252
- #===画像の拡大縮小度を設定する
253
- #y方向の拡大縮小度を設定する
254
- #_scale_:: 拡大縮小度。1.0で等倍。-1.0でミラー反転
255
- def yscale=(scale)
256
- @unit.yscale = scale
257
- end
258
-
259
231
  #===画像の回転・拡大・縮小の中心座標を取得する
260
232
  #x方向の中心座標を取得する
261
233
  #返却値:: 中心座標。
@@ -285,8 +257,8 @@ module Miyako
285
257
  end
286
258
 
287
259
  #===画像の表示矩形を取得する
288
- #画像が表示されているときの矩形を取得する。矩形は、[x,y,ow,oh]で取得する。
289
- #返却値:: 生成された矩形
260
+ #画像が表示されているときの矩形(Rect構造体)を取得する
261
+ #返却値:: 生成された矩形(Rect構造体インスタンス)
290
262
  def rect
291
263
  return Rect.new(@unit.x, @unit.y, @unit.ow, @unit.oh)
292
264
  end
@@ -317,22 +289,464 @@ module Miyako
317
289
  end
318
290
 
319
291
  #===インスタンスをSpriteUnit構造体に変換して取得する
292
+ #得られるインスタンスは複写していないので、インスタンスの値を調整するには、dupメソッドで複製する必要がある
320
293
  #返却値:: SpriteUnit化したスプライト
321
294
  def to_unit
322
- return @unit.dup
295
+ return @unit
323
296
  end
324
297
 
325
298
  #===インスタンスをスプライト化して返す
326
299
  #インスタンスの複製を行う(画像インスタンスも複製)
300
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
327
301
  #注意事項:
328
302
  #1.複製のため、呼び出していくとメモリ使用量が著しく上がる
329
303
  #2.レイアウト情報がリセットされる(snapの親子関係が解消される)
330
- #返却値:: 自分自身を返す
304
+ #返却値:: 生成したインスタンスを返す
331
305
  def to_sprite
332
306
  unit = @unit.dup
333
307
  unit.bitmap = Bitmap.create(unit.bitmap.w, unit.bitmap.h)
334
- Bitmap.blit_aa!(@unit, unit, 0, 0)
335
- return Sprite.new(:unit=>unit, :type=>:ac)
308
+ sprite = Sprite.new(size: [unit.bitmap.w, unit.bitmap.h], type: :ac)
309
+ Drawing.fill(sprite, [0,0,0])
310
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
311
+ Bitmap.blit_aa(self, sprite, 0, 0)
312
+ yield sprite if block_given?
313
+ return sprite
314
+ end
315
+
316
+ #===画像の内容を破壊的に消去する
317
+ #インスタンスの複製を行う(画像インスタンスも複製)
318
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
319
+ #注意事項:
320
+ #1.複製のため、呼び出していくとメモリ使用量が著しく上がる
321
+ #2.レイアウト情報がリセットされる(snapの親子関係が解消される)
322
+ #返却値:: 自分自身を返す
323
+ def clear!
324
+ Drawing.fill(self, [0,0,0])
325
+ Bitmap.ck_to_ac!(self, [0,0,0])
326
+ return self
327
+ end
328
+
329
+ #===インスタンスの内容を別のインスタンスに描画する
330
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
331
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
332
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
333
+ #ブロックの引数は、|転送元のSpriteUnit,転送先のSpriteUnit|となる。
334
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
335
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
336
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
337
+ #返却値:: 自分自身を返す
338
+ def Sprite.render_to(src, dst)
339
+ end
340
+
341
+ #===インスタンスの内容を画面に描画する
342
+ #現在の画像を、現在の状態で描画するよう指示する
343
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
344
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
345
+ #ブロックの引数は、|インスタンスのSpriteUnit, 画面のSpriteUnit|となる。
346
+ #visibleメソッドの値がfalseのときは描画されない。
347
+ #返却値:: 自分自身を返す
348
+ def render
349
+ end
350
+
351
+ #===インスタンスの内容を別のインスタンスに描画する
352
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
353
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
354
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
355
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
356
+ #ブロックの引数は、|インスタンスのSpriteUnit,転送先のSpriteUnit|となる。
357
+ #visibleメソッドの値がfalseのときは描画されない。
358
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
359
+ #返却値:: 自分自身を返す
360
+ def render_to(dst)
361
+ end
362
+
363
+ #===インスタンスの内容を画面に描画する(回転/拡大/縮小/鏡像付き)
364
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。回転の中心はsrc側(ox,oy)を起点に、src側(cx,cy)が中心になるように設定する。
365
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、画面側SpriteUnitの(cx,cy)が中心になるように設定にする。
366
+ #回転角度が正だと右回り、負だと左回りに回転する
367
+ #変形の度合いは、src側SpriteUnitのxscale, yscaleを使用する(ともに実数で指定する)。それぞれ、x方向、y方向の度合いとなる
368
+ #度合いが scale > 1.0 だと拡大、 0 < scale < 1.0 だと縮小、scale < 0.0 負だと鏡像の拡大・縮小になる(scale == -1.0 のときはミラー反転になる)
369
+ #また、変形元の幅・高さのいずれかが32768以上の時は回転・転送を行わない
370
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
371
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
372
+ #ブロックの引数は、|インスタンスのSpriteUnit,画面のSpriteUnit|となる。
373
+ #visibleメソッドの値がfalseのときは描画されない。
374
+ #_radian_:: 回転角度。単位はラジアン。値の範囲は0<=radian<2pi
375
+ #_xscale_:: 拡大率(x方向)
376
+ #_yscale_:: 拡大率(y方向)
377
+ #返却値:: 自分自身を返す
378
+ def render_transform(radian, xscale, yscale)
379
+ end
380
+
381
+ #===インスタンスの内容を画面に描画する(回転/拡大/縮小/鏡像付き)
382
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。回転の中心はsrc側(ox,oy)を起点に、src側(cx,cy)が中心になるように設定する。
383
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、画面側SpriteUnitの(cx,cy)が中心になるように設定にする。
384
+ #回転角度が正だと右回り、負だと左回りに回転する
385
+ #変形の度合いは、src側SpriteUnitのxscale, yscaleを使用する(ともに実数で指定する)。それぞれ、x方向、y方向の度合いとなる
386
+ #度合いが scale > 1.0 だと拡大、 0 < scale < 1.0 だと縮小、scale < 0.0 負だと鏡像の拡大・縮小になる(scale == -1.0 のときはミラー反転になる)
387
+ #また、変形元の幅・高さのいずれかが32768以上の時は回転・転送を行わない
388
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
389
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
390
+ #ブロックの引数は、|インスタンスのSpriteUnit,転送先のSpriteUnit|となる。
391
+ #visibleメソッドの値がfalseのときは描画されない。
392
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
393
+ #_radian_:: 回転角度。単位はラジアン。値の範囲は0<=radian<2pi
394
+ #_xscale_:: 拡大率(x方向)
395
+ #_yscale_:: 拡大率(y方向)
396
+ #返却値:: 自分自身を返す
397
+ def render_to_transform(dst, radian, xscale, yscale)
398
+ end
399
+
400
+ #===2つの画像のandを取り、別の画像へ転送する
401
+ #重ね合わせの式は、"src and self -> dst"で表される。自分自身と転送先画像は同じ大きさとなる。
402
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
403
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
404
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
405
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
406
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
407
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
408
+ #返却値:: 変更後の新しい画像インスタンス
409
+ def and(src, &block)
410
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
411
+ self.render_to(dst)
412
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_and(src, dst, &block)
413
+ return dst
414
+ end
415
+
416
+ #===2つの画像のandを破壊的に行う
417
+ #重ね合わせの式は、"src and self -> self"で表される。
418
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
419
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
420
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
421
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
422
+ #ブロックの引数は、|SpriteUnit|となる。
423
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
424
+ #返却値:: 変更後の自分自身を返す
425
+ def and!(src, &block)
426
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_and(src, self, &block)
427
+ return self
428
+ end
429
+
430
+ #===2つの画像のorを取り、別の画像へ転送する
431
+ #重ね合わせの式は、"src or self -> dst"で表される。自分自身と転送先画像は同じ大きさとなる。
432
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
433
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
434
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
435
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
436
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
437
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
438
+ #返却値:: 変更後の新しい画像インスタンス
439
+ def or(src, &block)
440
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
441
+ self.render_to(dst)
442
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_or(src, dst, &block)
443
+ return dst
444
+ end
445
+
446
+ #===2つの画像のorを破壊的に行う
447
+ #重ね合わせの式は、"src or self -> self"で表される。
448
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
449
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
450
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
451
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
452
+ #ブロックの引数は、|SpriteUnit|となる。
453
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
454
+ #返却値:: 変更後の自分自身を返す
455
+ def or!(src, &block)
456
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_or(src, self, &block)
457
+ return self
458
+ end
459
+
460
+ #===2つの画像のxorを取り、別の画像へ転送する
461
+ #重ね合わせの式は、"src xor self -> dst"で表される。自分自身と転送先画像は同じ大きさとなる。
462
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
463
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
464
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
465
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
466
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
467
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
468
+ #返却値:: 変更後の新しい画像インスタンス
469
+ def xor(src, &block)
470
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
471
+ self.render_to(dst)
472
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_xor(src, dst, &block)
473
+ return dst
474
+ end
475
+
476
+ #===2つの画像のxorを破壊的に行う
477
+ #重ね合わせの式は、"src xor self -> self"で表される。
478
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
479
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
480
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
481
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
482
+ #ブロックの引数は、|SpriteUnit|となる。
483
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
484
+ #返却値:: 変更後の自分自身を返す
485
+ def xor!(src, &block)
486
+ raise MiyakoError, "illegal range!" unless Bitmap.blit_xor(src, self, &block)
487
+ return self
488
+ end
489
+
490
+ #===画像のαチャネルの値を一定の割合で変化させて転送する
491
+ #degreeの値が1.0に近づけば近づくほど透明に近づき、
492
+ #degreeの値が-1.0に近づけば近づくほど不透明に近づく(値が-1.0のときは完全不透明、値が0.0のときは変化なし、1.0のときは完全に透明になる)
493
+ #但し、元々αの値がゼロの時は変化しない
494
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
495
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
496
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
497
+ #_degree_:: 減少率。-1.0<=degree<=1.0までの実数
498
+ #返却値:: 変更後の新しい画像インスタンス
499
+ def dec_alpha(degree, &block)
500
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
501
+ raise MiyakoError, "illegal range!" unless Bitmap.dec_alpha(self, dst, degree, &block)
502
+ return dst
503
+ end
504
+
505
+ #===画像のαチャネルの値を一定の割合で破壊的に変化させる
506
+ #degreeの値が1.0に近づけば近づくほど透明に近づき、
507
+ #degreeの値が-1.0に近づけば近づくほど不透明に近づく
508
+ #(値が-1.0のときは完全不透明、値が0.0のときは変化なし、1.0のときは完全に透明になる)
509
+ #但し、元々αの値がゼロの時は変化しない
510
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
511
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
512
+ #ブロックの引数は、|SpriteUnit|となる。
513
+ #_degree_:: 減少率。-1.0<=degree<=1.0までの実数
514
+ #返却値:: 変更後の自分自身を返す
515
+ def dec_alpha!(degree, &block)
516
+ raise MiyakoError, "illegal range!" unless Bitmap.dec_alpha!(self, degree, &block)
517
+ return self
518
+ end
519
+
520
+ #===画像の色を一定の割合で黒に近づける(ブラックアウト)
521
+ #赤・青・緑・αの各要素を一定の割合で下げ、黒色に近づける。
522
+ #degreeの値が1.0に近づけば近づくほど黒色に近づく(値が0.0のときは変化なし、1.0のときは真っ黒になる)
523
+ #αの値が0のときは変わらないことに注意!
524
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
525
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
526
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
527
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
528
+ #返却値:: 変更後の新しい画像インスタンス
529
+ def black_out(degree, &block)
530
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
531
+ raise MiyakoError, "illegal range!" unless Bitmap.black_out(self, dst, degree, &block)
532
+ return dst
533
+ end
534
+
535
+ #===画像の色を一定の割合で黒に近づける(ブラックアウト)
536
+ #赤・青・緑・αの各要素を一定の割合で下げ、黒色に近づける。
537
+ #degreeの値が1.0に近づけば近づくほど黒色に近づく(値が0.0のときは変化なし、1.0のときは真っ黒になる)
538
+ #αの値が0のときは変わらないことに注意!
539
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
540
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
541
+ #ブロックの引数は、|SpriteUnit|となる。
542
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
543
+ #返却値:: 変更後の自分自身を返す
544
+ def black_out!(degree, &block)
545
+ raise MiyakoError, "illegal range!" unless Bitmap.black_out!(self, degree, &block)
546
+ return self
547
+ end
548
+
549
+ #===画像の色を一定の割合で白に近づける(ホワイトアウト)
550
+ #赤・青・緑・αの各要素を一定の割合で上げ、白色に近づける。
551
+ #degreeの値が1.0に近づけば近づくほど白色に近づく(値が0.0のときは変化なし、1.0のときは真っ白になる)
552
+ #αの値が0のときは変わらないことに注意!
553
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
554
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
555
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
556
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
557
+ #返却値:: 変更後の新しい画像インスタンス
558
+ def white_out(degree, &block)
559
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
560
+ raise MiyakoError, "illegal range!" unless Bitmap.white_out(self, dst, degree, &block)
561
+ return dst
562
+ end
563
+
564
+ #===画像の色を一定の割合で白に近づける(ホワイトアウト)
565
+ #赤・青・緑・αの各要素を一定の割合で上げ、白色に近づける。
566
+ #degreeの値が1.0に近づけば近づくほど白色に近づく(値が0.0のときは変化なし、1.0のときは真っ白になる)
567
+ #αの値が0のときは変わらないことに注意!
568
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
569
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
570
+ #ブロックの引数は、|SpriteUnit|となる。
571
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
572
+ #返却値:: 変更後の自分自身を返す
573
+ def white_out!(degree, &block)
574
+ raise MiyakoError, "illegal range!" unless Bitmap.white_out!(self, degree, &block)
575
+ return self
576
+ end
577
+
578
+ #===画像のRGB値を反転させる
579
+ #αチャネルの値は変更しない
580
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
581
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
582
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
583
+ #返却値:: 変更後の新しい画像インスタンス
584
+ def inverse(&block)
585
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
586
+ raise MiyakoError, "illegal range!" unless Bitmap.inverse(self, dst, &block)
587
+ return dst
588
+ end
589
+
590
+ #===画像のRGB値を反転させる
591
+ #αチャネルの値は変更しない
592
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
593
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
594
+ #ブロックの引数は、|SpriteUnit|となる。
595
+ #返却値:: 変更後の自分自身を返す
596
+ def inverse!(&block)
597
+ raise MiyakoError, "illegal range!" unless Bitmap.inverse!(self, &block)
598
+ return self
599
+ end
600
+
601
+ #===2枚の画像の加算合成を行う
602
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
603
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
604
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
605
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
606
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
607
+ #返却値:: 変更後の新しい画像インスタンス
608
+ def additive(src, &block)
609
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
610
+ self.render_to(dst)
611
+ raise MiyakoError, "illegal range!" unless Bitmap.additive(src, dst, &block)
612
+ return dst
613
+ end
614
+
615
+ #===2枚の画像の加算合成を行う
616
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
617
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
618
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
619
+ #ブロックの引数は、|SpriteUnit|となる。
620
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
621
+ #返却値:: 変更後の自分自身を返す
622
+ def additive!(src, &block)
623
+ raise MiyakoError, "illegal range!" unless Bitmap.additive(src, self, &block)
624
+ return self
625
+ end
626
+
627
+ #===2枚の画像の減算合成を行う
628
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
629
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
630
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
631
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
632
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
633
+ #返却値:: 変更後の新しい画像インスタンス
634
+ def subtraction(src, &block)
635
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
636
+ self.render_to(dst)
637
+ raise MiyakoError, "illegal range!" unless Bitmap.subtraction(src, dst, &block)
638
+ return dst
639
+ end
640
+
641
+ #===2枚の画像の減算合成を行う
642
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
643
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
644
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
645
+ #ブロックの引数は、|SpriteUnit|となる。
646
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
647
+ #返却値:: 変更後の自分自身を返す
648
+ def subtraction!(src, &block)
649
+ raise MiyakoError, "illegal range!" unless Bitmap.subtraction(src, self, &block)
650
+ return self
651
+ end
652
+
653
+ #===画像の色相を変更する
654
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
655
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
656
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
657
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
658
+ #返却値:: 変更後の新しい画像インスタンス
659
+ def hue(degree, &block)
660
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
661
+ raise MiyakoError, "illegal range!" unless Bitmap.hue(self, dst, degree, &block)
662
+ return dst
663
+ end
664
+
665
+ #===画像の色相を変更する
666
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
667
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
668
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
669
+ #ブロックの引数は、|SpriteUnit|となる。
670
+ #返却値:: 変更後の画像インスタンス
671
+ #返却値:: 変更後の自分自身を返す
672
+ def hue!(degree, &block)
673
+ puts "start"
674
+ raise MiyakoError, "illegal range!" unless Bitmap.hue!(self, degree, &block)
675
+ puts "finish"
676
+ return self
677
+ end
678
+
679
+ #===画像の彩度を変更する
680
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
681
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
682
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
683
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
684
+ #返却値:: 変更後の新しい画像インスタンス
685
+ def saturation(saturation, &block)
686
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
687
+ raise MiyakoError, "illegal range!" unless Bitmap.saturation(self, dst, saturation, &block)
688
+ return dst
689
+ end
690
+
691
+ #===画像の彩度を変更する
692
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
693
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
694
+ #ブロックの引数は、|SpriteUnit|となる。
695
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
696
+ #返却値:: 変更後の自分自身を返す
697
+ def saturation!(saturation, &block)
698
+ raise MiyakoError, "illegal range!" unless Bitmap.saturation!(self, saturation, &block)
699
+ return self
700
+ end
701
+
702
+ #===画像の明度を変更する
703
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
704
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
705
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
706
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
707
+ #返却値:: 変更後の新しい画像インスタンス
708
+ def value(value, &block)
709
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
710
+ raise MiyakoError, "illegal range!" unless Bitmap.value(self, dst, value, &block)
711
+ return dst
712
+ end
713
+
714
+ #===画像の明度を変更する
715
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
716
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
717
+ #ブロックの引数は、|SpriteUnit|となる。
718
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
719
+ #返却値:: 変更後の画像インスタンス
720
+ def value!(value, &block)
721
+ raise MiyakoError, "illegal range!" unless Bitmap.value!(self, value, &block)
722
+ return self
723
+ end
724
+
725
+ #===画像の色相・彩度・明度を変更する
726
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
727
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
728
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
729
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
730
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
731
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
732
+ #返却値:: 変更後の新しい画像インスタンス
733
+ def hsv(degree, saturation, value, &block)
734
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
735
+ raise MiyakoError, "illegal range!" unless Bitmap.hsv(self, dst, degree, saturation, value, &block)
736
+ return dst
737
+ end
738
+
739
+ #===画像の色相・彩度・明度を変更する
740
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
741
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
742
+ #ブロックの引数は、|SpriteUnit|となる。
743
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
744
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
745
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
746
+ #返却値:: 変更後の画像インスタンス
747
+ def hsv!(degree, saturation, value, &block)
748
+ raise MiyakoError, "illegal range!" unless Bitmap.hsv!(self, degree, saturation, value, &block)
749
+ return self
336
750
  end
337
751
  end
338
752
  end