Class: Miyako::CircleCollisionEx
- Inherits:
-
CircleCollision
- Object
- CircleCollision
- Miyako::CircleCollisionEx
- Defined in:
- lib/Miyako/API/collision.rb
Overview
位置情報付き円形当たり判定領域(サークルコリジョン)クラス
円形の当たり判定を実装する。 コリジョンは中心位置と半径で構成され、円形当たり判定同士で衝突判定を行う コリジョンで使用する値は、実数での設定が可能
Instance Attribute Summary
Attributes inherited from CircleCollision
#body, #center, #radius, #rect
Class Method Summary collapse
-
.collision?(c1, c2) ⇒ Boolean
当たり判定を行う(領域が重なっている) c1:: 判定対象のコリジョンインスタンス(1) c2:: 判定対象のコリジョンインスタンス(2) 返却値:: 1ピクセルでも重なっていれば true を返す.
-
.cover?(c1, c2) ⇒ Boolean
当たり判定を行う(どちらかの領域がもう一方にすっぽり覆われている)) c1:: 判定対象のコリジョンインスタンス(1) c2:: 判定対象のコリジョンインスタンス(2) 返却値:: 領域が覆われていれば true を返す.
-
.covered?(c1, c2) ⇒ Boolean
当たり判定を行う(c1がc2に覆われている) c1:: 判定対象のコリジョンインスタンス(1) c2:: 判定対象のコリジョンインスタンス(2) 返却値:: 領域が覆われていれば true を返す.
-
.covers?(c1, c2) ⇒ Boolean
当たり判定を行う(c1がc2を覆っている) c1:: 判定対象のコリジョンインスタンス(1) c2:: 判定対象のコリジョンインスタンス(2) 返却値:: 領域が覆われていれば true を返す.
-
.interval(c1, c2) ⇒ Object
当たり判定間の距離を算出する 2つの当たり判定がどの程度離れているかを算出する。 返ってくる値は、衝突していなければ正の実数、衝突していれば負の実数で返ってくる c1:: 判定対象のコリジョンインスタンス(1) c2:: 判定対象のコリジョンインスタンス(2) 返却値:: 当たり判定間の距離.
-
.meet?(c1, c2) ⇒ Boolean
当たり判定を行う(領域がピクセル単位で隣り合っている) 但し、実際の矩形範囲が偶数の時は性格に判定できない場合があるため注意 c1:: 判定対象のコリジョンインスタンス(1) c2:: 判定対象のコリジョンインスタンス(2) 返却値:: 領域が隣り合っていれば true を返す.
Instance Method Summary collapse
-
#collision?(c2) ⇒ Boolean
当たり判定を行う(領域が重なっている) c2:: 判定対象のコリジョンインスタンス 返却値:: 1ピクセルでも重なっていれば true を返す.
-
#cover?(c2) ⇒ Boolean
当たり判定を行う(どちらかの領域がもう一方にすっぽり覆われている)) c2:: 判定対象のコリジョンインスタンス 返却値:: 領域が覆われていれば true を返す.
-
#covered?(c2) ⇒ Boolean
当たり判定を行う(レシーバがc2に覆われている) c2:: 判定対象のコリジョンインスタンス 返却値:: 領域が覆われていれば true を返す.
-
#covers?(c2) ⇒ Boolean
当たり判定を行う(レシーバがc2を覆っている) c2:: 判定対象のコリジョンインスタンス 返却値:: 領域が覆われていれば true を返す.
-
#dispose ⇒ Object
インスタンスの内容を解放する 返却値:: なし.
-
#initialize(center, radius, pos, circum = true) ⇒ CircleCollisionEx
constructor
コリジョンのインスタンスを作成する コリジョンの半径が0もしくはマイナスのとき例外が発生する 内部では、矩形当たり判定相手の時でも対応できるように矩形情報に変換して同時に持っている。 そのとき、引数circumがtrueのときは、円を矩形の外接円と認識して、内部の矩形(正方形)の長さを算出する。 circumがfalseのときは、円を矩形の内接円と認識して、内部の矩形(正方形)の長さを算出する。 center:: コリジョンを設定する範囲 radius:: コリジョンの半径 pos:: コリジョンの位置 circum:: 矩形当たり判定とみなす時、円を外接円とするときはtrueを設定する。デフォルトはtrue 返却値:: 作成されたコリジョン.
-
#interval(c2) ⇒ Object
当たり判定間の距離を算出する c2:: 判定対象のコリジョンインスタンス 返却値:: 1ピクセルでも重なっていれば true を返す.
-
#meet?(c2) ⇒ Boolean
当たり判定を行う(領域がピクセル単位で隣り合っている) c2:: 判定対象のコリジョンインスタンス 返却値:: 領域が隣り合っていれば true を返す.
-
#to_col ⇒ Object
CicleCollisionクラスのインスタンスを生成する 自分自身から位置情報を除いてCircleCollisionクラスのインスタンスを生成する 返却値:: CircleCollision構造体.
Methods inherited from CircleCollision
#bind, #initialize_copy, #to_ex
Constructor Details
#initialize(center, radius, pos, circum = true) ⇒ CircleCollisionEx
コリジョンのインスタンスを作成する
コリジョンの半径が0もしくはマイナスのとき例外が発生する 内部では、矩形当たり判定相手の時でも対応できるように矩形情報に変換して同時に持っている。 そのとき、引数circumがtrueのときは、円を矩形の外接円と認識して、内部の矩形(正方形)の長さを算出する。 circumがfalseのときは、円を矩形の内接円と認識して、内部の矩形(正方形)の長さを算出する。
- center
-
コリジョンを設定する範囲
- radius
-
コリジョンの半径
- pos
-
コリジョンの位置
- circum
-
矩形当たり判定とみなす時、円を外接円とするときはtrueを設定する。デフォルトはtrue
- 返却値
-
作成されたコリジョン
592 593 594 595 |
# File 'lib/Miyako/API/collision.rb', line 592 def initialize(center, radius, pos, circum = true) super(center, radius, circum) @pos = Point.new(*pos.to_a) end |
Class Method Details
.collision?(c1, c2) ⇒ Boolean
当たり判定を行う(領域が重なっている)
- c1
-
判定対象のコリジョンインスタンス(1)
- c2
-
判定対象のコリジョンインスタンス(2)
- 返却値
-
1ピクセルでも重なっていれば true を返す
660 661 662 |
# File 'lib/Miyako/API/collision.rb', line 660 def CircleCollisionEx.collision?(c1, c2) return CircleCollision.collision?(c1, c1.pos, c2, c2.pos) end |
.cover?(c1, c2) ⇒ Boolean
当たり判定を行う(どちらかの領域がもう一方にすっぽり覆われている))
- c1
-
判定対象のコリジョンインスタンス(1)
- c2
-
判定対象のコリジョンインスタンス(2)
- 返却値
-
領域が覆われていれば true を返す
677 678 679 |
# File 'lib/Miyako/API/collision.rb', line 677 def CircleCollisionEx.cover?(c1, c2) return CircleCollision.cover?(c1, c1.pos, c2, c2.pos) end |
.covered?(c1, c2) ⇒ Boolean
当たり判定を行う(c1がc2に覆われている)
- c1
-
判定対象のコリジョンインスタンス(1)
- c2
-
判定対象のコリジョンインスタンス(2)
- 返却値
-
領域が覆われていれば true を返す
693 694 695 |
# File 'lib/Miyako/API/collision.rb', line 693 def CircleCollisionEx.covered?(c1, c2) return CircleCollision.covered?(c1, c1.pos, c2, c2.pos) end |
.covers?(c1, c2) ⇒ Boolean
当たり判定を行う(c1がc2を覆っている)
- c1
-
判定対象のコリジョンインスタンス(1)
- c2
-
判定対象のコリジョンインスタンス(2)
- 返却値
-
領域が覆われていれば true を返す
685 686 687 |
# File 'lib/Miyako/API/collision.rb', line 685 def CircleCollisionEx.covers?(c1, c2) return CircleCollision.covers?(c1, c1.pos, c2, c2.pos) end |
.interval(c1, c2) ⇒ Object
当たり判定間の距離を算出する
2つの当たり判定がどの程度離れているかを算出する。 返ってくる値は、衝突していなければ正の実数、衝突していれば負の実数で返ってくる
- c1
-
判定対象のコリジョンインスタンス(1)
- c2
-
判定対象のコリジョンインスタンス(2)
- 返却値
-
当たり判定間の距離
652 653 654 |
# File 'lib/Miyako/API/collision.rb', line 652 def CircleCollisionEx.interval(c1, c2) return CircleCollision.interval(c1, c1.pos, c2, c2.pos) end |
.meet?(c1, c2) ⇒ Boolean
当たり判定を行う(領域がピクセル単位で隣り合っている)
但し、実際の矩形範囲が偶数の時は性格に判定できない場合があるため注意
- c1
-
判定対象のコリジョンインスタンス(1)
- c2
-
判定対象のコリジョンインスタンス(2)
- 返却値
-
領域が隣り合っていれば true を返す
669 670 671 |
# File 'lib/Miyako/API/collision.rb', line 669 def CircleCollisionEx.meet?(c1, c2) return CircleCollision.meet?(c1, c1.pos, c2, c2.pos) end |
Instance Method Details
#collision?(c2) ⇒ Boolean
当たり判定を行う(領域が重なっている)
- c2
-
判定対象のコリジョンインスタンス
- 返却値
-
1ピクセルでも重なっていれば true を返す
614 615 616 |
# File 'lib/Miyako/API/collision.rb', line 614 def collision?(c2) return CircleCollision.collision?(self, self.pos, c2, c2.pos) end |
#cover?(c2) ⇒ Boolean
当たり判定を行う(どちらかの領域がもう一方にすっぽり覆われている))
- c2
-
判定対象のコリジョンインスタンス
- 返却値
-
領域が覆われていれば true を返す
628 629 630 |
# File 'lib/Miyako/API/collision.rb', line 628 def cover?(c2) return CircleCollision.cover?(self, self.pos, c2, c2.pos) end |
#covered?(c2) ⇒ Boolean
当たり判定を行う(レシーバがc2に覆われている)
- c2
-
判定対象のコリジョンインスタンス
- 返却値
-
領域が覆われていれば true を返す
642 643 644 |
# File 'lib/Miyako/API/collision.rb', line 642 def covered?(c2) return CircleCollision.covered?(self, self.pos, c2, c2.pos) end |
#covers?(c2) ⇒ Boolean
当たり判定を行う(レシーバがc2を覆っている)
- c2
-
判定対象のコリジョンインスタンス
- 返却値
-
領域が覆われていれば true を返す
635 636 637 |
# File 'lib/Miyako/API/collision.rb', line 635 def covers?(c2) return CircleCollision.covers?(self, self.pos, c2, c2.pos) end |
#dispose ⇒ Object
インスタンスの内容を解放する
- 返却値
-
なし
699 700 701 702 |
# File 'lib/Miyako/API/collision.rb', line 699 def dispose super @pos = nil end |
#interval(c2) ⇒ Object
当たり判定間の距離を算出する
- c2
-
判定対象のコリジョンインスタンス
- 返却値
-
1ピクセルでも重なっていれば true を返す
607 608 609 |
# File 'lib/Miyako/API/collision.rb', line 607 def interval(c2) return CircleCollision.interval(self, self.pos, c2, c2.pos) end |
#meet?(c2) ⇒ Boolean
当たり判定を行う(領域がピクセル単位で隣り合っている)
- c2
-
判定対象のコリジョンインスタンス
- 返却値
-
領域が隣り合っていれば true を返す
621 622 623 |
# File 'lib/Miyako/API/collision.rb', line 621 def meet?(c2) return CircleCollision.meet?(self, self.pos, c2, c2.pos) end |
#to_col ⇒ Object
CicleCollisionクラスのインスタンスを生成する
自分自身から位置情報を除いてCircleCollisionクラスのインスタンスを生成する
- 返却値
-
CircleCollision構造体
600 601 602 |
# File 'lib/Miyako/API/collision.rb', line 600 def to_col CircleCollision.new(@center, @radius) end |