Class: Miyako::CollisionsEx
- Defined in:
- lib/Miyako/API/collision.rb
Overview
コリジョン管理クラス
複数のコリジョンと元オブジェクトを配列の様に一括管理できる 当たり判定を一括処理することで高速化を図る
Instance Attribute Summary collapse
-
#collision ⇒ Object
Returns the value of attribute collision.
Instance Method Summary collapse
-
#__getobj__ ⇒ Object
:nodoc:.
-
#__setobj__(obj) ⇒ Object
:nodoc:.
-
#add(collision) ⇒ Object
コリジョンと位置情報を追加する collision:: コリジョン 返却値:: 自分自身を返す.
-
#append(collisions) ⇒ Object
インスタンスに、コリジョンと位置情報の集合を追加する collisions:: コリジョンの配列 返却値:: 自分自身を返す.
-
#collision?(c) ⇒ Boolean
当たり判定を行う(配列要素とcが重なっている) 重なったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 重なったコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス 返却値:: コリジョンの配列。.
-
#cover?(c) ⇒ Boolean
当たり判定を行う(配列要素かcがもう一方を覆っている)) 覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス 返却値:: コリジョンの配列。.
-
#covered?(c) ⇒ Boolean
当たり判定を行う(配列要素がcに覆われている)) 覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス 返却値:: コリジョンの配列。.
-
#covers?(c) ⇒ Boolean
当たり判定を行う(配列要素が領域がcを覆っている)) 覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス 返却値:: コリジョンの配列。.
-
#deep_dup ⇒ Object
要素も複製した複製インスタンスを返す 返却値:: 複製したインスタンスを返す.
-
#deep_dup_collision ⇒ Object
:nodocs:.
-
#dispose ⇒ Object
オブジェクトを解放する 返却値:: なし.
-
#from_children ⇒ Object
現在所持している配列から最大範囲のコリジョンを作成する ただし、配列が空の時はnilを返す 返却値:: 生成したコリジョン(CollisionExクラスのインスタンス).
-
#initialize(collisions = []) ⇒ CollisionsEx
constructor
コリジョンのインスタンスを作成する 利用できる要素はCollisionEx,CircleCollisionEx(か、その派生)のみ collisions:: コリジョンの配列。デフォルトは [] 返却値:: 作成されたインスタンス.
-
#initialize_copy(obj) ⇒ Object
:nodoc:.
-
#meet?(c) ⇒ Boolean
当たり判定を行う(配列要素がcとピクセル単位で隣り合っている) 隣り合ったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 隣り合ったコリジョンが無い場合はnilを返す c:: 判定対象のコリジョンインスタンス 返却値:: コリジョンの配列。.
Constructor Details
#initialize(collisions = []) ⇒ CollisionsEx
コリジョンのインスタンスを作成する
利用できる要素はCollisionEx,CircleCollisionEx(か、その派生)のみ
- collisions
-
コリジョンの配列。デフォルトは []
- 返却値
-
作成されたインスタンス
938 939 940 941 |
# File 'lib/Miyako/API/collision.rb', line 938 def initialize(collisions=[]) @collisions = Array.new(collisions) @collision = nil end |
Instance Attribute Details
#collision ⇒ Object
Returns the value of attribute collision.
932 933 934 |
# File 'lib/Miyako/API/collision.rb', line 932 def collision @collision end |
Instance Method Details
#__getobj__ ⇒ Object
:nodoc:
943 944 945 |
# File 'lib/Miyako/API/collision.rb', line 943 def __getobj__ #:nodoc: @collisions end |
#__setobj__(obj) ⇒ Object
:nodoc:
947 948 |
# File 'lib/Miyako/API/collision.rb', line 947 def __setobj__(obj) #:nodoc: end |
#add(collision) ⇒ Object
コリジョンと位置情報を追加する
- collision
-
コリジョン
- 返却値
-
自分自身を返す
995 996 997 998 |
# File 'lib/Miyako/API/collision.rb', line 995 def add(collision) @collisions << collision return self end |
#append(collisions) ⇒ Object
インスタンスに、コリジョンと位置情報の集合を追加する
- collisions
-
コリジョンの配列
- 返却値
-
自分自身を返す
1003 1004 1005 1006 |
# File 'lib/Miyako/API/collision.rb', line 1003 def append(collisions) @collisions.concat(collisions) return self end |
#collision?(c) ⇒ Boolean
当たり判定を行う(配列要素とcが重なっている)
重なったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 重なったコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- 返却値
-
コリジョンの配列。
1013 1014 1015 1016 |
# File 'lib/Miyako/API/collision.rb', line 1013 def collision?(c) return nil if @collision and !@collision.collision?(c) collision_inner(c, []){|cc,c| cc.collision?(c) } end |
#cover?(c) ⇒ Boolean
当たり判定を行う(配列要素かcがもう一方を覆っている))
覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- 返却値
-
コリジョンの配列。
1043 1044 1045 1046 |
# File 'lib/Miyako/API/collision.rb', line 1043 def cover?(c) return nil if @collision and !@collision.collision?(c) collision_inner(c, []){|cc,c| cc.cover?(c) } end |
#covered?(c) ⇒ Boolean
当たり判定を行う(配列要素がcに覆われている))
覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- 返却値
-
コリジョンの配列。
1063 1064 1065 1066 |
# File 'lib/Miyako/API/collision.rb', line 1063 def covered?(c) return nil if @collision and !@collision.collision?(c) collision_inner(c, []){|cc,c| cc.covers?(c) } end |
#covers?(c) ⇒ Boolean
当たり判定を行う(配列要素が領域がcを覆っている))
覆われたコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 覆われたコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- 返却値
-
コリジョンの配列。
1053 1054 1055 1056 |
# File 'lib/Miyako/API/collision.rb', line 1053 def covers?(c) return nil if @collision and !@collision.collision?(c) collision_inner(c, []){|cc,c| cc.covers?(c) } end |
#deep_dup ⇒ Object
要素も複製した複製インスタンスを返す
- 返却値
-
複製したインスタンスを返す
961 962 963 964 |
# File 'lib/Miyako/API/collision.rb', line 961 def deep_dup ret = self.dup ret.deep_dup_collision end |
#deep_dup_collision ⇒ Object
:nodocs:
954 955 956 957 |
# File 'lib/Miyako/API/collision.rb', line 954 def deep_dup_collision #:nodocs: @collisions = @collisions.deep_dup return self end |
#dispose ⇒ Object
オブジェクトを解放する
- 返却値
-
なし
1070 1071 1072 1073 1074 |
# File 'lib/Miyako/API/collision.rb', line 1070 def dispose @collisions.clear @collisions = nil @collision = nil end |
#from_children ⇒ Object
現在所持している配列から最大範囲のコリジョンを作成する
ただし、配列が空の時はnilを返す
- 返却値
-
生成したコリジョン(CollisionExクラスのインスタンス)
969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 |
# File 'lib/Miyako/API/collision.rb', line 969 def from_children return nil if @collisions.empty? array = [] @collisions.each{|cc| if cc.class.method_defined?(:from_children) col = cc.from_children next unless col array << col.rect.to_square.to_a else rect = cc.rect.dup rect[0] += cc.pos[0] rect[1] += cc.pos[1] array << rect.to_square.to_a end } el = array.shift if array.length >= 1 array = el.zip(*array) el = [array[0].min, array[1].min, array[2].max, array[3].max] end CollisionEx.new(Rect.new(el[0], el[1], el[2]-el[0]+1, el[3]-el[1]+1), Point.new(0,0)) end |
#initialize_copy(obj) ⇒ Object
:nodoc:
950 951 952 |
# File 'lib/Miyako/API/collision.rb', line 950 def initialize_copy(obj) #:nodoc: @collisions = @collisions.dup end |
#meet?(c) ⇒ Boolean
当たり判定を行う(配列要素がcとピクセル単位で隣り合っている)
隣り合ったコリジョンが一つでもあれば、すべてのコリジョンの配列を返す 隣り合ったコリジョンが無い場合はnilを返す
- c
-
判定対象のコリジョンインスタンス
- 返却値
-
コリジョンの配列。
1033 1034 1035 1036 |
# File 'lib/Miyako/API/collision.rb', line 1033 def meet?(c) return nil if @collision and !@collision.collision?(c) collision_inner(c, []){|cc,c| cc.meet?(c) } end |