Class: Miyako::CircleCollisionEx

Inherits:
CircleCollision show all
Defined in:
lib/Miyako/API/collision.rb

Overview

位置情報付き円形当たり判定領域(サークルコリジョン)クラス

円形の当たり判定を実装する。 コリジョンは中心位置と半径で構成され、円形当たり判定同士で衝突判定を行う コリジョンで使用する値は、実数での設定が可能

Instance Attribute Summary

Attributes inherited from CircleCollision

#body, #center, #radius, #rect

Class Method Summary collapse

Instance Method Summary collapse

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 を返す

Returns:

  • (Boolean)

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 を返す

Returns:

  • (Boolean)

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 を返す

Returns:

  • (Boolean)

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 を返す

Returns:

  • (Boolean)

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 を返す

Returns:

  • (Boolean)

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 を返す

Returns:

  • (Boolean)

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 を返す

Returns:

  • (Boolean)

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 を返す

Returns:

  • (Boolean)

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 を返す

Returns:

  • (Boolean)

635
636
637
# File 'lib/Miyako/API/collision.rb', line 635

def covers?(c2)
  return CircleCollision.covers?(self, self.pos, c2, c2.pos)
end

#disposeObject

インスタンスの内容を解放する

返却値

なし


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 を返す

Returns:

  • (Boolean)

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_colObject

CicleCollisionクラスのインスタンスを生成する

自分自身から位置情報を除いてCircleCollisionクラスのインスタンスを生成する

返却値

CircleCollision構造体


600
601
602
# File 'lib/Miyako/API/collision.rb', line 600

def to_col
  CircleCollision.new(@center, @radius)
end