hitTestPoint()
hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean 메서드는 영역대 포인트를 감지해서 hit를 발생시킨다. 여기서 말하는 영역이란 Flash에서 무비클립을 하나 만들면 그 무비클립 외각에 생기는 사각형 영역을 말한다. point는 객체를 말하는 것이다.
즉, 객체만을 인식하겠다는 것이다.
hitTestPoint()는 DisplayObject클래스의 메서드로 3개의 매개변수를 갖는다.
hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean
x는 x좌표, y는 y좌표, shapeFlag는 객체(true)의 실제 픽셀을 검사할 것인지 아니면 경계 상자(false)를 검사할 것인지를 나타낸다.
여기서 shapeFlag = true로 하면 영역을 인식하는 것이 아니라 객체만 인식하겠다는 것이다.
[code as3]
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Main extends Sprite
{
 public function Main()
 {
  super();
  setTimer();
 }
 private function setTimer():void
 {
  var timer:Timer = new Timer(200, 50);
  timer.addEventListener(TimerEvent.TIMER, timerEventHandler);
  timer.start();
 }
 private function timerEventHandler(event:TimerEvent):void
 {
  var temp:Star = new Star();
  temp.tx = Math.random()* 3 + 1; 
  temp.ty = Math.random()* 3 + 1; 
  addChild(temp);
  temp.addEventListener(Event.ENTER_FRAME, tempEnterFrameHandler);
 }
 private function tempEnterFrameHandler(event:Event):void
 {
  var mc:MovieClip = MovieClip(event.target);
  if(mc.x < 0 || mc.x > stage.stageWidth)
  {
   mc.tx = -mc.tx; // swiching해줌 
  }
  if(mc.y < 0 || mc.y > stage.stageHeight)
  {
   mc.ty = -mc.ty;
  }
  if( bg.hitTestPoint(mc.x, mc.y, true)) 
  {
   mc.gotoAndStop(2);
   mc.rotate = -5; //  dynamic 변수 
  }
  else
  {
   mc.gotoAndStop(1);
   mc.rotate = 5;
  }
  mc.x += mc.tx;
  mc.y += mc.ty;
  mc.rotation += mc.rotate;
 } 
}
}
[/code]
30~31번째 라인에서 정의 되지 않는 속성 tx, ty를 사용하였는데 이렇게 정의 되지 않는 속성을 사용할 수 있는 것은 MovieClip이 다이나믹으로 정의되어 있어서이다.

MovieClip이 다이나믹으로 되어있어서 변수명을 아무렇게나 지정해 주어도 생성한다.
대표적인 예로 object가 있다.
[code as3]
var o:Object = new Object();
o.a = 1; // 속성에는 a, b 가 없지만 a,b를 생성해준다.
o.b = 2
trace(a); // 1 출력
trace(b); // 2 출력
[/code]
 
댓글 없음:
댓글 쓰기