Module: Miyako::SpriteArray

Includes:
Enumerable, Animation, SpriteBase
Included in:
Array
Defined in:
lib/Miyako/API/modules.rb

Overview

複数スプライト管理(配列)機能を追加するモジュール

配列にスプライトとして最低限の機能を追加する。また、独自にswapなどのメソッドを追加。render、render_toを用意し、一気に描画が可能。配列の要素順に描画される。各要素の位置関係は関与していない(そこがPartsとの違い)

Instance Method Summary collapse

Methods included from Animation

[], []=, anim_hash, reset, start, stop, update, update_animation

Methods included from SpriteBase

#bitmap, #hide, #image_rect, #image_size, #oh, #ow, #ox, #oy, #part_rect, #rect, #render_xy, #render_xy_to, #show, #to_sprite, #to_unit, #update

Instance Method Details

#deep_copyObject

配列要素を複製したコピー配列を取得する

通常、インスタンスの複写に使われるdup,cloneメソッドは、同じ配列要素を見ているが、このメソッドでは、要素も複製したものが複製される(各要素のdeep_copyメソッドを呼び出す)

返却値

複写した配列を返す



269
270
271
# File 'lib/Miyako/API/modules.rb', line 269

def deep_copy
  self.map{|e| e.deep_copy }
end

#move!(dx, dy) ⇒ Object

各要素の位置を変更する(変化量を指定)

ブロックを渡したとき、戻り値としてとした配列を返すと、それがその要素での移動量となる。ブロックの引数は、|要素, インデックス(0,1,2,…), dx, dy|となる。(例)q=[a, b, c]

#各スプライトの位置=すべて(10,15)
q.move!(20,25) => aの位置:(30,40)
                  bの位置:(30,40)
                  cの位置:(30,40)
q.move!(20,25){|e,i,dx,dy|
  [i*dx, i*dy]
}
               => aの位置:(10,15)
                  bの位置:(30,40)
                  cの位置:(50,65)
dx

移動量(x方向)。単位はピクセル

dy

移動量(y方向)。単位はピクセル

返却値

自分自身を返す



309
310
311
312
313
314
315
316
# File 'lib/Miyako/API/modules.rb', line 309

def move!(dx, dy)
  if block_given?
    self.sprite_only.each_with_index{|e, i| e.move!(*(yield e, i, dx, dy))}
  else
    self.sprite_only.each{|e| e.move!(dx, dy)}
  end
  self
end

#move_to!(x, y) ⇒ Object

各要素の位置を変更する(変化量を指定)

ブロックを渡したとき、戻り値としてとした配列を返すと、それがその要素での移動量となる。ブロックの引数は、|要素, インデックス(0,1,2,…), x, y|となる。(例)q=[a, b, c]

#各スプライトの位置=すべて(10,15)
q.move!(20,25) => aの位置:(20,25)
                  bの位置:(20,25)
                  cの位置:(20,25)
q.move!(20,25){|e,i,dx,dy|
  [i*dx, i*dy]
}
               => aの位置:( 0, 0)
                  bの位置:(20,25)
                  cの位置:(40,50)
x

移動先位置(x方向)。単位はピクセル

y

移動先位置(y方向)。単位はピクセル

返却値

自分自身を返す



336
337
338
339
340
341
342
343
# File 'lib/Miyako/API/modules.rb', line 336

def move_to!(x, y)
  if block_given?
    self.sprite_only.each_with_index{|e, i| e.move_to!(*(yield e, i, x, y))}
  else
    self.sprite_only.each{|e| e.move_to!(x, y)}
  end
  self
end

#renderObject

配列の要素を画面に描画する

配列の先頭から順にrenderメソッドを呼び出す。描画するインスタンスは、SpriteBaseモジュールがmixinされているクラスのみ

返却値

自分自身を帰す



395
396
397
398
# File 'lib/Miyako/API/modules.rb', line 395

def render
  self.sprite_only.each{|e| e.render }
  return self
end

#render_to(dst) ⇒ Object

配列の要素を対象の画像に描画する

配列の先頭から順にrender_toメソッドを呼び出す。

dst

描画対象の画像インスタンス

返却値

自分自身を帰す



404
405
406
407
# File 'lib/Miyako/API/modules.rb', line 404

def render_to(dst)
  self.each{|e| e.render_to(dst) }
  return self
end

#resetObject

描く画像のアニメーションを先頭パターンに戻す

各要素のresetメソッドを呼び出す

返却値

自分自身を返す



364
365
366
367
# File 'lib/Miyako/API/modules.rb', line 364

def reset
  self.sprite_only.each{|sprite| sprite.reset }
  return self
end

#sprite_onlyObject

各要素からスプライト以外の要素を取り除いた配列を作成する

SpriteBaseモジュール、もしくはSpriteArrayモジュールをインクルードしていない要素を削除した配列を返す登録されている名前順の配列になる。

返却値

生成したスプライトを返す



253
254
255
# File 'lib/Miyako/API/modules.rb', line 253

def sprite_only
  self.select{|e| e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
end

#sprite_only!Object

各要素からスプライト以外の要素を取り除いた配列を破壊的に作成する

SpriteBaseモジュール、もしくはSpriteArrayモジュールをインクルードしていない要素を削除する登録されている名前順の配列になる。

返却値

自分自身を返す



261
262
263
# File 'lib/Miyako/API/modules.rb', line 261

def sprite_only!
  self.delete_if{|e| !e.class.include?(SpriteBase) && !e.class.include?(SpriteArray)}
end

#startObject

描く画像のアニメーションを開始する

各要素のstartメソッドを呼び出す

返却値

自分自身を返す



348
349
350
351
# File 'lib/Miyako/API/modules.rb', line 348

def start
  self.sprite_only.each{|sprite| sprite.start }
  return self
end

#stopObject

描く画像のアニメーションを停止する

各要素のstopメソッドを呼び出す

返却値

自分自身を返す



356
357
358
359
# File 'lib/Miyako/API/modules.rb', line 356

def stop
  self.sprite_only.each{|sprite| sprite.stop }
  return self
end

#swap(idx1, idx2) ⇒ Object

指定した要素の内容を入れ替える

配列の先頭から順にrenderメソッドを呼び出す。描画するインスタンスは、引数がゼロのrenderメソッドを持っているもののみ(持っていないときは呼び出さない)

_idx1,idx2_

入れ替え対象の配列要素インデックス

返却値

自分自身を帰す

Raises:



383
384
385
386
387
388
389
# File 'lib/Miyako/API/modules.rb', line 383

def swap(idx1, idx2)
  l = self.length
  raise MiyakoValueError, "Illegal index range! : idx1:#{idx1}" if (idx1 >= l || idx1 < -l)
  raise MiyakoValueError, "Illegal index range! : idx2:#{idx2}" if (idx2 >= l || idx2 < -l)
  self[idx1], self[idx2] = self[idx2], self[idx1]
  return self
end

#update_animationObject

描く画像のアニメーションを更新する

各要素のupdate_animationメソッドを呼び出す

返却値

描く画像のupdate_spriteメソッドを呼び出した結果を配列で返す



372
373
374
375
376
# File 'lib/Miyako/API/modules.rb', line 372

def update_animation
  self.sprite_only.map{|e|
    e.update_animation
  }
end

#visibleObject

各要素の描画可能状態を取得する

各要素のvisibleメソッドの値を配列で取得する。登録されている名前順の配列になる。

返却値

true/falseの配列



277
278
279
# File 'lib/Miyako/API/modules.rb', line 277

def visible
  return self.sprite_only.map{|e| e.visible}
end

#visible=(v) ⇒ Object

各要素の描画可能状態を一気に設定する

すべての要素のvisibleメソッドの値を変更する登録されている名前順の配列になる。

v

設定する値(true/false)

返却値

自分自身を返す



286
287
288
289
# File 'lib/Miyako/API/modules.rb', line 286

def visible=(v)
  self.sprite_only.each{|e| e.visible = v}
  return self
end