ruby-miyako-mswin32 2.1.10 → 2.1.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -47,6 +47,9 @@ class Numeric
47
47
  end
48
48
 
49
49
  module Miyako
50
+ # for init_layout
51
+ module Screen
52
+ end
50
53
 
51
54
  #==レイアウト情報を示す構造体
52
55
  LayoutStruct = Struct.new(:pos, :size, :base, :snap, :on_move)
@@ -74,7 +77,7 @@ module Miyako
74
77
  @layout = LayoutStruct.new
75
78
  @layout.pos = Point.new(0, 0)
76
79
  @layout.size = Size.new(0, 0)
77
- @layout.base = Screen
80
+ @layout.base = Miyako::Screen
78
81
  @layout.snap = LayoutSnapStruct.new(nil, Array.new)
79
82
  @layout.on_move = []
80
83
  end
@@ -110,162 +113,162 @@ module Miyako
110
113
  # move,move_toの各メソッド。
111
114
  #返却値:: ブロック管理配列
112
115
  def on_move
113
- return @layout.on_move
116
+ return @layout.on_move
114
117
  end
115
118
 
116
119
  #===mixinしたインスタンスの位置を左端(x軸)に移動させる
117
- #設置するとき、基準となる空間の内側に設置される
120
+ #設置するとき、基準となる空間の内側に設置される
118
121
  #ブロックでは、数値を返却することで、左端からのマージンを設定できる(正の方向へ移動)
119
122
  #ブロック引数は、自分自身の幅
120
123
  #返却値:: 自分自身
121
124
  def left!(&margin)
122
- base = @layout.base.rect
123
- t = @layout.pos[0]
124
- @layout.pos[0] = base[0] + (margin ? margin[base[2]].to_i : 0)
125
+ base = @layout.base.rect
126
+ t = @layout.pos[0]
127
+ @layout.pos[0] = base[0] + (margin ? margin[base[2]].to_i : 0)
125
128
  @layout.snap.children.each{|c| c.left(&margin) }
126
129
  update_layout(@layout.pos[0]-t, 0)
127
130
  @layout.on_move.each{|block|
128
131
  block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)
129
132
  }
130
- return self
133
+ return self
131
134
  end
132
135
 
133
136
  #===mixinしたインスタンスの位置を左端(x軸)に移動させる
134
- #設置するとき、基準となる空間の外側に設置される
137
+ #設置するとき、基準となる空間の外側に設置される
135
138
  #ブロックでは、数値を返却することで、左端からのマージンを設定できる(負の方向へ移動)
136
139
  #ブロック引数は、自分自身の幅
137
140
  #返却値:: 自分自身
138
141
  def outside_left!(&margin)
139
- base = @layout.base.rect
140
- t = @layout.pos[0]
141
- @layout.pos[0] = base[0] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
142
+ base = @layout.base.rect
143
+ t = @layout.pos[0]
144
+ @layout.pos[0] = base[0] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
142
145
  update_layout(@layout.pos[0]-t, 0)
143
146
  @layout.on_move.each{|block|
144
147
  block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)
145
148
  }
146
- return self
149
+ return self
147
150
  end
148
151
 
149
152
  #===mixinしたインスタンスの位置を中間(x軸)に移動させる
150
153
  #返却値:: 自分自身
151
154
  def center!
152
- base = @layout.base.rect
153
- t = @layout.pos[0]
154
- @layout.pos[0] = base[0] + (base[2] >> 1) - (@layout.size[0] >> 1)
155
+ base = @layout.base.rect
156
+ t = @layout.pos[0]
157
+ @layout.pos[0] = base[0] + (base[2] >> 1) - (@layout.size[0] >> 1)
155
158
  update_layout(@layout.pos[0]-t, 0)
156
159
  @layout.on_move.each{|block|
157
160
  block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)
158
161
  }
159
- return self
162
+ return self
160
163
  end
161
164
 
162
165
  #===mixinしたインスタンスの位置を右端(x軸)に移動させる
163
- #設置するとき、基準となる空間の内側に設置される
166
+ #設置するとき、基準となる空間の内側に設置される
164
167
  #ブロックでは、数値を返却することで、右端からのマージンを設定できる(負の方向へ移動)
165
168
  #ブロック引数は、自分自身の幅
166
169
  #返却値:: 自分自身
167
170
  def right!(&margin)
168
- base = @layout.base.rect
169
- t = @layout.pos[0]
170
- @layout.pos[0] = base[0] + base[2] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
171
+ base = @layout.base.rect
172
+ t = @layout.pos[0]
173
+ @layout.pos[0] = base[0] + base[2] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
171
174
  update_layout(@layout.pos[0]-t, 0)
172
175
  @layout.on_move.each{|block|
173
176
  block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)
174
177
  }
175
- return self
178
+ return self
176
179
  end
177
180
 
178
181
  #===mixinしたインスタンスの位置を右端(x軸)に移動させる
179
- #設置するとき、基準となる空間の外側に設置される
182
+ #設置するとき、基準となる空間の外側に設置される
180
183
  #ブロックでは、数値を返却することで、右端からのマージンを設定できる(正の方向へ移動)
181
184
  #ブロック引数は、自分自身の幅
182
185
  #返却値:: 自分自身
183
186
  def outside_right!(&margin)
184
- base = @layout.base.rect
185
- t = @layout.pos[0]
186
- @layout.pos[0] = base[0] + base[2] + (margin ? margin[base[2]].to_i : 0)
187
+ base = @layout.base.rect
188
+ t = @layout.pos[0]
189
+ @layout.pos[0] = base[0] + base[2] + (margin ? margin[base[2]].to_i : 0)
187
190
  update_layout(@layout.pos[0]-t, 0)
188
191
  @layout.on_move.each{|block|
189
192
  block.call(self, @layout.pos[0], @layout.pos[1], @layout.pos[0]-t, 0)
190
193
  }
191
- return self
194
+ return self
192
195
  end
193
196
 
194
197
  #===mixinしたインスタンスの位置を上端(y軸)に移動させる
195
- #設置するとき、基準となる空間の内側に設置される
198
+ #設置するとき、基準となる空間の内側に設置される
196
199
  #ブロックでは、数値を返却することで、上端からのマージンを設定できる(正の方向へ移動)
197
200
  #ブロック引数は、自分自身の幅
198
201
  #返却値:: 自分自身
199
202
  def top!(&margin)
200
- base = @layout.base.rect
201
- t = @layout.pos[1]
202
- @layout.pos[1] = base[1] + (margin ? margin[base[3]].to_i : 0)
203
+ base = @layout.base.rect
204
+ t = @layout.pos[1]
205
+ @layout.pos[1] = base[1] + (margin ? margin[base[3]].to_i : 0)
203
206
  update_layout(0, @layout.pos[1]-t)
204
207
  @layout.on_move.each{|block|
205
208
  block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)
206
209
  }
207
- return self
210
+ return self
208
211
  end
209
212
 
210
213
  #===mixinしたインスタンスの位置を上端(y軸)に移動させる
211
- #設置するとき、基準となる空間の内側に設置される
214
+ #設置するとき、基準となる空間の内側に設置される
212
215
  #ブロックでは、数値を返却することで、上端からのマージンを設定できる(負の方向へ移動)
213
216
  #ブロック引数は、自分自身の幅
214
217
  #返却値:: 自分自身
215
218
  def outside_top!(&margin)
216
- base = @layout.base.rect
217
- t = @layout.pos[1]
218
- @layout.pos[1] = base[1] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
219
+ base = @layout.base.rect
220
+ t = @layout.pos[1]
221
+ @layout.pos[1] = base[1] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
219
222
  update_layout(0, @layout.pos[1]-t)
220
223
  @layout.on_move.each{|block|
221
224
  block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)
222
225
  }
223
- return self
226
+ return self
224
227
  end
225
228
 
226
229
  #===mixinしたインスタンスの位置を中間(y軸)に移動させる
227
230
  #返却値:: 自分自身
228
231
  def middle!
229
- base = @layout.base.rect
230
- t = @layout.pos[1]
231
- @layout.pos[1] = base[1] + (base[3] >> 1) - (@layout.size[1] >> 1)
232
+ base = @layout.base.rect
233
+ t = @layout.pos[1]
234
+ @layout.pos[1] = base[1] + (base[3] >> 1) - (@layout.size[1] >> 1)
232
235
  update_layout(0, @layout.pos[1]-t)
233
236
  @layout.on_move.each{|block|
234
237
  block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)
235
238
  }
236
- return self
239
+ return self
237
240
  end
238
241
 
239
242
  #===mixinしたインスタンスの位置を下端(y軸)に移動させる
240
- #設置するとき、基準となる空間の内側に設置される
243
+ #設置するとき、基準となる空間の内側に設置される
241
244
  #ブロックでは、数値を返却することで、下端からのマージンを設定できる(負の方向へ移動)
242
245
  #ブロック引数は、自分自身の幅
243
246
  #返却値:: 自分自身
244
247
  def bottom!(&margin)
245
- base = @layout.base.rect
246
- t = @layout.pos[1]
247
- @layout.pos[1] = base[1] + base[3] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
248
+ base = @layout.base.rect
249
+ t = @layout.pos[1]
250
+ @layout.pos[1] = base[1] + base[3] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
248
251
  update_layout(0, @layout.pos[1]-t)
249
252
  @layout.on_move.each{|block|
250
253
  block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)
251
254
  }
252
- return self
255
+ return self
253
256
  end
254
257
 
255
258
  #===mixinしたインスタンスの位置を下端(y軸)に移動させる
256
- #設置するとき、基準となる空間の外側に設置される
259
+ #設置するとき、基準となる空間の外側に設置される
257
260
  #ブロックでは、数値を返却することで、下端からのマージンを設定できる(正の方向へ移動)
258
261
  #ブロック引数は、自分自身の幅
259
262
  #返却値:: 自分自身
260
263
  def outside_bottom!(&margin)
261
- base = @layout.base.rect
262
- t = @layout.pos[1]
263
- @layout.pos[1] = base[1] + base[3] + (margin ? margin[base[3]].to_i : 0)
264
+ base = @layout.base.rect
265
+ t = @layout.pos[1]
266
+ @layout.pos[1] = base[1] + base[3] + (margin ? margin[base[3]].to_i : 0)
264
267
  update_layout(0, @layout.pos[1]-t)
265
268
  @layout.on_move.each{|block|
266
269
  block.call(self, @layout.pos[0], @layout.pos[1], 0, @layout.pos[1]-t)
267
270
  }
268
- return self
271
+ return self
269
272
  end
270
273
 
271
274
  #===インスタンスを画面(スナップ先インスタンス)の中心に移動する
@@ -277,137 +280,137 @@ module Miyako
277
280
  end
278
281
 
279
282
  #===mixinしたインスタンスの位置を左端(x軸)に移動させたときの位置を返す
280
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
281
- #基準となる空間の内側に設置されたとして算出する
283
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
284
+ #基準となる空間の内側に設置されたとして算出する
282
285
  #ブロックでは、数値を返却することで、左端からのマージンを設定できる(正の方向へ移動)
283
286
  #ブロック引数は、自分自身の幅
284
287
  #返却値:: 移動後の位置(Position構造体)
285
288
  def left(&margin)
286
- base = @layout.base.rect
287
- pos = @layout.pos.dup
288
- pos[0] = base[0] + (margin ? margin[base[2]].to_i : 0)
289
+ base = @layout.base.rect
290
+ pos = @layout.pos.dup
291
+ pos[0] = base[0] + (margin ? margin[base[2]].to_i : 0)
289
292
  return pos
290
293
  end
291
294
 
292
295
  #===mixinしたインスタンスの位置を左端(x軸)に移動させたときの位置を返す
293
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
294
- #基準となる空間の外側に設置されたとして算出する
296
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
297
+ #基準となる空間の外側に設置されたとして算出する
295
298
  #ブロックでは、数値を返却することで、左端からのマージンを設定できる(負の方向へ移動)
296
299
  #ブロック引数は、自分自身の幅
297
300
  #返却値:: 移動後の位置(Position構造体)
298
301
  def outside_left(&margin)
299
- base = @layout.base.rect
300
- pos = @layout.pos.dup
301
- pos[0] = base[0] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
302
+ base = @layout.base.rect
303
+ pos = @layout.pos.dup
304
+ pos[0] = base[0] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
302
305
  return pos
303
306
  end
304
307
 
305
308
  #===mixinしたインスタンスの位置を中間(x軸)に移動させたときの位置を返す
306
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
309
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
307
310
  #返却値:: 移動後の位置(Position構造体)
308
311
  def center
309
- base = @layout.base.rect
310
- pos = @layout.pos.dup
311
- pos[0] = base[0] + (base[2] >> 1) - (@layout.size[0] >> 1)
312
+ base = @layout.base.rect
313
+ pos = @layout.pos.dup
314
+ pos[0] = base[0] + (base[2] >> 1) - (@layout.size[0] >> 1)
312
315
  return pos
313
316
  end
314
317
 
315
318
  #===mixinしたインスタンスの位置を右端(x軸)に移動させたときの位置を返す
316
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
317
- #基準となる空間の内側に設置されたとして算出する
319
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
320
+ #基準となる空間の内側に設置されたとして算出する
318
321
  #ブロックでは、数値を返却することで、右端からのマージンを設定できる(負の方向へ移動)
319
322
  #ブロック引数は、自分自身の幅
320
323
  #返却値:: 移動後の位置(Position構造体)
321
324
  def right(&margin)
322
- base = @layout.base.rect
323
- pos = @layout.pos.dup
324
- pos[0] = base[0] + base[2] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
325
+ base = @layout.base.rect
326
+ pos = @layout.pos.dup
327
+ pos[0] = base[0] + base[2] - @layout.size[0] - (margin ? margin[base[2]].to_i : 0)
325
328
  return pos
326
329
  end
327
330
 
328
331
  #===mixinしたインスタンスの位置を右端(x軸)に移動させたときの位置を返す
329
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
330
- #基準となる空間の外側に設置されたとして算出する
332
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
333
+ #基準となる空間の外側に設置されたとして算出する
331
334
  #ブロックでは、数値を返却することで、右端からのマージンを設定できる(正の方向へ移動)
332
335
  #ブロック引数は、自分自身の幅
333
336
  #返却値:: 移動後の位置(Position構造体)
334
337
  def outside_right(&margin)
335
- base = @layout.base.rect
336
- pos = @layout.pos.dup
337
- pos[0] = base[0] + base[2] + (margin ? margin[base[2]].to_i : 0)
338
+ base = @layout.base.rect
339
+ pos = @layout.pos.dup
340
+ pos[0] = base[0] + base[2] + (margin ? margin[base[2]].to_i : 0)
338
341
  return pos
339
342
  end
340
343
 
341
344
  #===mixinしたインスタンスの位置を上端(y軸)に移動させたときの位置を返す
342
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
343
- #基準となる空間の内側に設置されたとして算出する
345
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
346
+ #基準となる空間の内側に設置されたとして算出する
344
347
  #ブロックでは、数値を返却することで、上端からのマージンを設定できる(正の方向へ移動)
345
348
  #ブロック引数は、自分自身の幅
346
349
  #返却値:: 移動後の位置(Position構造体)
347
350
  def top(&margin)
348
- base = @layout.base.rect
349
- pos = @layout.pos.dup
350
- pos[1] = base[1] + (margin ? margin[base[3]].to_i : 0)
351
+ base = @layout.base.rect
352
+ pos = @layout.pos.dup
353
+ pos[1] = base[1] + (margin ? margin[base[3]].to_i : 0)
351
354
  return pos
352
355
  end
353
356
 
354
357
  #===mixinしたインスタンスの位置を上端(y軸)に移動させたときの位置を返す
355
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
356
- #基準となる空間の外側に設置されたとして算出する
358
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
359
+ #基準となる空間の外側に設置されたとして算出する
357
360
  #ブロックでは、数値を返却することで、上端からのマージンを設定できる(負の方向へ移動)
358
361
  #ブロック引数は、自分自身の幅
359
362
  #返却値:: 移動後の位置(Position構造体)
360
363
  def outside_top(&margin)
361
- base = @layout.base.rect
362
- pos = @layout.pos.dup
363
- pos[1] = base[1] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
364
+ base = @layout.base.rect
365
+ pos = @layout.pos.dup
366
+ pos[1] = base[1] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
364
367
  return pos
365
368
  end
366
369
 
367
370
  #===mixinしたインスタンスの位置を中間(y軸)に移動させたときの位置を返す
368
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
371
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
369
372
  #返却値:: 移動後の位置(Position構造体)
370
373
  def middle
371
- base = @layout.base.rect
372
- pos = @layout.pos.dup
373
- pos[1] = base[1] + (base[3] >> 1) - (@layout.size[1] >> 1)
374
+ base = @layout.base.rect
375
+ pos = @layout.pos.dup
376
+ pos[1] = base[1] + (base[3] >> 1) - (@layout.size[1] >> 1)
374
377
  return pos
375
378
  end
376
379
 
377
380
  #===mixinしたインスタンスの位置を下端(y軸)に移動させたときの位置を返す
378
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
379
- #基準となる空間の内側に設置されたとして算出する
381
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
382
+ #基準となる空間の内側に設置されたとして算出する
380
383
  #ブロックでは、数値を返却することで、下端からのマージンを設定できる(負の方向へ移動)
381
384
  #ブロック引数は、自分自身の幅
382
385
  #返却値:: 移動後の位置(Position構造体)
383
386
  def bottom(&margin)
384
- base = @layout.base.rect
385
- pos = @layout.pos.dup
386
- pos[1] = base[1] + base[3] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
387
+ base = @layout.base.rect
388
+ pos = @layout.pos.dup
389
+ pos[1] = base[1] + base[3] - @layout.size[1] - (margin ? margin[base[3]].to_i : 0)
387
390
  return pos
388
391
  end
389
392
 
390
393
  #===mixinしたインスタンスの位置を下端(y軸)に移動させたときの位置を返す
391
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
392
- #基準となる空間の外側に設置されたとして算出する
394
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
395
+ #基準となる空間の外側に設置されたとして算出する
393
396
  #ブロックでは、数値を返却することで、下端からのマージンを設定できる(正の方向へ移動)
394
397
  #ブロック引数は、自分自身の幅
395
398
  #返却値:: 移動後の位置(Position構造体)
396
399
  def outside_bottom(&margin)
397
- base = @layout.base.rect
398
- pos = @layout.pos.dup
399
- pos[1] = base[1] + base[3] + (margin ? margin[base[3]].to_i : 0)
400
+ base = @layout.base.rect
401
+ pos = @layout.pos.dup
402
+ pos[1] = base[1] + base[3] + (margin ? margin[base[3]].to_i : 0)
400
403
  return pos
401
404
  end
402
405
 
403
406
  #===インスタンスを画面(スナップ先インスタンス)の中心に移動したときの位置を返す
404
- #但し、移動したときの位置を返すだけで、自身の位置は変わらない
407
+ #但し、移動したときの位置を返すだけで、自身の位置は変わらない
405
408
  #返却値:: 移動後の位置(Position構造体)
406
409
  def centering
407
- base = @layout.base.rect
408
- pos = @layout.pos.dup
409
- pos[0] = base[0] + (base[2] >> 1) - (@layout.size[0] >> 1)
410
- pos[1] = base[1] + (base[3] >> 1) - (@layout.size[1] >> 1)
410
+ base = @layout.base.rect
411
+ pos = @layout.pos.dup
412
+ pos[0] = base[0] + (base[2] >> 1) - (@layout.size[0] >> 1)
413
+ pos[1] = base[1] + (base[3] >> 1) - (@layout.size[1] >> 1)
411
414
  return pos
412
415
  end
413
416
 
@@ -461,7 +464,7 @@ module Miyako
461
464
  alias :layout_size :size
462
465
 
463
466
  #===インスタンスのサイズをレイアウト情報に反映させる
464
- #このメソッドが呼び出されると、スナップ先のインスタンスの位置情報がリセットされることに注意
467
+ #このメソッドが呼び出されると、スナップ先のインスタンスの位置情報がリセットされることに注意
465
468
  #_w_:: インスタンスの幅(たとえば、Sprite#ow の値)
466
469
  #_h_:: インスタンスの幅(たとえば、Sprite#oh の値)
467
470
  #返却値:: 自分自身を返す
@@ -508,7 +511,7 @@ module Miyako
508
511
  end
509
512
 
510
513
  #===すべてのインスタンスとの依存関係を解消する
511
- #このメソッドが呼び出されると、スナップ先のインスタンスの位置情報がリセットされることに注意
514
+ #このメソッドが呼び出されると、スナップ先のインスタンスの位置情報がリセットされることに注意
512
515
  #返却値:: 自分自身を返す
513
516
  def reset_snap
514
517
  @layout.snap.sprite = nil
@@ -616,9 +619,9 @@ module Miyako
616
619
  # 生成される線分は、x方向が[pos.x,pos.x+ow-1]、y方向が[pos.y,pos.y+oh-1]となる
617
620
  #返却値:: 生成したSegments構造体インスタンス
618
621
  def segment
619
- return Segments.new([@layout.pos[0],
622
+ return Segments.new([@layout.pos[0],
620
623
  @layout.pos[0]+@layout.size[0]-1],
621
- [@layout.pos[1],
624
+ [@layout.pos[1],
622
625
  @layout.pos[1]+@layout.size[1]-1])
623
626
  end
624
627
  end
@@ -86,6 +86,18 @@ module Miyako
86
86
  return 0
87
87
  end
88
88
 
89
+ #=== mixin されたインスタンスの部分矩形開始位置(x軸)を取得する
90
+ #返却値:: 部分矩形開始位置(デフォルトは0)
91
+ def ox=(v)
92
+ v
93
+ end
94
+
95
+ #=== mixin されたインスタンスの部分矩形開始位置(y軸)を取得する
96
+ #返却値::部分矩形開始位置(デフォルトは0)
97
+ def oy=(v)
98
+ v
99
+ end
100
+
89
101
  #=== mixin されたインスタンスの部分矩形幅を取得する
90
102
  #返却値:: インスタンスの幅(デフォルトは0)
91
103
  def ow
@@ -98,6 +110,18 @@ module Miyako
98
110
  return 0
99
111
  end
100
112
 
113
+ #=== mixin されたインスタンスの部分矩形幅を取得する
114
+ #返却値:: インスタンスの幅(デフォルトは0)
115
+ def ow=(v)
116
+ v
117
+ end
118
+
119
+ #=== mixin されたインスタンスの部分矩形高を取得する
120
+ #返却値:: インスタンスの高さ(デフォルトは0)
121
+ def oh=(v)
122
+ v
123
+ end
124
+
101
125
  #=== スプライトの部分矩形を返す
102
126
  #返却値:: Rect構造体インスタンス(デフォルトはnil)
103
127
  def part_rect
@@ -284,7 +308,7 @@ module Miyako
284
308
  #_v_:: 設定する値(true/false)
285
309
  #返却値:: 自分自身を返す
286
310
  def visible=(v)
287
- self.sprite_only.each{|e| e.visible = v}
311
+ self.each{|e| e.visible = v if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
288
312
  return self
289
313
  end
290
314
 
@@ -308,9 +332,9 @@ module Miyako
308
332
  #返却値:: 自分自身を返す
309
333
  def move!(dx, dy)
310
334
  if block_given?
311
- self.sprite_only.each_with_index{|e, i| e.move!(*(yield e, i, dx, dy))}
335
+ self.each_with_index{|e, i| e.move!(*(yield e, i, dx, dy)) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
312
336
  else
313
- self.sprite_only.each{|e| e.move!(dx, dy)}
337
+ self.each{|e| e.move!(dx, dy) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
314
338
  end
315
339
  self
316
340
  end
@@ -335,9 +359,9 @@ module Miyako
335
359
  #返却値:: 自分自身を返す
336
360
  def move_to!(x, y)
337
361
  if block_given?
338
- self.sprite_only.each_with_index{|e, i| e.move_to!(*(yield e, i, x, y))}
362
+ self.each_with_index{|e, i| e.move_to!(*(yield e, i, x, y)) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
339
363
  else
340
- self.sprite_only.each{|e| e.move_to!(x, y)}
364
+ self.each{|e| e.move_to!(x, y) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
341
365
  end
342
366
  self
343
367
  end
@@ -346,7 +370,7 @@ module Miyako
346
370
  #各要素のstartメソッドを呼び出す
347
371
  #返却値:: 自分自身を返す
348
372
  def start
349
- self.sprite_only.each{|sprite| sprite.start }
373
+ self.each{|sprite| sprite.start if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
350
374
  return self
351
375
  end
352
376
 
@@ -354,7 +378,7 @@ module Miyako
354
378
  #各要素のstopメソッドを呼び出す
355
379
  #返却値:: 自分自身を返す
356
380
  def stop
357
- self.sprite_only.each{|sprite| sprite.stop }
381
+ self.each{|sprite| sprite.stop if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
358
382
  return self
359
383
  end
360
384
 
@@ -362,7 +386,7 @@ module Miyako
362
386
  #各要素のresetメソッドを呼び出す
363
387
  #返却値:: 自分自身を返す
364
388
  def reset
365
- self.sprite_only.each{|sprite| sprite.reset }
389
+ self.each{|sprite| sprite.reset if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
366
390
  return self
367
391
  end
368
392
 
@@ -370,9 +394,7 @@ module Miyako
370
394
  #各要素のupdate_animationメソッドを呼び出す
371
395
  #返却値:: 描く画像のupdate_spriteメソッドを呼び出した結果を配列で返す
372
396
  def update_animation
373
- self.sprite_only.map{|e|
374
- e.update_animation
375
- }
397
+ self.map{|e| (e.class.include?(SpriteBase) || e.class.include?(SpriteArray)) ? e.update_animation : false }
376
398
  end
377
399
 
378
400
  #===指定した要素の内容を入れ替える
@@ -393,7 +415,7 @@ module Miyako
393
415
  #描画するインスタンスは、SpriteBaseモジュールがmixinされているクラスのみ
394
416
  #返却値:: 自分自身を帰す
395
417
  def render
396
- self.sprite_only.each{|e| e.render }
418
+ self.each{|e| e.render if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
397
419
  return self
398
420
  end
399
421
 
@@ -402,9 +424,34 @@ module Miyako
402
424
  #_dst_:: 描画対象の画像インスタンス
403
425
  #返却値:: 自分自身を帰す
404
426
  def render_to(dst)
405
- self.each{|e| e.render_to(dst) }
427
+ self.each{|e| e.render_to(dst) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
406
428
  return self
407
429
  end
430
+
431
+ #===位置を指定して画面への描画を指示するメソッドのテンプレート
432
+ #オブジェクトで保持している位置情報ではなく、引数で渡された位置に描画する
433
+ #基本的に、メソッドのオーバーライドにより機能するが、pos,move_to!メソッドを持っているときは、
434
+ #これらのメソッドを呼び出して同じ動作を行うが処理速度的に課題あり
435
+ #ただし、上記のメソッドを持っていない場合は、単純にrenderメソッドを呼び出す
436
+ #_x_:: 描画位置のx座標
437
+ #_y_:: 描画位置のy座標
438
+ #返却値:: 自分自身を返す
439
+ def render_xy(x, y)
440
+ return self.each{|e| e.render_xy(x, y) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
441
+ end
442
+
443
+ #===位置を指定して画像への描画を指示するメソッドのテンプレート
444
+ #オブジェクトで保持している位置情報ではなく、引数で渡された位置に描画する
445
+ #基本的に、メソッドのオーバーライドにより機能するが、pos,move_to!メソッドを持っているときは、
446
+ #これらのメソッドを呼び出して同じ動作を行うが、処理速度的に課題あり
447
+ #ただし、上記のメソッドを持っていない場合は、単純にrender_toメソッドを呼び出す
448
+ #_dst_:: 対象の画像
449
+ #_x_:: 描画位置のx座標
450
+ #_y_:: 描画位置のy座標
451
+ #返却値:: 自分自身を返す
452
+ def render_xy_to(dst, x, y)
453
+ return self.each{|e| e.render_xy_to(dst, x, y) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
454
+ end
408
455
  end
409
456
 
410
457
  #==ディープコピーを実装するモジュール