CODEONWORT

OBB 충돌 검사 본문

Season 1/플래시

OBB 충돌 검사

codeonwort 2011.01.01 09:25

localToGlobal() 을 썼다.

충돌 판정 : 한 사각형의 한 꼭지점이라도 다른 사각형 안에 있으면 충돌한 것이다.

 

a, b는 두 사각형이고, 사각형 안에 빈 무비클립 넷이 각 꼭지점에 붙었다.

addEventListener("enterFrame", update)
function update(Null):void {
 a.rotation += 1
 b.rotation -= 1.5
 if(obbHitTest(a, b)) a.alpha = b.alpha = 0.5
 else a.alpha = b.alpha = 1
}

const zero:Point = new Point
function obbHitTest(a:MovieClip, b:MovieClip):Boolean {
 // b의 꼭지점이 a 안에 있는가
 var bLT:Point = b.LT.localToGlobal(zero)
 var bRT:Point = b.RT.localToGlobal(zero)
 var bLB:Point = b.LB.localToGlobal(zero)
 var bRB:Point = b.RB.localToGlobal(zero)
 if(a.hitTestPoint(bLT.x, bLT.y, true) || a.hitTestPoint(bRT.x, bRT.y, true)
  || a.hitTestPoint(bLB.x, bLB.y, true) || a.hitTestPoint(bRB.x, bRB.y, true)){
  return true
 }
 
 // a의 꼭지점이 b 안에 있는가
 var aLT:Point = a.LT.localToGlobal(zero)
 var aRT:Point = a.RT.localToGlobal(zero)
 var aLB:Point = a.LB.localToGlobal(zero)
 var aRB:Point = a.RB.localToGlobal(zero)
 if(b.hitTestPoint(aLT.x, aLT.y, true) || b.hitTestPoint(aRT.x, aRT.y, true)
  || b.hitTestPoint(aLB.x, aLB.y, true) || b.hitTestPoint(aRB.x, aRB.y, true)){
  return true
 }
 
 return false
}

4 Comments
댓글쓰기 폼