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.
- data/README +106 -154
- data/defines.h +144 -0
- data/{miyako_no_katana/extconf.rb → extconf.rb} +10 -0
- data/extern.h +29 -0
- data/install_miyako.rb +26 -14
- data/lib/Miyako/API/audio.rb +2 -2
- data/lib/Miyako/API/basic_data.rb +183 -41
- data/lib/Miyako/API/bitmap.rb +474 -2
- data/lib/Miyako/API/choices.rb +215 -48
- data/lib/Miyako/API/collision.rb +267 -251
- data/lib/Miyako/API/diagram.rb +58 -70
- data/lib/Miyako/API/drawing.rb +93 -52
- data/lib/Miyako/API/fixedmap.rb +233 -120
- data/lib/Miyako/API/font.rb +59 -40
- data/lib/Miyako/API/input.rb +34 -27
- data/lib/Miyako/API/layout.rb +154 -172
- data/lib/Miyako/API/map.rb +285 -159
- data/lib/Miyako/API/map_event.rb +4 -4
- data/lib/Miyako/API/modules.rb +1 -1
- data/lib/Miyako/API/movie.rb +8 -5
- data/lib/Miyako/API/parts.rb +44 -9
- data/lib/Miyako/API/plane.rb +37 -2
- data/lib/Miyako/API/screen.rb +90 -22
- data/lib/Miyako/API/shape.rb +118 -37
- data/lib/Miyako/API/sprite.rb +475 -61
- data/lib/Miyako/API/sprite_animation.rb +83 -63
- data/lib/Miyako/API/spriteunit.rb +47 -13
- data/lib/Miyako/API/story.rb +123 -47
- data/lib/Miyako/API/textbox.rb +361 -132
- data/lib/Miyako/API/utility.rb +388 -0
- data/lib/Miyako/API/viewport.rb +54 -349
- data/lib/Miyako/API/yuki.rb +570 -353
- data/lib/Miyako/EXT/miyako_cairo.rb +5 -3
- data/lib/Miyako/EXT/slides.rb +22 -1
- data/lib/Miyako/miyako.rb +12 -13
- data/logo/EGSR_logo.png +0 -0
- data/logo/EGSR_logo_bg.png +0 -0
- data/logo/EGSR_logo_fg.png +0 -0
- data/logo/EGSR_title_banner.png +0 -0
- data/logo/EGSR_title_logo.png +0 -0
- data/logo/miyako.png +0 -0
- data/logo/miyako_banner.png +0 -0
- data/logo/space.png +0 -0
- data/miyako_basicdata.c +590 -0
- data/miyako_bitmap.c +1225 -0
- data/miyako_collision.c +403 -0
- data/miyako_drawing.c +187 -0
- data/miyako_font.c +334 -0
- data/miyako_hsv.c +830 -0
- data/miyako_layout.c +191 -0
- data/miyako_no_katana.c +1074 -0
- data/miyako_transform.c +438 -0
- data/miyako_utility.c +288 -0
- data/sample/Animation1/m1ku.rb +10 -31
- data/sample/Animation1/readme.txt +6 -6
- data/sample/Animation2/lex.rb +1 -0
- data/sample/Animation2/readme.txt +6 -6
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +152 -48
- data/sample/Diagram_sample/readme.txt +9 -6
- data/sample/Room3/blue.rb +234 -187
- data/sample/Room3/ending.rb +68 -63
- data/sample/Room3/green.rb +159 -124
- data/sample/Room3/main.rb +50 -32
- data/sample/Room3/main_component.rb +3 -2
- data/sample/Room3/readme.txt +6 -6
- data/sample/Room3/red.rb +161 -134
- data/sample/Room3/room3.rb +1 -0
- data/sample/Room3/title.rb +75 -62
- data/sample/ball_action_sample.rb +204 -0
- data/sample/blit_rop.rb +70 -0
- data/sample/cairo_sample.rb +25 -0
- data/sample/circle_collision_test.rb +66 -0
- data/sample/collision_test.rb +33 -0
- data/sample/collision_test2.rb +108 -0
- data/sample/fixed_map_test/fixed_map_sample.rb +23 -32
- data/sample/fixed_map_test/readme.txt +38 -38
- data/sample/map_test/chara.rb +17 -9
- data/sample/map_test/main_parts.rb +30 -9
- data/sample/map_test/main_scene.rb +57 -41
- data/sample/map_test/map_manager.rb +13 -30
- data/sample/map_test/map_test.rb +2 -2
- data/sample/map_test/oasis.rb +17 -11
- data/sample/map_test/readme.txt +50 -48
- data/sample/map_test/route.rb +46 -33
- data/sample/map_test/town.rb +19 -13
- data/sample/polygon_test.rb +35 -0
- data/sample/rasterscroll.rb +25 -0
- data/sample/takahashi.rb +42 -0
- data/sample/text.png +0 -0
- data/sample/textbox_sample.rb +190 -0
- data/sample/transform.rb +54 -0
- data/sample/utility_test.rb +73 -0
- data/sample/utility_test2.rb +61 -0
- data/sample/utility_test3.rb +64 -0
- data/sample/utility_test4.rb +73 -0
- data/uninstall_miyako.rb +19 -0
- data/win/miyako_no_katana.so +0 -0
- metadata +165 -148
- data/miyako.png +0 -0
- data/miyako_banner.png +0 -0
- data/miyako_no_katana/miyako_no_katana.c +0 -3301
- data/sample/fixed_map_test/map_sample.rb +0 -121
data/lib/Miyako/API/shape.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
=begin
|
3
3
|
--
|
4
4
|
Miyako v2.0
|
5
|
-
Copyright (C) 2007-
|
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({:
|
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
|
-
|
137
|
+
@margins = @margins.map{|v| 0 }
|
122
138
|
when :center
|
123
|
-
|
139
|
+
@margins = @margins.map{|v| (area_size.w - v) >> 1 }
|
124
140
|
when :right
|
125
|
-
|
141
|
+
@margins = @margins.map{|v| area_size.w - v }
|
126
142
|
end
|
127
143
|
@lines = @margins.length
|
128
|
-
|
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
|
-
|
183
|
+
@margins = @margins.map{|v| 0 }
|
152
184
|
when :center
|
153
|
-
|
185
|
+
@margins = @margins.map{|v| (@size[0] - v) / 2 }
|
154
186
|
when :right
|
155
|
-
|
187
|
+
@margins = @margins.map{|v| @size[0] - v }
|
156
188
|
end
|
157
|
-
|
158
|
-
|
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
|
-
|
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(
|
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(
|
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
|
-
|
290
|
-
|
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
|
-
|
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
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
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,
|
312
|
-
|
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(
|
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
|
-
|
328
|
-
|
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
|
-
|
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(
|
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
|
-
|
344
|
-
|
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
|
-
|
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
|
-
|
439
|
+
sprite = Miyako::Shape.text({:text => self, :font => data})
|
440
|
+
yield sprite if block_given?
|
441
|
+
return sprite
|
361
442
|
end
|
362
443
|
end
|
data/lib/Miyako/API/sprite.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
=begin
|
3
3
|
--
|
4
4
|
Miyako v2.0
|
5
|
-
Copyright (C) 2007-
|
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構造体)から生成。
|
63
|
-
#
|
64
|
-
#
|
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構造体)
|
70
|
-
#
|
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
|
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
|
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
|
-
|
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
|
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
|
-
|
335
|
-
|
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
|