ruby-miyako-mswin32 2.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 +1115 -0
- data/img/cursor.png +0 -0
- data/img/cursors.png +0 -0
- data/img/dice.png +0 -0
- data/img/wait_cursor.png +0 -0
- data/img/win_base.png +0 -0
- data/img/window.png +0 -0
- data/install_miyako.rb +87 -0
- data/lib/Miyako/API/audio.rb +584 -0
- data/lib/Miyako/API/basic_data.rb +1026 -0
- data/lib/Miyako/API/bitmap.rb +534 -0
- data/lib/Miyako/API/choices.rb +481 -0
- data/lib/Miyako/API/collision.rb +638 -0
- data/lib/Miyako/API/diagram.rb +586 -0
- data/lib/Miyako/API/drawing.rb +151 -0
- data/lib/Miyako/API/exceptions.rb +105 -0
- data/lib/Miyako/API/fixedmap.rb +462 -0
- data/lib/Miyako/API/font.rb +430 -0
- data/lib/Miyako/API/input.rb +456 -0
- data/lib/Miyako/API/layout.rb +644 -0
- data/lib/Miyako/API/map.rb +583 -0
- data/lib/Miyako/API/map_event.rb +222 -0
- data/lib/Miyako/API/modules.rb +357 -0
- data/lib/Miyako/API/movie.rb +166 -0
- data/lib/Miyako/API/parts.rb +188 -0
- data/lib/Miyako/API/plane.rb +205 -0
- data/lib/Miyako/API/screen.rb +341 -0
- data/lib/Miyako/API/shape.rb +443 -0
- data/lib/Miyako/API/sprite.rb +773 -0
- data/lib/Miyako/API/sprite_animation.rb +494 -0
- data/lib/Miyako/API/sprite_list.rb +1135 -0
- data/lib/Miyako/API/spriteunit.rb +168 -0
- data/lib/Miyako/API/story.rb +350 -0
- data/lib/Miyako/API/textbox.rb +773 -0
- data/lib/Miyako/API/utility.rb +419 -0
- data/lib/Miyako/API/viewport.rb +190 -0
- data/lib/Miyako/API/yuki.rb +1180 -0
- data/lib/Miyako/EXT/miyako_cairo.rb +62 -0
- data/lib/Miyako/EXT/raster_scroll.rb +138 -0
- data/lib/Miyako/EXT/slides.rb +157 -0
- data/lib/Miyako/miyako.rb +201 -0
- data/lib/Miyako/miyako_no_katana.so +0 -0
- data/lib/Miyako/miyako_require_only.rb +35 -0
- 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/sample/Animation1/m1ku.rb +68 -0
- data/sample/Animation1/m1ku_arm_0.png +0 -0
- data/sample/Animation1/m1ku_arm_1.png +0 -0
- data/sample/Animation1/m1ku_arm_2.png +0 -0
- data/sample/Animation1/m1ku_arm_3.png +0 -0
- data/sample/Animation1/m1ku_back.jpg +0 -0
- data/sample/Animation1/m1ku_body.png +0 -0
- data/sample/Animation1/m1ku_eye_0.png +0 -0
- data/sample/Animation1/m1ku_eye_1.png +0 -0
- data/sample/Animation1/m1ku_eye_2.png +0 -0
- data/sample/Animation1/m1ku_eye_3.png +0 -0
- data/sample/Animation1/m1ku_hair_front.png +0 -0
- data/sample/Animation1/m1ku_hair_rear.png +0 -0
- data/sample/Animation1/readme.txt +72 -0
- data/sample/Animation2/lex.rb +96 -0
- data/sample/Animation2/lex_back.png +0 -0
- data/sample/Animation2/lex_body.png +0 -0
- data/sample/Animation2/lex_roadroller.png +0 -0
- data/sample/Animation2/lex_wheel_0.png +0 -0
- data/sample/Animation2/lex_wheel_1.png +0 -0
- data/sample/Animation2/lex_wheel_2.png +0 -0
- data/sample/Animation2/readme.txt +72 -0
- data/sample/Animation2/song_title.png +0 -0
- data/sample/Diagram_sample/back.png +0 -0
- data/sample/Diagram_sample/chr01.png +0 -0
- data/sample/Diagram_sample/chr02.png +0 -0
- data/sample/Diagram_sample/cursor.png +0 -0
- data/sample/Diagram_sample/diagram_sample_yuki2.rb +329 -0
- data/sample/Diagram_sample/readme.txt +90 -0
- data/sample/Diagram_sample/wait_cursor.png +0 -0
- data/sample/Room3/blue.rb +297 -0
- data/sample/Room3/ending.rb +180 -0
- data/sample/Room3/green.rb +220 -0
- data/sample/Room3/image/akamatsu.png +0 -0
- data/sample/Room3/image/aoyama.png +0 -0
- data/sample/Room3/image/congra.png +0 -0
- data/sample/Room3/image/congratulation.png +0 -0
- data/sample/Room3/image/congratulation_bg.png +0 -0
- data/sample/Room3/image/cursor.png +0 -0
- data/sample/Room3/image/midori.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya.png +0 -0
- data/sample/Room3/image/mittsu_no_oheya_logo.png +0 -0
- data/sample/Room3/image/room_blue.png +0 -0
- data/sample/Room3/image/room_green.png +0 -0
- data/sample/Room3/image/room_red.png +0 -0
- data/sample/Room3/image/start.png +0 -0
- data/sample/Room3/image/three_doors.png +0 -0
- data/sample/Room3/image/wait_cursor.png +0 -0
- data/sample/Room3/main.rb +120 -0
- data/sample/Room3/main_component.rb +59 -0
- data/sample/Room3/readme.txt +76 -0
- data/sample/Room3/red.rb +227 -0
- data/sample/Room3/room3.rb +25 -0
- data/sample/Room3/title.rb +184 -0
- 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/cursor.png +0 -0
- data/sample/fixed_map_test/fixed_map_sample.rb +140 -0
- data/sample/fixed_map_test/map.csv +19 -0
- data/sample/fixed_map_test/map_01.png +0 -0
- data/sample/fixed_map_test/mapchip.csv +23 -0
- data/sample/fixed_map_test/monster.png +0 -0
- data/sample/fixed_map_test/readme.txt +72 -0
- data/sample/map_test/chara.rb +58 -0
- data/sample/map_test/chr1.png +0 -0
- data/sample/map_test/cursor.png +0 -0
- data/sample/map_test/main_parts.rb +69 -0
- data/sample/map_test/main_scene.rb +153 -0
- data/sample/map_test/map.png +0 -0
- data/sample/map_test/map2.png +0 -0
- data/sample/map_test/map_layer.csv +127 -0
- data/sample/map_test/map_manager.rb +75 -0
- data/sample/map_test/map_test.rb +23 -0
- data/sample/map_test/mapchip.csv +21 -0
- data/sample/map_test/oasis.rb +71 -0
- data/sample/map_test/readme.txt +89 -0
- data/sample/map_test/route.rb +157 -0
- data/sample/map_test/sea.png +0 -0
- data/sample/map_test/town.rb +74 -0
- data/sample/map_test/wait_cursor.png +0 -0
- data/sample/map_test/window.png +0 -0
- 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
- metadata +199 -0
@@ -0,0 +1,494 @@
|
|
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
|
+
module Miyako
|
24
|
+
#==アニメーション管理クラス
|
25
|
+
#スプライトのアニメーションの構築・実行を管理するクラス
|
26
|
+
class SpriteAnimation
|
27
|
+
include SpriteBase
|
28
|
+
include Animation
|
29
|
+
include Layout
|
30
|
+
include SingleEnumerable
|
31
|
+
|
32
|
+
attr_accessor :visible #レンダリングの可否(true->描画 false->非描画)
|
33
|
+
|
34
|
+
#===インスタンスの作成
|
35
|
+
#アニメーションを行うための初期設定を行う。
|
36
|
+
#アニメーションは2種類の方法があり、
|
37
|
+
#
|
38
|
+
#「一つのスプライトをow,ohプロパティで分割して、表示開始位置をずらすことでアニメーションを行う」方法と、
|
39
|
+
#
|
40
|
+
#(RPGのキャラチップを想定。 以降、「単体アニメーション」と呼ぶ)
|
41
|
+
#
|
42
|
+
#「複数枚のスプライトの配列を渡し、要素順に表示させることでアニメーションを行う」方法がある。
|
43
|
+
#
|
44
|
+
#(いわゆる「ぱらぱら漫画」方式。 以降、「配列アニメーション」と呼ぶ)
|
45
|
+
#
|
46
|
+
#「パターン番号」は、キャラクタパターン(画像を一定の大きさ(ow,oh)で切り分けた単位)の番号を意味する。
|
47
|
+
#
|
48
|
+
#単体アニメーションのときは、画像の左上から0,1,2,...と数える。
|
49
|
+
#
|
50
|
+
#配列アニメーションのときは、配列のインデックスがパターン番号となる。
|
51
|
+
#
|
52
|
+
#
|
53
|
+
#
|
54
|
+
#利用できるパラメータは以下の通り
|
55
|
+
#
|
56
|
+
#:sprite => sprite|spriteの配列 アニメーションさせるスプライト(インスタンス単体もしくはインスタンスの配列)。必須パラメータ
|
57
|
+
#
|
58
|
+
#:dir => :h|:v 単体アニメーションのとき、縦方向に位置をずらして表示させる(:h指定時)か、横方向か(:v指定時)を決定する。デフォルトは:h
|
59
|
+
#
|
60
|
+
#:pattern_list => 表示させるパターン番号を指定するための配列。配列の要素の順にパターンが表示される
|
61
|
+
#
|
62
|
+
#:loop => アニメーションを繰り返し更新するかどうかを示すフラグ。falseのときは、1回パターンを実行した後、アニメーションを終了する(true/false)
|
63
|
+
#
|
64
|
+
#_hash_:: パラメータ名とパラメータとのハッシュ
|
65
|
+
#返却値:: 生成されたインスタンス
|
66
|
+
def initialize(hash)
|
67
|
+
init_layout
|
68
|
+
@units = Array.new
|
69
|
+
@slist = nil
|
70
|
+
|
71
|
+
hash[:dir] ||= :h
|
72
|
+
@dir = hash[:dir]
|
73
|
+
s = hash[:sprite]
|
74
|
+
hash[:pattern_list] ||= nil
|
75
|
+
@plist = hash[:pattern_list]
|
76
|
+
hash[:wait] ||= 0
|
77
|
+
wait = hash[:wait]
|
78
|
+
hash[:move_offset] ||= nil
|
79
|
+
@move_offset = hash[:move_offset]
|
80
|
+
hash[:position_offset] ||= nil
|
81
|
+
@pos_offset = hash[:position_offset]
|
82
|
+
hash[:align] ||= :max
|
83
|
+
@align = hash[:align]
|
84
|
+
hash[:loop] ||= true
|
85
|
+
@loop = hash[:loop]
|
86
|
+
|
87
|
+
@pat_len = 1
|
88
|
+
@pat_olen = 1
|
89
|
+
@chr_len = 1
|
90
|
+
@chr_olen = 1
|
91
|
+
|
92
|
+
@slist = Array.new
|
93
|
+
if s.kind_of?(Sprite)
|
94
|
+
@now = s.to_unit unless @now
|
95
|
+
set_layout_size(s.ow, s.oh)
|
96
|
+
move_to!(s.x, s.y)
|
97
|
+
s.snap(self)
|
98
|
+
s.left!.top!
|
99
|
+
@pat_len = @dir == :h ? s.h : s.w
|
100
|
+
@pat_olen = @dir == :h ? s.oh : s.ow
|
101
|
+
@chr_len = @dir == :h ? s.w : s.h
|
102
|
+
@chr_olen = @dir == :h ? s.ow : s.oh
|
103
|
+
@pats = @pat_len / @pat_olen
|
104
|
+
elsif s.kind_of?(Array)
|
105
|
+
first = s[0]
|
106
|
+
@now = first.to_unit unless @now
|
107
|
+
set_layout_size(first.ow, first.oh)
|
108
|
+
move_to!(first.x, first.y)
|
109
|
+
@slist = s.map{|ss|
|
110
|
+
ss.snap(self)
|
111
|
+
ss.left!.top!
|
112
|
+
}
|
113
|
+
@pat_len = @slist.length
|
114
|
+
@pats = @slist.length
|
115
|
+
else
|
116
|
+
raise MiyakoTypeError, "Illegal sprite list for SpriteAnimation."
|
117
|
+
end
|
118
|
+
|
119
|
+
if @plist
|
120
|
+
if @align == :min
|
121
|
+
@pats = @plist.length if @pats > @plist.length
|
122
|
+
else
|
123
|
+
@pats = @plist.length if @pats < @plist.length
|
124
|
+
end
|
125
|
+
else
|
126
|
+
@plist = Array.new unless @plist
|
127
|
+
end
|
128
|
+
|
129
|
+
if @move_offset
|
130
|
+
if @align == :min
|
131
|
+
@pats = @move_offset.length if @pats > @move_offset.length
|
132
|
+
else
|
133
|
+
@pats = @move_offset.length if @pats < @move_offset.length
|
134
|
+
end
|
135
|
+
else
|
136
|
+
@move_offset = Array.new
|
137
|
+
end
|
138
|
+
|
139
|
+
if @pos_offset
|
140
|
+
if @align == :min
|
141
|
+
@pats = @pos_offset.length if @pats > @pos_offset.length
|
142
|
+
else
|
143
|
+
@pats = @pos_offset.length if @pats < @pos_offset.length
|
144
|
+
end
|
145
|
+
else
|
146
|
+
@pos_offset = Array.new
|
147
|
+
end
|
148
|
+
|
149
|
+
if wait.kind_of?(Array)
|
150
|
+
@waits = wait.collect{|w| w.kind_of?(Float) ? WaitCounter.new(w) : w }
|
151
|
+
if @align == :min
|
152
|
+
@pats = @waits.length if @pats > @waits.length
|
153
|
+
else
|
154
|
+
@pats = @waits.length if @pats < @waits.length
|
155
|
+
end
|
156
|
+
else
|
157
|
+
@waits = Array.new
|
158
|
+
end
|
159
|
+
|
160
|
+
if @plist.length == 0
|
161
|
+
@pats.times{|p| @plist.push(p)}
|
162
|
+
elsif @plist.length < @pats
|
163
|
+
@plist = @plist.cycle.take(@pats)
|
164
|
+
end
|
165
|
+
|
166
|
+
if @slist.length == 0
|
167
|
+
@slist = Array.new(@pats){|pat| s }
|
168
|
+
@units = Array.new(@pats){|pat|
|
169
|
+
u = @slist[pat].to_unit.dup
|
170
|
+
px = pat % (@pat_len / @pat_olen)
|
171
|
+
if @dir == :h
|
172
|
+
u.oy = @slist[pat].oh * @plist[px]
|
173
|
+
else
|
174
|
+
u.ox = @slist[pat].ow * @plist[px]
|
175
|
+
end
|
176
|
+
u
|
177
|
+
}
|
178
|
+
elsif @slist.length < @pats
|
179
|
+
tmp = @slist
|
180
|
+
@slist = @slist.cycle.take(@pats)
|
181
|
+
@units = Array.new(@pats){|pat| @slist[pat].to_unit.dup }
|
182
|
+
else
|
183
|
+
@units = Array.new(@pats){|pat| @slist[pat].to_unit.dup }
|
184
|
+
end
|
185
|
+
|
186
|
+
if @move_offset.length == 0
|
187
|
+
@move_offset = Array.new(@pats){|pat| Point.new(0,0) }
|
188
|
+
elsif @move_offset.length < @pats
|
189
|
+
@move_offset = @move_offset.cycle.take(@pats)
|
190
|
+
end
|
191
|
+
|
192
|
+
if @pos_offset.length == 0
|
193
|
+
@pos_offset = Array.new(@pats){|pat| 0 }
|
194
|
+
elsif @pos_offset.length < @pats
|
195
|
+
@pos_offset = @pos_offset.cycle.take(@pats)
|
196
|
+
end
|
197
|
+
|
198
|
+
if @waits.length == 0
|
199
|
+
if wait.kind_of?(Integer)
|
200
|
+
@waits = Array.new(@pats){|pat| wait}
|
201
|
+
elsif wait.kind_of?(Float)
|
202
|
+
@waits = Array.new(@pats){|pat| WaitCounter.new(wait)}
|
203
|
+
else
|
204
|
+
raise MiyakoTypeError, "Illegal counter class for SpriteAnimation."
|
205
|
+
end
|
206
|
+
elsif @waits.length < @pats
|
207
|
+
@waits = @waits.cycle.take(@pats)
|
208
|
+
end
|
209
|
+
|
210
|
+
@chrs = @chr_len / @chr_olen
|
211
|
+
|
212
|
+
@cnum = 0
|
213
|
+
@pnum = 0
|
214
|
+
@cnt = 0
|
215
|
+
@exec = false
|
216
|
+
@visible = true
|
217
|
+
|
218
|
+
@now = @units[0]
|
219
|
+
@now.move_to!(@slist[@plist[@pnum]].x + @move_offset[@pnum][0],
|
220
|
+
@slist[@plist[@pnum]].y + @move_offset[@pnum][1])
|
221
|
+
end
|
222
|
+
|
223
|
+
#===複写時に呼び出されるメソッド
|
224
|
+
#複写と同時に、本インスタンスに対するスナップの関係を解消するが、
|
225
|
+
#新しいパターンスプライトとスナップをやり直す
|
226
|
+
def initialize_copy(obj)
|
227
|
+
@units = @units.deep_dup
|
228
|
+
@slist = @slist.deep_dup
|
229
|
+
@plist = @plist.dup
|
230
|
+
@move_offset = @move_offset.dup
|
231
|
+
@pos_offset = @pos_offset.dup
|
232
|
+
@now = @units[@plist[@pnum]]
|
233
|
+
copy_layout
|
234
|
+
@slist.each{|s| s.snap(self)}
|
235
|
+
end
|
236
|
+
|
237
|
+
attr_accessor :visible
|
238
|
+
|
239
|
+
#=== 現在表示しているスプライトの x 座標の値を取得する
|
240
|
+
#返却値:: x 座標の値
|
241
|
+
def x
|
242
|
+
return @now.x
|
243
|
+
end
|
244
|
+
|
245
|
+
#=== 現在表示しているスプライトの y 座標の値を取得する
|
246
|
+
#返却値:: y 座標の値
|
247
|
+
def y
|
248
|
+
return @now.y
|
249
|
+
end
|
250
|
+
|
251
|
+
#=== 現在表示しているスプライトの幅を取得する
|
252
|
+
#返却値:: 現在表示しているスプライトの幅(ピクセル単位)
|
253
|
+
def w
|
254
|
+
return @now.ow
|
255
|
+
end
|
256
|
+
|
257
|
+
#=== 現在表示しているスプライトの高さを取得する
|
258
|
+
#返却値:: 現在表示しているスプライトの高さ(ピクセル単位)
|
259
|
+
def h
|
260
|
+
return @now.oh
|
261
|
+
end
|
262
|
+
|
263
|
+
def update_layout_position #:nodoc:
|
264
|
+
@units.each{|u| u.move_to!(*@layout.pos)}
|
265
|
+
end
|
266
|
+
|
267
|
+
#===現在表示しているスプライトのowを取得する
|
268
|
+
#返却値:: スプライトのow
|
269
|
+
def ow
|
270
|
+
return @now.ow
|
271
|
+
end
|
272
|
+
|
273
|
+
#===現在表示しているスプライトのohを取得する
|
274
|
+
#返却値:: スプライトのoh
|
275
|
+
def oh
|
276
|
+
return @now.oh
|
277
|
+
end
|
278
|
+
|
279
|
+
#===表示するパターンの番号を変更する
|
280
|
+
#_pnum_:: パターン番号
|
281
|
+
def pattern=(pnum)
|
282
|
+
@pnum = pnum if pnum < @pats
|
283
|
+
set_pat
|
284
|
+
@cnt = @waits[@plist[@pnum]] if @exec
|
285
|
+
return self
|
286
|
+
end
|
287
|
+
|
288
|
+
#===現在表示しているパターンを取得する
|
289
|
+
#返却値:: 現在表示しているスプライトのインスタンス
|
290
|
+
def pattern
|
291
|
+
return @plist[@pnum]
|
292
|
+
end
|
293
|
+
|
294
|
+
#===キャラクター番号を設定する
|
295
|
+
#キャラクター番号(アニメーションさせるときに表示させるパターン群インデックス)
|
296
|
+
#を設定する。範囲外のキャラクター番号が設定された時は何も行わない
|
297
|
+
#_cnum_:: キャラクター番号
|
298
|
+
def character=(cnum)
|
299
|
+
return self if (cnum < 0 || cnum >= @chrs)
|
300
|
+
@cnum = cnum
|
301
|
+
set_chr
|
302
|
+
end
|
303
|
+
|
304
|
+
#===あとで書く
|
305
|
+
#_d_:: あとで書く
|
306
|
+
#返却値:: あとで書く
|
307
|
+
def move_character(d)
|
308
|
+
@cnum = (@cnum + d) % @chrs
|
309
|
+
@cnum = @cnum + @chrs if @cnum < 0
|
310
|
+
set_chr
|
311
|
+
return self
|
312
|
+
end
|
313
|
+
|
314
|
+
#===現在のキャラクター番号を取得する
|
315
|
+
#返却値:: キャラクター番号(0以上の整数)
|
316
|
+
def character
|
317
|
+
return @cnum
|
318
|
+
end
|
319
|
+
|
320
|
+
#===アニメーションを開始する
|
321
|
+
#パターンがリセットされていないときは、一時停止から復帰した時と同じ動作をする
|
322
|
+
#返却値:: 自分自身
|
323
|
+
def start
|
324
|
+
return self if @exec
|
325
|
+
set_pat
|
326
|
+
if @dir == :h
|
327
|
+
@now.oy += @pos_offset[@pnum]
|
328
|
+
else
|
329
|
+
@now.ox += @pos_offset[@pnum]
|
330
|
+
end
|
331
|
+
@cnt = @waits[@plist[@pnum]]
|
332
|
+
@cnt.start if @cnt.kind_of?(WaitCounter)
|
333
|
+
@exec = true
|
334
|
+
return self
|
335
|
+
end
|
336
|
+
|
337
|
+
#===アニメーションを停止する
|
338
|
+
#停止しても、表示していたパターンはリセットされていない
|
339
|
+
#返却値:: 自分自身
|
340
|
+
def stop
|
341
|
+
return self unless @exec
|
342
|
+
if @dir == :h
|
343
|
+
@now.oy -= @pos_offset[@pnum]
|
344
|
+
else
|
345
|
+
@now.ox -= @pos_offset[@pnum]
|
346
|
+
end
|
347
|
+
@cnt.stop if @cnt.kind_of?(WaitCounter)
|
348
|
+
@exec = false
|
349
|
+
return self
|
350
|
+
end
|
351
|
+
|
352
|
+
#===アニメーションの開始・停止を切り替える
|
353
|
+
#返却値:: 自分自身
|
354
|
+
def toggle_exec
|
355
|
+
if @exec
|
356
|
+
stop
|
357
|
+
else
|
358
|
+
start
|
359
|
+
end
|
360
|
+
return self
|
361
|
+
end
|
362
|
+
|
363
|
+
#===アニメーションの更新を行う
|
364
|
+
#アニメーションのカウントをチェックし、カウントが終了したときは新しいパターンに切り替えて、カウントを開始する
|
365
|
+
#すべてのパターンのアニメーションが終了すれば、最初のパターンに戻り、カウントを開始する
|
366
|
+
#但し、インスタンス生成時に:loop->falseを設定していれば、アニメーションを終了する
|
367
|
+
#返却値:: アニメーションパターンが切り替わればtrue、切り替わらないとき、アニメーションが終了したときはfalseを返す
|
368
|
+
def update_animation
|
369
|
+
end
|
370
|
+
|
371
|
+
def update_frame #:nodoc:
|
372
|
+
if @cnt > 0
|
373
|
+
@cnt -= 1
|
374
|
+
return false
|
375
|
+
end
|
376
|
+
@pnum = (@pnum + 1) % @pats
|
377
|
+
if @loop == false && @pnum == 0
|
378
|
+
stop
|
379
|
+
return false
|
380
|
+
end
|
381
|
+
set_pat
|
382
|
+
@cnt = @waits[@plist[@pnum]]
|
383
|
+
return true
|
384
|
+
end
|
385
|
+
|
386
|
+
def update_wait_counter #:nodoc:
|
387
|
+
return false if @cnt.waiting?
|
388
|
+
@pnum = (@pnum + 1) % @pats
|
389
|
+
if @loop == false && @pnum == 0
|
390
|
+
stop
|
391
|
+
return false
|
392
|
+
end
|
393
|
+
set_pat
|
394
|
+
@cnt = @waits[@plist[@pnum]]
|
395
|
+
@cnt.start
|
396
|
+
return true
|
397
|
+
end
|
398
|
+
|
399
|
+
def set_pat #:nodoc:
|
400
|
+
@now = @units[@plist[@pnum]]
|
401
|
+
end
|
402
|
+
|
403
|
+
def set_chr #:nodoc:
|
404
|
+
@units.each{|u|
|
405
|
+
if @dir == :h
|
406
|
+
u.ox = @chr_olen * @cnum
|
407
|
+
else
|
408
|
+
u.oy = @chr_olen * @cnum
|
409
|
+
end
|
410
|
+
}
|
411
|
+
end
|
412
|
+
|
413
|
+
#===アニメーションのパターンをリセットする
|
414
|
+
#返却値:: 自分自身
|
415
|
+
def reset
|
416
|
+
@pnum = 0
|
417
|
+
@cnt = 0
|
418
|
+
return self
|
419
|
+
end
|
420
|
+
|
421
|
+
#===アニメーションが実行中かを返す
|
422
|
+
#返却値:: アニメーションが実行されていれば true
|
423
|
+
def exec?
|
424
|
+
return @exec
|
425
|
+
end
|
426
|
+
|
427
|
+
#===現在実行中のパターンの元になったスプライトユニットを返す
|
428
|
+
#得られるインスタンスは内部でしようしてるものの複写
|
429
|
+
#返却値:: 現在表示しているスプライトユニット
|
430
|
+
def to_unit
|
431
|
+
return @now.dup
|
432
|
+
end
|
433
|
+
|
434
|
+
#=== 現在実行中のパターンの画像を返す
|
435
|
+
#返却値:: 現在表示している画像(bitmap)
|
436
|
+
def bitmap
|
437
|
+
return @now.bitmap
|
438
|
+
end
|
439
|
+
|
440
|
+
#===現在実行中のパターンの元になったインスタンスを返す
|
441
|
+
#取得するパターンは、元になったインスタンスのto_spriteメソッドを呼び出した時の値となる
|
442
|
+
#引数1個のブロックを渡せば、スプライトに補正をかけることが出来る
|
443
|
+
#返却値:: 現在表示しているスプライト
|
444
|
+
def to_sprite(&block)
|
445
|
+
return @slist[@plist[@pnum]].to_sprite(&block)
|
446
|
+
end
|
447
|
+
|
448
|
+
#===現在表示しているスプライトの大きさを矩形で取得する
|
449
|
+
#返却値:: 生成された矩形(Rect構造体のインスタンス)
|
450
|
+
def rect
|
451
|
+
return Rect.new(@now.x, @now.y, @now.ow, @now.oh)
|
452
|
+
end
|
453
|
+
|
454
|
+
#===現在表示しているスプライトの最大の大きさを矩形で取得する
|
455
|
+
#現在のパターンの大きさと同じため、rectメソッドの値と同一となる
|
456
|
+
#返却値:: 生成された矩形(Rect構造体のインスタンス)
|
457
|
+
def broad_rect
|
458
|
+
return self.rect
|
459
|
+
end
|
460
|
+
|
461
|
+
#===インスタンスに束縛されているオブジェクトを解放する
|
462
|
+
def dispose
|
463
|
+
@slist.clear
|
464
|
+
@units.each{|u| u.bitmap = nil}
|
465
|
+
@units.clear
|
466
|
+
@waits.clear
|
467
|
+
@plist.clear
|
468
|
+
@move_offset.clear
|
469
|
+
@pos_offset.clear
|
470
|
+
end
|
471
|
+
|
472
|
+
#===アニメーションの現在の画像を画面に描画する
|
473
|
+
#転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
|
474
|
+
#画面の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
|
475
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
|
476
|
+
#(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
|
477
|
+
#ブロックの引数は、|インスタンスのSpriteUnit|となる。
|
478
|
+
#visibleメソッドの値がfalseのときは描画されない。
|
479
|
+
def render
|
480
|
+
end
|
481
|
+
|
482
|
+
#===アニメーションの現在の画像を画像に描画する
|
483
|
+
#転送元の描画範囲は、src側SpriteUnitの(ox,oy)を起点に、src側(ow,oh)の範囲で転送する。
|
484
|
+
#転送先の描画範囲は、src側SpriteUnitの(x,y)を起点に設定にする。
|
485
|
+
#ブロック付きで呼び出し可能(レシーバに対応したSpriteUnit構造体が引数として得られるので、補正をかけることが出来る)
|
486
|
+
#(ブロック引数のインスタンスは複写しているので、メソッドの引数として渡した値が持つSpriteUnitには影響しない)
|
487
|
+
#ブロックの引数は、|インスタンスのSpriteUnit,転送先のSpriteUnit|となる。
|
488
|
+
#visibleメソッドの値がfalseのときは描画されない。
|
489
|
+
#_dst_:: 転送先ビットマップ(to_unitメソッドを呼び出すことが出来る/値がnilではないインスタンス)
|
490
|
+
def render_to(dst)
|
491
|
+
end
|
492
|
+
end
|
493
|
+
end
|
494
|
+
|