Class: Miyako::Collisions
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/Miyako/API/collision.rb
Overview
コリジョン管理クラス
複数のコリジョンと元オブジェクトを配列の様に一括管理できる 当たり判定を一括処理することで高速化を図る
Instance Method Summary collapse
-
#[](idx) ⇒ Object
インデックス形式でのコリジョン・本体の取得 判定に引っかかったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 当たり判定に引っかかったコリジョンが無い場合はnilを返す idx:: 配列のインデックス番号 返却値:: インデックスに対応したコリジョンと本体との対.
-
#add(collision, point) ⇒ Object
コリジョンと位置情報を追加する point引数は、以下の3つの条件のどれかに適合する必要がある。しない場合は例外が発生する 1)の要素を持つ配列 2)Point構造体、Rect構造体、もしくはSquare構造体 3)x,yメソッドを持つ collisions:: コリジョン point:: 位置情報 返却値:: 自分自身を返す.
-
#append(collisions, points) ⇒ Object
インスタンスに、コリジョンと位置情報の集合を追加する points引数の各要素は、以下の3つの条件のどれかに適合する必要がある。しない場合は例外が発生する 1)の要素を持つ配列 2)Point構造体、Rect構造体、もしくはSquare構造体 3)x,yメソッドを持つ collisions:: コリジョンの配列 points:: 位置情報の配列 返却値:: 自分自身を返す.
-
#clear ⇒ Object
インデックス形式でのコリジョン・本体の取得 idx:: 配列のインデックス番号 返却値:: インデックスに対応したコリジョンと本体との対.
-
#collision?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素がcと重なっている) 重なったコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 重なったコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: コリジョンと本体の対。.
-
#collision_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素とcが重なっている) 重なったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 重なったコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: コリジョンと本体の対の配列。.
-
#cover?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素とcのどちらかが、もう一方にすっぽり覆われている)) 覆われたコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 覆われたコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: 領域が覆われていれば true を返す.
-
#cover_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素かcがもう一方を覆っている)) 覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: コリジョンと本体の対の配列。.
-
#covered?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素のどれかがcに覆われている)) 覆われたコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 覆われたコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: 領域が覆われていれば true を返す.
-
#covered_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素がcに覆われている)) 覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: コリジョンと本体の対の配列。.
-
#covers?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素のどれかがcを覆っている)) 覆われたコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 覆われたコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: 領域が覆われていれば true を返す.
-
#covers_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素が領域がcを覆っている)) 覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: コリジョンと本体の対の配列。.
-
#deep_dup ⇒ Object
要素も複製した複製インスタンスを返す 返却値:: 複製したインスタンスを返す.
-
#deep_dup_collision ⇒ Object
:nodocs:.
-
#delete(idx) ⇒ Object
コリジョン・本体の削除 idx:: 配列のインデックス番号 返却値:: 削除したコリジョンと本体との対 インデックスが範囲外の時はnilが返る.
-
#dispose ⇒ Object
オブジェクトを解放する 返却値:: なし.
-
#each ⇒ Object
タッピングを行う ブロックを渡すことにより、タッピングを行う ブロック内の引数は、|コリジョン,本体|の2が渡される 返却値:: 自分自身を返す.
-
#initialize(collisions = [], points = []) ⇒ Collisions
constructor
コリジョンのインスタンスを作成する points引数の各要素は、以下の3つの条件のどれかに適合する必要がある。しない場合は例外が発生する 1)の要素を持つ配列 2)Point構造体、Rect構造体、もしくはSquare構造体 3)x,yメソッドを持つ collisions:: コリジョンの配列。デフォルトは [] points:: 位置情報の配列。デフォルトは [] 返却値:: 作成されたインスタンス.
-
#initialize_copy(obj) ⇒ Object
:nodoc:.
-
#meet?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素のどれかがcとピクセル単位で隣り合っている) 隣り合ったコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 隣り合ったコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: 隣り合っていれば true を返す.
-
#meet_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素がcとピクセル単位で隣り合っている) 隣り合ったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 隣り合ったコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス pos:: cの位置(Point/Rect/Square構造体、もしくは2要素の配列) 返却値:: コリジョンと本体の対の配列。.
-
#tap(idx) {|, | ... } ⇒ Object
タッピングを行う ブロックを渡すことにより、タッピングを行う ブロック内の引数は、|コリジョン,本体|の2が渡される idx:: 配列のインデックス 返却値:: 自分自身を返す.
Constructor Details
#initialize(collisions = [], points = []) ⇒ Collisions
コリジョンのインスタンスを作成する
points引数の各要素は、以下の3つの条件のどれかに適合する必要がある。しない場合は例外が発生する 1)の要素を持つ配列 2)Point構造体、Rect構造体、もしくはSquare構造体 3)x,yメソッドを持つ
- collisions
-
コリジョンの配列。デフォルトは []
- points
-
位置情報の配列。デフォルトは []
- 返却値
-
作成されたインスタンス
720 721 722 |
# File 'lib/Miyako/API/collision.rb', line 720 def initialize(collisions=[], points=[]) @collisions = Array.new(collisions).zip(points) end |
Instance Method Details
#[](idx) ⇒ Object
インデックス形式でのコリジョン・本体の取得
判定に引っかかったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 当たり判定に引っかかったコリジョンが無い場合はnilを返す
- idx
-
配列のインデックス番号
- 返却値
-
インデックスに対応したコリジョンと本体との対
770 771 772 |
# File 'lib/Miyako/API/collision.rb', line 770 def [](idx) return @collisions[idx] end |
#add(collision, point) ⇒ Object
コリジョンと位置情報を追加する
point引数は、以下の3つの条件のどれかに適合する必要がある。しない場合は例外が発生する 1)の要素を持つ配列 2)Point構造体、Rect構造体、もしくはSquare構造体 3)x,yメソッドを持つ
- collisions
-
コリジョン
- point
-
位置情報
- 返却値
-
自分自身を返す
748 749 750 751 |
# File 'lib/Miyako/API/collision.rb', line 748 def add(collision, point) @collisions << [collision, point] return self end |
#append(collisions, points) ⇒ Object
インスタンスに、コリジョンと位置情報の集合を追加する
points引数の各要素は、以下の3つの条件のどれかに適合する必要がある。しない場合は例外が発生する 1)の要素を持つ配列 2)Point構造体、Rect構造体、もしくはSquare構造体 3)x,yメソッドを持つ
- collisions
-
コリジョンの配列
- points
-
位置情報の配列
- 返却値
-
自分自身を返す
761 762 763 764 |
# File 'lib/Miyako/API/collision.rb', line 761 def append(collisions, points) @collisions.concat(collisions.zip(points)) return self end |
#clear ⇒ Object
インデックス形式でのコリジョン・本体の取得
- idx
-
配列のインデックス番号
- 返却値
-
インデックスに対応したコリジョンと本体との対
785 786 787 788 |
# File 'lib/Miyako/API/collision.rb', line 785 def clear @collisions.clear return self end |
#collision?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素がcと重なっている)
重なったコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 重なったコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
コリジョンと本体の対。
815 816 817 |
# File 'lib/Miyako/API/collision.rb', line 815 def collision?(c, pos) return @collisions.detect{|cc| c.collision?(pos, cc[0], cc[1])} end |
#collision_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素とcが重なっている)
重なったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 重なったコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
コリジョンと本体の対の配列。
865 866 867 |
# File 'lib/Miyako/API/collision.rb', line 865 def collision_all?(c, pos) return @collisions.select{|cc| c.collision?(pos, cc[0], cc[1])} end |
#cover?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素とcのどちらかが、もう一方にすっぽり覆われている))
覆われたコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 覆われたコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
領域が覆われていれば true を返す
835 836 837 |
# File 'lib/Miyako/API/collision.rb', line 835 def cover?(c, pos) return @collisions.detect{|cc| c.cover?(pos, cc[0], cc[1])} end |
#cover_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素かcがもう一方を覆っている))
覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
コリジョンと本体の対の配列。
885 886 887 |
# File 'lib/Miyako/API/collision.rb', line 885 def cover_all?(c, pos) return @collisions.select{|cc| c.cover?(pos, cc[0], cc[1])} end |
#covered?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素のどれかがcに覆われている))
覆われたコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 覆われたコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
領域が覆われていれば true を返す
855 856 857 |
# File 'lib/Miyako/API/collision.rb', line 855 def covered?(c, pos) return @collisions.detect{|cc| c.covered?(pos, cc[0], cc[1])} end |
#covered_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素がcに覆われている))
覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
コリジョンと本体の対の配列。
905 906 907 |
# File 'lib/Miyako/API/collision.rb', line 905 def covered_all?(c, pos) return @collisions.select{|cc| c.covered?(pos, cc[0], cc[1])} end |
#covers?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素のどれかがcを覆っている))
覆われたコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 覆われたコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
領域が覆われていれば true を返す
845 846 847 |
# File 'lib/Miyako/API/collision.rb', line 845 def covers?(c, pos) return @collisions.detect{|cc| c.covers?(pos, cc[0], cc[1])} end |
#covers_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素が領域がcを覆っている))
覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
コリジョンと本体の対の配列。
895 896 897 |
# File 'lib/Miyako/API/collision.rb', line 895 def covers_all?(c, pos) return @collisions.select{|cc| c.covers?(pos, cc[0], cc[1])} end |
#deep_dup ⇒ Object
要素も複製した複製インスタンスを返す
- 返却値
-
複製したインスタンスを返す
735 736 737 738 |
# File 'lib/Miyako/API/collision.rb', line 735 def deep_dup ret = self.dup ret.deep_dup_collision end |
#deep_dup_collision ⇒ Object
:nodocs:
728 729 730 731 |
# File 'lib/Miyako/API/collision.rb', line 728 def deep_dup_collision #:nodocs: @collisions = @collisions.deep_dup return self end |
#delete(idx) ⇒ Object
コリジョン・本体の削除
- idx
-
配列のインデックス番号
- 返却値
-
削除したコリジョンと本体との対
インデックスが範囲外の時はnilが返る
778 779 780 |
# File 'lib/Miyako/API/collision.rb', line 778 def delete(idx) return @collisions.delete_at(idx) end |
#dispose ⇒ Object
オブジェクトを解放する
- 返却値
-
なし
920 921 922 923 |
# File 'lib/Miyako/API/collision.rb', line 920 def dispose @collisions.clear @collisions = nil end |
#each ⇒ Object
タッピングを行う
ブロックを渡すことにより、タッピングを行う ブロック内の引数は、|コリジョン,本体|の2が渡される
- 返却値
-
自分自身を返す
794 795 796 797 |
# File 'lib/Miyako/API/collision.rb', line 794 def each @collisions.each{|cb| yield cb[0], cb[1] } return self end |
#initialize_copy(obj) ⇒ Object
:nodoc:
724 725 726 |
# File 'lib/Miyako/API/collision.rb', line 724 def initialize_copy(obj) #:nodoc: @collisions = @collisions.dup end |
#meet?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素のどれかがcとピクセル単位で隣り合っている)
隣り合ったコリジョンが一つでもあれば、最初に引っかかったコリジョンを返す 隣り合ったコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
隣り合っていれば true を返す
825 826 827 |
# File 'lib/Miyako/API/collision.rb', line 825 def meet?(c, pos) return @collisions.detect{|cc| c.meet?(pos, cc[0], cc[1])} end |
#meet_all?(c, pos) ⇒ Boolean
当たり判定を行う(配列要素がcとピクセル単位で隣り合っている)
隣り合ったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 隣り合ったコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- pos
-
cの位置(Point/Rect/Square構造体、もしくは2要素の配列)
- 返却値
-
コリジョンと本体の対の配列。
875 876 877 |
# File 'lib/Miyako/API/collision.rb', line 875 def meet_all?(c, pos) return @collisions.select{|cc| c.meet?(pos, cc[0], cc[1])} end |
#tap(idx) {|, | ... } ⇒ Object
タッピングを行う
ブロックを渡すことにより、タッピングを行う ブロック内の引数は、|コリジョン,本体|の2が渡される
- idx
-
配列のインデックス
- 返却値
-
自分自身を返す
804 805 806 807 |
# File 'lib/Miyako/API/collision.rb', line 804 def tap(idx) yield @collisions[idx][0], @collisions[idx][1] return self end |