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, #oh=, #ow, #ow=, #ox, #ox=, #oy, #oy=, #part_rect, #rect, #show, #to_sprite, #to_unit, #update

Instance Method Details

#deep_copyObject

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

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

返却値

複写した配列を返す


315
316
317
# File 'lib/Miyako/API/modules.rb', line 315

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方向)。単位はピクセル

返却値

自分自身を返す


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

def move!(dx, dy)
  if block_given?
    self.each_with_index{|e, i| e.move!(*(yield e, i, dx, dy)) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
  else
    self.each{|e| e.move!(dx, dy) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
  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方向)。単位はピクセル

返却値

自分自身を返す


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

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

#renderObject

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

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

返却値

自分自身を帰す


439
440
441
442
# File 'lib/Miyako/API/modules.rb', line 439

def render
  self.each{|e| e.render if  e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
  return self
end

#render_d(dx, dy) ⇒ Object

位置を指定して画面への描画を指示するメソッドのテンプレート

オブジェクトで保持している位置情報ではなく、引数で渡された位置に描画する 基本的に、メソッドのオーバーライドにより機能するが、pos,move_to!メソッドを持っているときは、 これらのメソッドを呼び出して同じ動作を行うが処理速度的に課題あり ただし、上記のメソッドを持っていない場合は、単純にrenderメソッドを呼び出す

x

描画位置のx座標

y

描画位置のy座標

返却値

自分自身を返す


486
487
488
# File 'lib/Miyako/API/modules.rb', line 486

def render_d(dx, dy)
  return self.each{|e| e.render_d(dx, dy) if  e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
end

#render_to(dst) ⇒ Object

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

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

dst

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

返却値

自分自身を帰す


448
449
450
451
# File 'lib/Miyako/API/modules.rb', line 448

def render_to(dst)
  self.each{|e| e.render_to(dst) if  e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
  return self
end

#render_xy(x, y) ⇒ Object

位置を指定して画面への描画を指示するメソッドのテンプレート

オブジェクトで保持している位置情報ではなく、引数で渡された位置に描画する 基本的に、メソッドのオーバーライドにより機能するが、pos,move_to!メソッドを持っているときは、 これらのメソッドを呼び出して同じ動作を行うが処理速度的に課題あり ただし、上記のメソッドを持っていない場合は、単純にrenderメソッドを呼び出す

x

描画位置のx座標

y

描画位置のy座標

返却値

自分自身を返す


461
462
463
# File 'lib/Miyako/API/modules.rb', line 461

def render_xy(x, y)
  return self.each{|e| e.render_xy(x, y) if  e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
end

#render_xy_to(dst, x, y) ⇒ Object

位置を指定して画像への描画を指示するメソッドのテンプレート

オブジェクトで保持している位置情報ではなく、引数で渡された位置に描画する 基本的に、メソッドのオーバーライドにより機能するが、pos,move_to!メソッドを持っているときは、 これらのメソッドを呼び出して同じ動作を行うが、処理速度的に課題あり ただし、上記のメソッドを持っていない場合は、単純にrender_toメソッドを呼び出す

dst

対象の画像

x

描画位置のx座標

y

描画位置のy座標

返却値

自分自身を返す


474
475
476
# File 'lib/Miyako/API/modules.rb', line 474

def render_xy_to(dst, x, y)
  return self.each{|e| e.render_xy_to(dst, x, y) if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
end

#resetObject

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

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

返却値

自分自身を返す


410
411
412
413
# File 'lib/Miyako/API/modules.rb', line 410

def reset
  self.each{|sprite| sprite.reset if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
  return self
end

#sprite_onlyObject

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

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

返却値

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


299
300
301
# File 'lib/Miyako/API/modules.rb', line 299

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

#sprite_only!Object

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

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

返却値

自分自身を返す


307
308
309
# File 'lib/Miyako/API/modules.rb', line 307

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

#startObject

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

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

返却値

自分自身を返す


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

def start
  self.each{|sprite| sprite.start if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
  return self
end

#stopObject

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

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

返却値

自分自身を返す


402
403
404
405
# File 'lib/Miyako/API/modules.rb', line 402

def stop
  self.each{|sprite| sprite.stop if e.class.include?(SpriteBase) || e.class.include?(SpriteArray) }
  return self
end

#swap(idx1, idx2) ⇒ Object

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

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

_idx1,idx2_

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

返却値

自分自身を帰す

Raises:


427
428
429
430
431
432
433
# File 'lib/Miyako/API/modules.rb', line 427

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メソッドを呼び出した結果を配列で返す


418
419
420
# File 'lib/Miyako/API/modules.rb', line 418

def update_animation
  self.inject(false){|r, e| r |= (e.class.include?(SpriteBase) || e.class.include?(SpriteArray)) ? e.update_animation : false }
end

#visibleObject

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

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

返却値

true/falseの配列


323
324
325
# File 'lib/Miyako/API/modules.rb', line 323

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

#visible=(v) ⇒ Object

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

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

v

設定する値(true/false)

返却値

自分自身を返す


332
333
334
335
# File 'lib/Miyako/API/modules.rb', line 332

def visible=(v)
  self.each{|e| e.visible = v if e.class.include?(SpriteBase) || e.class.include?(SpriteArray)}
  return self
end