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]
댓글 없음:
댓글 쓰기