ruby-miyako-mswin32 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. data/README +1115 -0
  2. data/img/cursor.png +0 -0
  3. data/img/cursors.png +0 -0
  4. data/img/dice.png +0 -0
  5. data/img/wait_cursor.png +0 -0
  6. data/img/win_base.png +0 -0
  7. data/img/window.png +0 -0
  8. data/install_miyako.rb +87 -0
  9. data/lib/Miyako/API/audio.rb +584 -0
  10. data/lib/Miyako/API/basic_data.rb +1026 -0
  11. data/lib/Miyako/API/bitmap.rb +534 -0
  12. data/lib/Miyako/API/choices.rb +481 -0
  13. data/lib/Miyako/API/collision.rb +638 -0
  14. data/lib/Miyako/API/diagram.rb +586 -0
  15. data/lib/Miyako/API/drawing.rb +151 -0
  16. data/lib/Miyako/API/exceptions.rb +105 -0
  17. data/lib/Miyako/API/fixedmap.rb +462 -0
  18. data/lib/Miyako/API/font.rb +430 -0
  19. data/lib/Miyako/API/input.rb +456 -0
  20. data/lib/Miyako/API/layout.rb +644 -0
  21. data/lib/Miyako/API/map.rb +583 -0
  22. data/lib/Miyako/API/map_event.rb +222 -0
  23. data/lib/Miyako/API/modules.rb +357 -0
  24. data/lib/Miyako/API/movie.rb +166 -0
  25. data/lib/Miyako/API/parts.rb +188 -0
  26. data/lib/Miyako/API/plane.rb +205 -0
  27. data/lib/Miyako/API/screen.rb +341 -0
  28. data/lib/Miyako/API/shape.rb +443 -0
  29. data/lib/Miyako/API/sprite.rb +773 -0
  30. data/lib/Miyako/API/sprite_animation.rb +494 -0
  31. data/lib/Miyako/API/sprite_list.rb +1135 -0
  32. data/lib/Miyako/API/spriteunit.rb +168 -0
  33. data/lib/Miyako/API/story.rb +350 -0
  34. data/lib/Miyako/API/textbox.rb +773 -0
  35. data/lib/Miyako/API/utility.rb +419 -0
  36. data/lib/Miyako/API/viewport.rb +190 -0
  37. data/lib/Miyako/API/yuki.rb +1180 -0
  38. data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
  39. data/lib/Miyako/EXT/raster_scroll.rb +138 -0
  40. data/lib/Miyako/EXT/slides.rb +157 -0
  41. data/lib/Miyako/miyako.rb +201 -0
  42. data/lib/Miyako/miyako_no_katana.so +0 -0
  43. data/lib/Miyako/miyako_require_only.rb +35 -0
  44. data/logo/EGSR_logo.png +0 -0
  45. data/logo/EGSR_logo_bg.png +0 -0
  46. data/logo/EGSR_logo_fg.png +0 -0
  47. data/logo/EGSR_title_banner.png +0 -0
  48. data/logo/EGSR_title_logo.png +0 -0
  49. data/logo/miyako.png +0 -0
  50. data/logo/miyako_banner.png +0 -0
  51. data/logo/space.png +0 -0
  52. data/sample/Animation1/m1ku.rb +68 -0
  53. data/sample/Animation1/m1ku_arm_0.png +0 -0
  54. data/sample/Animation1/m1ku_arm_1.png +0 -0
  55. data/sample/Animation1/m1ku_arm_2.png +0 -0
  56. data/sample/Animation1/m1ku_arm_3.png +0 -0
  57. data/sample/Animation1/m1ku_back.jpg +0 -0
  58. data/sample/Animation1/m1ku_body.png +0 -0
  59. data/sample/Animation1/m1ku_eye_0.png +0 -0
  60. data/sample/Animation1/m1ku_eye_1.png +0 -0
  61. data/sample/Animation1/m1ku_eye_2.png +0 -0
  62. data/sample/Animation1/m1ku_eye_3.png +0 -0
  63. data/sample/Animation1/m1ku_hair_front.png +0 -0
  64. data/sample/Animation1/m1ku_hair_rear.png +0 -0
  65. data/sample/Animation1/readme.txt +72 -0
  66. data/sample/Animation2/lex.rb +96 -0
  67. data/sample/Animation2/lex_back.png +0 -0
  68. data/sample/Animation2/lex_body.png +0 -0
  69. data/sample/Animation2/lex_roadroller.png +0 -0
  70. data/sample/Animation2/lex_wheel_0.png +0 -0
  71. data/sample/Animation2/lex_wheel_1.png +0 -0
  72. data/sample/Animation2/lex_wheel_2.png +0 -0
  73. data/sample/Animation2/readme.txt +72 -0
  74. data/sample/Animation2/song_title.png +0 -0
  75. data/sample/Diagram_sample/back.png +0 -0
  76. data/sample/Diagram_sample/chr01.png +0 -0
  77. data/sample/Diagram_sample/chr02.png +0 -0
  78. data/sample/Diagram_sample/cursor.png +0 -0
  79. data/sample/Diagram_sample/diagram_sample_yuki2.rb +329 -0
  80. data/sample/Diagram_sample/readme.txt +90 -0
  81. data/sample/Diagram_sample/wait_cursor.png +0 -0
  82. data/sample/Room3/blue.rb +297 -0
  83. data/sample/Room3/ending.rb +180 -0
  84. data/sample/Room3/green.rb +220 -0
  85. data/sample/Room3/image/akamatsu.png +0 -0
  86. data/sample/Room3/image/aoyama.png +0 -0
  87. data/sample/Room3/image/congra.png +0 -0
  88. data/sample/Room3/image/congratulation.png +0 -0
  89. data/sample/Room3/image/congratulation_bg.png +0 -0
  90. data/sample/Room3/image/cursor.png +0 -0
  91. data/sample/Room3/image/midori.png +0 -0
  92. data/sample/Room3/image/mittsu_no_oheya.png +0 -0
  93. data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
  94. data/sample/Room3/image/room_blue.png +0 -0
  95. data/sample/Room3/image/room_green.png +0 -0
  96. data/sample/Room3/image/room_red.png +0 -0
  97. data/sample/Room3/image/start.png +0 -0
  98. data/sample/Room3/image/three_doors.png +0 -0
  99. data/sample/Room3/image/wait_cursor.png +0 -0
  100. data/sample/Room3/main.rb +120 -0
  101. data/sample/Room3/main_component.rb +59 -0
  102. data/sample/Room3/readme.txt +76 -0
  103. data/sample/Room3/red.rb +227 -0
  104. data/sample/Room3/room3.rb +25 -0
  105. data/sample/Room3/title.rb +184 -0
  106. data/sample/ball_action_sample.rb +204 -0
  107. data/sample/blit_rop.rb +70 -0
  108. data/sample/cairo_sample.rb +25 -0
  109. data/sample/circle_collision_test.rb +66 -0
  110. data/sample/collision_test.rb +33 -0
  111. data/sample/collision_test2.rb +108 -0
  112. data/sample/fixed_map_test/cursor.png +0 -0
  113. data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
  114. data/sample/fixed_map_test/map.csv +19 -0
  115. data/sample/fixed_map_test/map_01.png +0 -0
  116. data/sample/fixed_map_test/mapchip.csv +23 -0
  117. data/sample/fixed_map_test/monster.png +0 -0
  118. data/sample/fixed_map_test/readme.txt +72 -0
  119. data/sample/map_test/chara.rb +58 -0
  120. data/sample/map_test/chr1.png +0 -0
  121. data/sample/map_test/cursor.png +0 -0
  122. data/sample/map_test/main_parts.rb +69 -0
  123. data/sample/map_test/main_scene.rb +153 -0
  124. data/sample/map_test/map.png +0 -0
  125. data/sample/map_test/map2.png +0 -0
  126. data/sample/map_test/map_layer.csv +127 -0
  127. data/sample/map_test/map_manager.rb +75 -0
  128. data/sample/map_test/map_test.rb +23 -0
  129. data/sample/map_test/mapchip.csv +21 -0
  130. data/sample/map_test/oasis.rb +71 -0
  131. data/sample/map_test/readme.txt +89 -0
  132. data/sample/map_test/route.rb +157 -0
  133. data/sample/map_test/sea.png +0 -0
  134. data/sample/map_test/town.rb +74 -0
  135. data/sample/map_test/wait_cursor.png +0 -0
  136. data/sample/map_test/window.png +0 -0
  137. data/sample/polygon_test.rb +35 -0
  138. data/sample/rasterscroll.rb +25 -0
  139. data/sample/takahashi.rb +42 -0
  140. data/sample/text.png +0 -0
  141. data/sample/textbox_sample.rb +190 -0
  142. data/sample/transform.rb +54 -0
  143. data/sample/utility_test.rb +73 -0
  144. data/sample/utility_test2.rb +61 -0
  145. data/sample/utility_test3.rb +64 -0
  146. data/sample/utility_test4.rb +73 -0
  147. data/uninstall_miyako.rb +19 -0
  148. metadata +199 -0
@@ -0,0 +1,773 @@
1
+ # -*- encoding: utf-8 -*-
2
+ =begin
3
+ --
4
+ Miyako v2.1
5
+ Copyright (C) 2007-2009 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
+ require 'Forwardable'
24
+
25
+ # スプライト関連クラス群
26
+ module Miyako
27
+ #==スプライト管理クラス
28
+ class Sprite
29
+ include SpriteBase
30
+ include Animation
31
+ include Layout
32
+ include SingleEnumerable
33
+ extend Forwardable
34
+
35
+ attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
36
+ attr_reader :tr_color #カラーキーが有向になっている場合のRGB値。[R,G,B]の配列(各要素は0~255の整数)
37
+ attr_reader :type #画像の透明度・透過タイプを取得する(詳細はSprite.newメソッドを参照)
38
+
39
+ @@abb = {:ck => :color_key, :as => :alpha_surface, :ac => :alpha_channel}
40
+
41
+ def setup #:nodoc:
42
+ @unit = SpriteUnitFactory.create
43
+ @aa = false
44
+ @tr_color = Color[:black]
45
+ @update = nil
46
+ @w = 0
47
+ @h = 0
48
+ @draw_list = nil
49
+ @visible = true
50
+ end
51
+
52
+ private :setup
53
+
54
+ #===インスタンス生成
55
+ #スプライトをファイルや画像サイズから生成します。
56
+ #Screen.init/Miyako.openが呼ばれる前に作成しようとするとMiyakoError例外が発生します
57
+ #
58
+ #v1.5以前は、ファイルからスプライトを生成するときは、ファイル名で画像が共有されていましたが、
59
+ #v2.0では廃止されました。
60
+ #
61
+ #_param_:: 各種設定(ハッシュ引数。詳細は後述)
62
+ #返却値:: 生成したインスタンス
63
+ #
64
+ #<引数の内容>
65
+ #* 1.画像の元データ(括弧内は省略形)。以下の3種類のどれかを必ず指定する。
66
+ # * 画像ファイル(ファイル名)から生成。 (書式):filename(:file)=>画像ファイル名 (例):file=>"image.png"
67
+ # * 画像サイズ(2要素の整数の配列もしくはSize構造体)から生成。
68
+ #  (書式1):size=>2要素の配列((例):size=>[100,100])
69
+ #  (書式2):size=>Size構造体((例):size=>Size.new(100,100))
70
+ # * SDL::Surfaceクラスのインスタンスから生成。 
71
+ # (書式):bitmap(:bmp)=>SDL::Surfaceクラスのインスタンス((例):bmp=>@surface)
72
+ # * SpriteUnit構造体のインスタンスから生成(ビットマップ以外のUnitの値は引き継がれる。
73
+ # しかし、snapの親子関係は引き継がれない)。
74
+ # (書式):unit=>SpriteUnit構造体のインスタンス((例):unit=>@spr.to_unit)
75
+ #* 2.透過設定(括弧内は省略形)。以下の3種類のどれかを必ず指定する。
76
+ # * カラーキーによる透過は行わない方式(デフォルトの方式) (書式):type=>:alpha_surface(:as)
77
+ # * カラーキーの指定。 (書式):type=>:color_key(:ck) カラーキー指定の方法は以下のとおり
78
+ # * 透明色にするピクセルの位置(2要素の整数の配列、Point構造体)
79
+ #  (書式1):point=>2要素の配列((例):type=>:ck, :point=>[20,20])
80
+ #  (書式2):point=>Point構造体((例):type=>:ck, :point=>Point.new(20,20))
81
+ # * 色を直接指定
82
+ #  (書式):tr_color=>色情報(Color.to_rgbメソッドで生成できるパラメータ)
83
+ # ((例1):type=>:ck, :tr_color=>[255,0,255] # 紫色を透明色に
84
+ #  (例2):type=>:ck, :tr_color=>:red # 赤色を透明色に)
85
+ # * デフォルト:画像の[0,0]の位置にあるピクセルの色
86
+ #* 3. αチャネル付き画像を使用(設定変更不可) (書式):type=>:alpha_channel(:ac)
87
+ def initialize(param)
88
+ raise MiyakoError, "Sprite instance cannot create uninitialized yet!" unless Screen.initialized?
89
+ raise MiyakoTypeError, "Sprite parameter is not Hash!" unless param.kind_of?(Hash)
90
+ setup
91
+ init_layout
92
+
93
+ bitmap = nil
94
+ @tr_color = nil
95
+
96
+ param[:type] ||= :color_key
97
+ param[:type] = @@abb[param[:type]] if @@abb.has_key?(param[:type])
98
+ param[:point] ||= Point.new(0, 0)
99
+ param[:tr_color] ||= Color[:black]
100
+ param[:is_fill] ||= false
101
+
102
+ if param.has_key?(:bitmap) || param.has_key?(:bmp)
103
+ bitmap = param[:bitmap] || param[:bmp]
104
+ elsif param.has_key?(:size)
105
+ bitmap = Bitmap.create(*(param[:size].to_a))
106
+ param[:is_fill] = true
107
+ elsif param.has_key?(:filename) || param.has_key?(:file)
108
+ name = param[:filename] || param[:file]
109
+ raise MiyakoIOError.no_file(name) unless File.exist?(name)
110
+ begin
111
+ bitmap = Bitmap.load(name)
112
+ rescue SDL::Error
113
+ raise MiyakoFileFormatError, "Illegal file format! collect? #{name}"
114
+ end
115
+ elsif param.has_key?(:unit)
116
+ bitmap = param[:unit].bitmap
117
+ else
118
+ raise MiyakoError, "Illegal Sprite parameter!"
119
+ end
120
+
121
+ case param[:type]
122
+ when :color_key
123
+ if param.has_key?(:point)
124
+ @tr_color = Color.to_rgb(bitmap.get_rgb(bitmap.getPixel(*(param[:point].to_a))))
125
+ else
126
+ @tr_color = Color.to_rgb(param[:tr_color])
127
+ end
128
+ # カラーキーのα値を0にしたビットマップを作成
129
+ # self.bitmap = Bitmap.create_from(bitmap)
130
+ self.bitmap = bitmap.display_format_alpha
131
+ if param[:is_fill]
132
+ @unit.bitmap.fill_rect(0,0,@unit.bitmap.w,@unit.bitmap.h,[0, 0, 0])
133
+ Bitmap.ck_to_ac!(@unit, [0,0,0])
134
+ else
135
+ Bitmap.ck_to_ac!(@unit, @tr_color)
136
+ end
137
+ when :alpha_surface
138
+ # カラーキーのα値を0にしたビットマップを作成
139
+ # self.bitmap = Bitmap.create_from(bitmap)
140
+ self.bitmap = bitmap.display_format_alpha
141
+ Bitmap.normal_to_ac!(@unit)
142
+ if param[:is_fill]
143
+ @unit.bitmap.fill_rect(0,0,@unit.bitmap.w,@unit.bitmap.h,[0, 0, 0])
144
+ Bitmap.ck_to_ac!(@unit, [0,0,0])
145
+ end
146
+ when :alpha_channel
147
+ # self.bitmap = Bitmap.create_from(bitmap)
148
+ self.bitmap = bitmap.display_format_alpha
149
+ if param[:is_fill]
150
+ @unit.bitmap.fill_rect(0,0,@unit.bitmap.w,@unit.bitmap.h,[0, 0, 0])
151
+ Bitmap.ck_to_ac!(@unit, [0,0,0])
152
+ end
153
+ when :movie
154
+ # self.bitmap = Bitmap.create_from(bitmap)
155
+ self.bitmap = bitmap.display_format_alpha
156
+ end
157
+ @type = param[:type]
158
+
159
+ if param.has_key?(:unit)
160
+ SpriteUnitFactory.apply(@unit, :ow=>param[:unit].ow, :oh=>param[:unit].oh,
161
+ :cx => param[:unit].cx, :cy => param[:unit].cy)
162
+ self.move_to!(param[:unit].x, param[:unit].y)
163
+ end
164
+ end
165
+
166
+ def_delegators(:@unit, :ox, :oy, :ow, :oh, :x, :y)
167
+
168
+ #===複写時に呼び出されるメソッド
169
+ #複写と同時に、本インスタンスに対するスナップの関係を解消
170
+ def initialize_copy(obj)
171
+ self.unit = obj.to_unit
172
+ copy_layout
173
+ end
174
+
175
+ def unit=(unit) #:nodoc:
176
+ @unit = unit
177
+ end
178
+
179
+ def update_layout_position #:nodoc:
180
+ @unit.move_to!(*@layout.pos)
181
+ end
182
+
183
+ #===画像の幅を取得する
184
+ #返却値:: 画像の幅(ピクセル)
185
+ def w
186
+ return @unit.bitmap.w
187
+ end
188
+
189
+ #===画像の高さを取得する
190
+ #返却値:: 画像の高さ(ピクセル)
191
+ def h
192
+ return @unit.bitmap.h
193
+ end
194
+
195
+ def bitmap #:nodoc:
196
+ return @unit.bitmap
197
+ end
198
+
199
+ def bitmap=(bmp) #:nodoc:
200
+ @unit.bitmap = bmp
201
+ @unit.ow = @unit.bitmap.w
202
+ @unit.oh = @unit.bitmap.h
203
+ @w = @unit.bitmap.w
204
+ @h = @unit.bitmap.h
205
+ set_layout_size(@unit.ow, @unit.oh)
206
+ end
207
+
208
+ #===画像全体を指定の色で塗りつぶす
209
+ #_color_:: 塗りつぶす色。Color.to_rgbメソッドのパラメータでの指定が可能
210
+ #返却値:: 自分自身を返す
211
+ def fill(color)
212
+ @unit.bitmap.fill_rect(0,0,self.w,self.h,Color.to_rgb(color))
213
+ return self
214
+ end
215
+
216
+ #===画像の表示開始位置(X座標)を指定する
217
+ #oxを指定すると、表示の左上位置が変更される。
218
+ #値が画像の幅の範囲外(値がマイナス、画像の幅を超える値)のときは例外が発生する
219
+ #_v_:: 表示開始位置。整数で指定
220
+ def ox=(v)
221
+ raise MiyakoValueError, "Illegal ox parameter! : #{v} (range: 0..#{@w-@unit.ow})" if (v < 0 || (v+@unit.ow) > @w)
222
+ @unit.ox = v
223
+ end
224
+
225
+ #===画像の表示開始位置(Y座標)を指定する
226
+ #oyを指定すると、表示の左上位置が変更される。
227
+ #値が画像の高さの範囲外(値がマイナス、画像の高さを超える値)のときは例外が発生する
228
+ #_v_:: 表示開始位置。整数で指定
229
+ def oy=(v)
230
+ raise MiyakoValueError, "Illegal oy parameter! : #{v} (range: 0..#{@h-@unit.oh})" if (v < 0 || (v+@unit.oh) > @h)
231
+ @unit.oy = v
232
+ end
233
+
234
+ #===画像の表示幅を指定する
235
+ #owを指定すると、横方向の一部のみ表示される。
236
+ #値が画像の幅の範囲外(値がマイナス、画像の幅を超える値)のときは例外が発生する
237
+ #_v_:: 表示幅。整数で指定
238
+ def ow=(v)
239
+ raise MiyakoValueError, "Illegal ox parameter! : #{v} (range: 0..#{@w-@unit.ox})" if (v < 0 || (@unit.ox+v) > @w)
240
+ @unit.ow = v
241
+ set_layout_size(v, @unit.oh)
242
+ end
243
+
244
+ #===画像の表示高を指定する
245
+ #ohを指定すると、縦方向の一部のみ表示される。
246
+ #値が画像の高さの範囲外(値がマイナス、画像の高さを超える値)のときは例外が発生する
247
+ #_v_:: 表示高。整数で指定
248
+ def oh=(v)
249
+ raise MiyakoValueError, "Illegal ox parameter! : #{v} (range: 0..#{@h-@unit.oy})" if (v < 0 || (@unit.oy+v) > @h)
250
+ @unit.oh = v
251
+ set_layout_size(@unit.ow, v)
252
+ end
253
+
254
+ #===画像の回転・拡大・縮小の中心座標を取得する
255
+ #x方向の中心座標を取得する
256
+ #返却値:: 中心座標。
257
+ def center_x
258
+ return @unit.cx
259
+ end
260
+
261
+ #===画像の回転・拡大・縮小の中心座標を取得する
262
+ #x方向の中心座標を取得する
263
+ #_pos_:: 中心座標
264
+ def center_x=(pos)
265
+ @unit.cx = pos
266
+ end
267
+
268
+ #===画像の回転・拡大・縮小の中心座標を取得する
269
+ #y方向の中心座標を取得する
270
+ #返却値:: 中心座標。
271
+ def center_y
272
+ return @unit.cy
273
+ end
274
+
275
+ #===画像の回転・拡大・縮小の中心座標を取得する
276
+ #y方向の中心座標を取得する
277
+ #_pos_:: 中心座標
278
+ def center_y=(pos)
279
+ @unit.cy = pos
280
+ end
281
+
282
+ #===画像の表示矩形を取得する
283
+ #画像が表示されているときの矩形(Rect構造体)を取得する
284
+ #返却値:: 生成された矩形(Rect構造体インスタンス)
285
+ def rect
286
+ return Rect.new(@unit.x, @unit.y, @unit.ow, @unit.oh)
287
+ end
288
+
289
+ #===現在の画面の最大の大きさを矩形で取得する
290
+ #但し、Spriteの場合は最大の大きさ=スプライトの大きさなので、rectと同じ値が得られる
291
+ #返却値:: 画像の大きさ(Rect構造体のインスタンス)
292
+ def broad_rect
293
+ return self.rect
294
+ end
295
+
296
+ def update #:nodoc:
297
+ @update.call(self) if @update
298
+ yield self if block_given?
299
+ return self
300
+ end
301
+
302
+ def update=(u) #:nodoc:
303
+ @update = u
304
+ end
305
+
306
+ #===画像を解放する
307
+ #内部で使用しているデータをインスタンスから解放する
308
+ def dispose
309
+ layout_dispose
310
+ @unit.bitmap = nil
311
+ @unit = nil
312
+ end
313
+
314
+ #===インスタンスをSpriteUnit構造体に変換して取得する
315
+ #新しいSpriteUnitを作成して返す
316
+ #返却値:: SpriteUnit化したスプライト
317
+ def to_unit
318
+ return @unit.dup
319
+ end
320
+
321
+ #===インスタンスをスプライト化して返す
322
+ #インスタンスの複製を行う(画像インスタンスも複製)
323
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
324
+ #注意事項:
325
+ #1.複製のため、呼び出していくとメモリ使用量が著しく上がる
326
+ #2.レイアウト情報がリセットされる(snapの親子関係が解消される)
327
+ #返却値:: 生成したインスタンスを返す
328
+ def to_sprite
329
+ unit = @unit.dup
330
+ unit.bitmap = Bitmap.create(unit.bitmap.w, unit.bitmap.h)
331
+ sprite = Sprite.new(size: [unit.bitmap.w, unit.bitmap.h], type: :ac)
332
+ Drawing.fill(sprite, [0,0,0])
333
+ Bitmap.ck_to_ac!(sprite, [0,0,0])
334
+ Bitmap.blit_aa(self, sprite, 0, 0)
335
+ yield sprite if block_given?
336
+ return sprite
337
+ end
338
+
339
+ #===画像の内容を破壊的に消去する
340
+ #インスタンスの複製を行う(画像インスタンスも複製)
341
+ #引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
342
+ #注意事項:
343
+ #1.複製のため、呼び出していくとメモリ使用量が著しく上がる
344
+ #2.レイアウト情報がリセットされる(snapの親子関係が解消される)
345
+ #返却値:: 自分自身を返す
346
+ def clear!
347
+ Drawing.fill(self, [0,0,0])
348
+ Bitmap.ck_to_ac!(self, [0,0,0])
349
+ return self
350
+ end
351
+
352
+ #===インスタンスの内容を別のインスタンスに描画する
353
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
354
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
355
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
356
+ #ブロックの引数は、|転送元のSpriteUnit,転送先のSpriteUnit|となる。
357
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
358
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
359
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
360
+ #返却値:: 自分自身を返す
361
+ def Sprite.render_to(src, dst)
362
+ end
363
+
364
+ #===インスタンスの内容を画面に描画する
365
+ #現在の画像を、現在の状態で描画するよう指示する
366
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
367
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
368
+ #ブロックの引数は、|インスタンスのSpriteUnit, 画面のSpriteUnit|となる。
369
+ #visibleメソッドの値がfalseのときは描画されない。
370
+ #返却値:: 自分自身を返す
371
+ def render
372
+ end
373
+
374
+ #===インスタンスの内容を別のインスタンスに描画する
375
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
376
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
377
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
378
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
379
+ #ブロックの引数は、|インスタンスのSpriteUnit,転送先のSpriteUnit|となる。
380
+ #visibleメソッドの値がfalseのときは描画されない。
381
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
382
+ #返却値:: 自分自身を返す
383
+ def render_to(dst)
384
+ end
385
+
386
+ #===インスタンスの内容を画面に描画する(回転/拡大/縮小/鏡像付き)
387
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。回転の中心はsrc側(ox,oy)を起点に、src側(cx,cy)が中心になるように設定する。
388
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、画面側SpriteUnitの(cx,cy)が中心になるように設定にする。
389
+ #回転角度が正だと右回り、負だと左回りに回転する
390
+ #変形の度合いは、src側SpriteUnitのxscale, yscaleを使用する(ともに実数で指定する)。それぞれ、x方向、y方向の度合いとなる
391
+ #度合いが scale > 1.0 だと拡大、 0 < scale < 1.0 だと縮小、scale < 0.0 負だと鏡像の拡大・縮小になる(scale == -1.0 のときはミラー反転になる)
392
+ #また、変形元の幅・高さのいずれかが32768以上の時は回転・転送を行わない
393
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
394
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
395
+ #ブロックの引数は、|インスタンスのSpriteUnit,画面のSpriteUnit|となる。
396
+ #visibleメソッドの値がfalseのときは描画されない。
397
+ #_radian_:: 回転角度。単位はラジアン。値の範囲は0<=radian<2pi
398
+ #_xscale_:: 拡大率(x方向)
399
+ #_yscale_:: 拡大率(y方向)
400
+ #返却値:: 自分自身を返す
401
+ def render_transform(radian, xscale, yscale)
402
+ end
403
+
404
+ #===インスタンスの内容を画面に描画する(回転/拡大/縮小/鏡像付き)
405
+ #転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。回転の中心はsrc側(ox,oy)を起点に、src側(cx,cy)が中心になるように設定する。
406
+ #画面の描画範囲は、src側SpriteUnitの(x,y)を起点に、画面側SpriteUnitの(cx,cy)が中心になるように設定にする。
407
+ #回転角度が正だと右回り、負だと左回りに回転する
408
+ #変形の度合いは、src側SpriteUnitのxscale, yscaleを使用する(ともに実数で指定する)。それぞれ、x方向、y方向の度合いとなる
409
+ #度合いが scale > 1.0 だと拡大、 0 < scale < 1.0 だと縮小、scale < 0.0 負だと鏡像の拡大・縮小になる(scale == -1.0 のときはミラー反転になる)
410
+ #また、変形元の幅・高さのいずれかが32768以上の時は回転・転送を行わない
411
+ #ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
412
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
413
+ #ブロックの引数は、|インスタンスのSpriteUnit,転送先のSpriteUnit|となる。
414
+ #visibleメソッドの値がfalseのときは描画されない。
415
+ #_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
416
+ #_radian_:: 回転角度。単位はラジアン。値の範囲は0<=radian<2pi
417
+ #_xscale_:: 拡大率(x方向)
418
+ #_yscale_:: 拡大率(y方向)
419
+ #返却値:: 自分自身を返す
420
+ def render_to_transform(dst, radian, xscale, yscale)
421
+ end
422
+
423
+ #===2つの画像のandを取り、別の画像へ転送する
424
+ #重ね合わせの式は、"src and self -> dst"で表される。自分自身と転送先画像は同じ大きさとなる。
425
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
426
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
427
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
428
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
429
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
430
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
431
+ #返却値:: 変更後の新しい画像インスタンス
432
+ def and(src, &block)
433
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
434
+ self.render_to(dst)
435
+ raise MiyakoValueError, "illegal range!" unless Bitmap.blit_and(src, dst, &block)
436
+ return dst
437
+ end
438
+
439
+ #===2つの画像のandを破壊的に行う
440
+ #重ね合わせの式は、"src and self -> self"で表される。
441
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
442
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
443
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
444
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
445
+ #ブロックの引数は、|SpriteUnit|となる。
446
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
447
+ #返却値:: 変更後の自分自身を返す
448
+ def and!(src, &block)
449
+ raise MiyakoValueError, "illegal range!" unless Bitmap.blit_and(src, self, &block)
450
+ return self
451
+ end
452
+
453
+ #===2つの画像のorを取り、別の画像へ転送する
454
+ #重ね合わせの式は、"src or self -> dst"で表される。自分自身と転送先画像は同じ大きさとなる。
455
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
456
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
457
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
458
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
459
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
460
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
461
+ #返却値:: 変更後の新しい画像インスタンス
462
+ def or(src, &block)
463
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
464
+ self.render_to(dst)
465
+ raise MiyakoValueError, "illegal range!" unless Bitmap.blit_or(src, dst, &block)
466
+ return dst
467
+ end
468
+
469
+ #===2つの画像のorを破壊的に行う
470
+ #重ね合わせの式は、"src or self -> self"で表される。
471
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
472
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
473
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
474
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
475
+ #ブロックの引数は、|SpriteUnit|となる。
476
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
477
+ #返却値:: 変更後の自分自身を返す
478
+ def or!(src, &block)
479
+ raise MiyakoValueError, "illegal range!" unless Bitmap.blit_or(src, self, &block)
480
+ return self
481
+ end
482
+
483
+ #===2つの画像のxorを取り、別の画像へ転送する
484
+ #重ね合わせの式は、"src xor self -> dst"で表される。自分自身と転送先画像は同じ大きさとなる。
485
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
486
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
487
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
488
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
489
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
490
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
491
+ #返却値:: 変更後の新しい画像インスタンス
492
+ def xor(src, &block)
493
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
494
+ self.render_to(dst)
495
+ raise MiyakoValueError, "illegal range!" unless Bitmap.blit_xor(src, dst, &block)
496
+ return dst
497
+ end
498
+
499
+ #===2つの画像のxorを破壊的に行う
500
+ #重ね合わせの式は、"src xor self -> self"で表される。
501
+ #範囲は、インスタンス側とsrc側との(ow,oh)の小さい方の範囲で転送する。
502
+ #src側の(x,y)をインスタンス側の起点として、src側の(ow,oh)の範囲で転送する。
503
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
504
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
505
+ #ブロックの引数は、|SpriteUnit|となる。
506
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
507
+ #返却値:: 変更後の自分自身を返す
508
+ def xor!(src, &block)
509
+ raise MiyakoValueError, "illegal range!" unless Bitmap.blit_xor(src, self, &block)
510
+ return self
511
+ end
512
+
513
+ #===画像のαチャネルの値を一定の割合で変化させて転送する
514
+ #degreeの値が1.0に近づけば近づくほど透明に近づき、
515
+ #degreeの値が-1.0に近づけば近づくほど不透明に近づく(値が-1.0のときは完全不透明、値が0.0のときは変化なし、1.0のときは完全に透明になる)
516
+ #但し、元々αの値がゼロの時は変化しない
517
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
518
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
519
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
520
+ #_degree_:: 減少率。-1.0<=degree<=1.0までの実数
521
+ #返却値:: 変更後の新しい画像インスタンス
522
+ def dec_alpha(degree, &block)
523
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
524
+ raise MiyakoValueError, "illegal range!" unless Bitmap.dec_alpha(self, dst, degree, &block)
525
+ return dst
526
+ end
527
+
528
+ #===画像のαチャネルの値を一定の割合で破壊的に変化させる
529
+ #degreeの値が1.0に近づけば近づくほど透明に近づき、
530
+ #degreeの値が-1.0に近づけば近づくほど不透明に近づく
531
+ #(値が-1.0のときは完全不透明、値が0.0のときは変化なし、1.0のときは完全に透明になる)
532
+ #但し、元々αの値がゼロの時は変化しない
533
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
534
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
535
+ #ブロックの引数は、|SpriteUnit|となる。
536
+ #_degree_:: 減少率。-1.0<=degree<=1.0までの実数
537
+ #返却値:: 変更後の自分自身を返す
538
+ def dec_alpha!(degree, &block)
539
+ raise MiyakoValueError, "illegal range!" unless Bitmap.dec_alpha!(self, degree, &block)
540
+ return self
541
+ end
542
+
543
+ #===画像の色を一定の割合で黒に近づける(ブラックアウト)
544
+ #赤・青・緑・αの各要素を一定の割合で下げ、黒色に近づける。
545
+ #degreeの値が1.0に近づけば近づくほど黒色に近づく(値が0.0のときは変化なし、1.0のときは真っ黒になる)
546
+ #αの値が0のときは変わらないことに注意!
547
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
548
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
549
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
550
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
551
+ #返却値:: 変更後の新しい画像インスタンス
552
+ def black_out(degree, &block)
553
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
554
+ raise MiyakoValueError, "illegal range!" unless Bitmap.black_out(self, dst, degree, &block)
555
+ return dst
556
+ end
557
+
558
+ #===画像の色を一定の割合で黒に近づける(ブラックアウト)
559
+ #赤・青・緑・αの各要素を一定の割合で下げ、黒色に近づける。
560
+ #degreeの値が1.0に近づけば近づくほど黒色に近づく(値が0.0のときは変化なし、1.0のときは真っ黒になる)
561
+ #αの値が0のときは変わらないことに注意!
562
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
563
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
564
+ #ブロックの引数は、|SpriteUnit|となる。
565
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
566
+ #返却値:: 変更後の自分自身を返す
567
+ def black_out!(degree, &block)
568
+ raise MiyakoValueError, "illegal range!" unless Bitmap.black_out!(self, degree, &block)
569
+ return self
570
+ end
571
+
572
+ #===画像の色を一定の割合で白に近づける(ホワイトアウト)
573
+ #赤・青・緑・αの各要素を一定の割合で上げ、白色に近づける。
574
+ #degreeの値が1.0に近づけば近づくほど白色に近づく(値が0.0のときは変化なし、1.0のときは真っ白になる)
575
+ #αの値が0のときは変わらないことに注意!
576
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
577
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
578
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
579
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
580
+ #返却値:: 変更後の新しい画像インスタンス
581
+ def white_out(degree, &block)
582
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
583
+ raise MiyakoValueError, "illegal range!" unless Bitmap.white_out(self, dst, degree, &block)
584
+ return dst
585
+ end
586
+
587
+ #===画像の色を一定の割合で白に近づける(ホワイトアウト)
588
+ #赤・青・緑・αの各要素を一定の割合で上げ、白色に近づける。
589
+ #degreeの値が1.0に近づけば近づくほど白色に近づく(値が0.0のときは変化なし、1.0のときは真っ白になる)
590
+ #αの値が0のときは変わらないことに注意!
591
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
592
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
593
+ #ブロックの引数は、|SpriteUnit|となる。
594
+ #_degree_:: 変化率。0.0<=degree<=1.0までの実数
595
+ #返却値:: 変更後の自分自身を返す
596
+ def white_out!(degree, &block)
597
+ raise MiyakoValueError, "illegal range!" unless Bitmap.white_out!(self, degree, &block)
598
+ return self
599
+ end
600
+
601
+ #===画像のRGB値を反転させる
602
+ #αチャネルの値は変更しない
603
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
604
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
605
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
606
+ #返却値:: 変更後の新しい画像インスタンス
607
+ def inverse(&block)
608
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
609
+ raise MiyakoValueError, "illegal range!" unless Bitmap.inverse(self, dst, &block)
610
+ return dst
611
+ end
612
+
613
+ #===画像のRGB値を反転させる
614
+ #αチャネルの値は変更しない
615
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
616
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
617
+ #ブロックの引数は、|SpriteUnit|となる。
618
+ #返却値:: 変更後の自分自身を返す
619
+ def inverse!(&block)
620
+ raise MiyakoValueError, "illegal range!" unless Bitmap.inverse!(self, &block)
621
+ return self
622
+ end
623
+
624
+ #===2枚の画像の加算合成を行う
625
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
626
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
627
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
628
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
629
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
630
+ #返却値:: 変更後の新しい画像インスタンス
631
+ def additive(src, &block)
632
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
633
+ self.render_to(dst)
634
+ raise MiyakoValueError, "illegal range!" unless Bitmap.additive(src, dst, &block)
635
+ return dst
636
+ end
637
+
638
+ #===2枚の画像の加算合成を行う
639
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
640
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
641
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
642
+ #ブロックの引数は、|SpriteUnit|となる。
643
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
644
+ #返却値:: 変更後の自分自身を返す
645
+ def additive!(src, &block)
646
+ raise MiyakoValueError, "illegal range!" unless Bitmap.additive(src, self, &block)
647
+ return self
648
+ end
649
+
650
+ #===2枚の画像の減算合成を行う
651
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
652
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
653
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
654
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
655
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
656
+ #返却値:: 変更後の新しい画像インスタンス
657
+ def subtraction(src, &block)
658
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
659
+ self.render_to(dst)
660
+ raise MiyakoValueError, "illegal range!" unless Bitmap.subtraction(src, dst, &block)
661
+ return dst
662
+ end
663
+
664
+ #===2枚の画像の減算合成を行う
665
+ #範囲は、src側の(ow,oh)の範囲で転送する。転送先の描画開始位置は、src側の(x,y)を左上とする。
666
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
667
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
668
+ #ブロックの引数は、|SpriteUnit|となる。
669
+ #_src_:: 転送元ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
670
+ #返却値:: 変更後の自分自身を返す
671
+ def subtraction!(src, &block)
672
+ raise MiyakoValueError, "illegal range!" unless Bitmap.subtraction(src, self, &block)
673
+ return self
674
+ end
675
+
676
+ #===画像の色相を変更する
677
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
678
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
679
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
680
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
681
+ #返却値:: 変更後の新しい画像インスタンス
682
+ def hue(degree, &block)
683
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
684
+ raise MiyakoValueError, "illegal range!" unless Bitmap.hue(self, dst, degree, &block)
685
+ return dst
686
+ end
687
+
688
+ #===画像の色相を変更する
689
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
690
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
691
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
692
+ #ブロックの引数は、|SpriteUnit|となる。
693
+ #返却値:: 変更後の画像インスタンス
694
+ #返却値:: 変更後の自分自身を返す
695
+ def hue!(degree, &block)
696
+ raise MiyakoValueError, "illegal range!" unless Bitmap.hue!(self, degree, &block)
697
+ return self
698
+ end
699
+
700
+ #===画像の彩度を変更する
701
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
702
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
703
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
704
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
705
+ #返却値:: 変更後の新しい画像インスタンス
706
+ def saturation(saturation, &block)
707
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
708
+ raise MiyakoValueError, "illegal range!" unless Bitmap.saturation(self, dst, saturation, &block)
709
+ return dst
710
+ end
711
+
712
+ #===画像の彩度を変更する
713
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
714
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
715
+ #ブロックの引数は、|SpriteUnit|となる。
716
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
717
+ #返却値:: 変更後の自分自身を返す
718
+ def saturation!(saturation, &block)
719
+ raise MiyakoValueError, "illegal range!" unless Bitmap.saturation!(self, saturation, &block)
720
+ return self
721
+ end
722
+
723
+ #===画像の明度を変更する
724
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
725
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
726
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
727
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
728
+ #返却値:: 変更後の新しい画像インスタンス
729
+ def value(value, &block)
730
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
731
+ raise MiyakoValueError, "illegal range!" unless Bitmap.value(self, dst, value, &block)
732
+ return dst
733
+ end
734
+
735
+ #===画像の明度を変更する
736
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
737
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
738
+ #ブロックの引数は、|SpriteUnit|となる。
739
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
740
+ #返却値:: 変更後の画像インスタンス
741
+ def value!(value, &block)
742
+ raise MiyakoValueError, "illegal range!" unless Bitmap.value!(self, value, &block)
743
+ return self
744
+ end
745
+
746
+ #===画像の色相・彩度・明度を変更する
747
+ #ブロックを渡すと、src,dst側のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
748
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
749
+ #ブロックの引数は、|src側SpriteUnit,dst側SpriteUnit|となる。
750
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
751
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
752
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
753
+ #返却値:: 変更後の新しい画像インスタンス
754
+ def hsv(degree, saturation, value, &block)
755
+ dst = Sprite.new(:size=>self.size, :type=>:ac)
756
+ raise MiyakoValueError, "illegal range!" unless Bitmap.hsv(self, dst, degree, saturation, value, &block)
757
+ return dst
758
+ end
759
+
760
+ #===画像の色相・彩度・明度を変更する
761
+ #ブロックを渡すと、自分自身のSpriteUnitを更新して、それを実際の転送に反映させることが出来る
762
+ #(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
763
+ #ブロックの引数は、|SpriteUnit|となる。
764
+ #_degree_:: 色相の変更量。単位は度(実数)。範囲は、-360.0<degree<360.0
765
+ #_saturation_:: 彩度の変更量。範囲は0.0〜1.0の実数
766
+ #_value_:: 明度の変更量。範囲は0.0〜1.0の実数
767
+ #返却値:: 変更後の画像インスタンス
768
+ def hsv!(degree, saturation, value, &block)
769
+ raise MiyakoValueError, "illegal range!" unless Bitmap.hsv!(self, degree, saturation, value, &block)
770
+ return self
771
+ end
772
+ end
773
+ end