2010년 3월 25일 목요일

(2) 충돌감지 _ hitTestObject()

hitTestObject()

 

hitTestObject(obj:DisplayObject):Boolean 메서드는 영역 대 영역을 감지하여 hit를 발생시킨다. 여기서 말하는 영역이란 Flash에서 무비클립을 하나 만들면 그 무비클립 외각에 생기는 사각형 영역을 말한다.

 

 

위에서 파란색 사각형이 핑크색 무비클립의 영역에 해당한다. 그럼 이제 hitTestObject() 메서드를 이용한 예제를 한번 만들어보자.

 

[code as3]
package classes.display
{
import flash.display.Sprite;
import flash.events.MouseEvent;

public class Main extends Sprite
{
 public function Main()
 {
  super();

  cir_mc.addEventListener(MouseEvent.MOUSE_DOWN, cirMouseDownHandler);
  cir_mc.addEventListener(MouseEvent.MOUSE_UP, cirMouseUpHandler);
  rect_mc.addEventListener(MouseEvent.MOUSE_DOWN, rectMouseDownHandler);
  rect_mc.addEventListener(MouseEvent.MOUSE_UP, rectMouseUpHandler);
 }

 private function cirMouseDownHandler(event:MouseEvent):void
 {
  cir_mc.alpha = 0.3;
 }

 private function cirMouseUpHandler(event:MouseEvent):void
 {
  if(cir_mc.hitTestObject(cirFrame_mc))
  {
   cir_mc.x = cirFrame_mc.x;
   cir_mc.y = cirFrame_mc.y;
  }
 }

 private function rectMouseDownHandler(event:MouseEvent):void
 {
  rect_mc.alpha = 0.3;
 }

 private function rectMouseUpHandler(event:MouseEvent):void
 {
  if(rect_mc.hitTestObject(rectFrame_mc))
  {
   rect_mc.x = rectFrame_mc.x;
   rect_mc.y = rectFrame_mc.y;
  }
 }
}
}
[/code]

 

 

위의 핑크 사각형을 드래그해서 점선 사각형 안에 넣으면 hit가 발생한다. 음...사각형으로 해서 그런가 그닥 와닿지 않는것 같아 원형으로 한번 더 만들어 보겠다.

 

 

위의 원을 점선 원안에 넣으면 hit가 발생한다. 원과 원이 닿지도 않았는데 hit가 발생했다.

이것이 바로 영역을 인식하여 hit를 발생시키는 hitTestObject()이다.

 

 

이제 조금 감이 오는가? 이렇게 무비클립자체의 shape가 닿아서 발생하는 것이 아니라

무비클립 외각의 사각형 영역끼리 닿으면 hit가 발생하는 것, 이것이 hitTestObject()이다.

 

위의 코드에 해당하는 실제 예제는 아래와 같다.

 

댓글 없음:

댓글 쓰기