- hitTestObject( obj : DisplayObject ) 메소드는 표시 객체의 경계 상자를 평가하여 obj 표시객체의
경계 상자와 겹치거나 교차하는지 확인한다. obj는 테스트할 표시 객체이다. 반환값은 true, false로..
예제를 보면,
[code as3]
package classe.view
{
import flash.display.Sprite;
import flash.events.MouseEvent;
public class DragAlphabet extends Sprite
{
public function DragAlphabet()
{
super();
alpha_a.buttonMode = true;
alpha_b.buttonMode = true;
alpha_a.addEventListener( MouseEvent.MOUSE_DOWN, AstartDragHandler );
alpha_a.addEventListener( MouseEvent.MOUSE_UP, AstopDragHandler );
alpha_b.addEventListener( MouseEvent.MOUSE_DOWN, BstartDragHandler );
alpha_b.addEventListener( MouseEvent.MOUSE_UP, BstopDragHandler );
}
private function AstartDragHandler( e:MouseEvent ) : void
{
alpha_a.startDrag();
alpha_a.alpha = 0.5;
}
private function AstopDragHandler( e:MouseEvent ) : void
{
if( alpha_a.hitTestObject( alphaFrame_a ) )
{
alpha_a.x = alphaFrame_a.x;
alpha_a.y = alphaFrame_a.y;
}
alpha_a.alpha = 1;
}
private function BstartDragHandler( e:MouseEvent ) : void
{
alpha_b.startDrag();
alpha_b.alpha = 0.5;
}
private function BstopDragHandler( e:MouseEvent ) : void
{
if( alpha_b.hitTestObject( alphaFrame_b ) )
{
alpha_b.x = alphaFrame_b.x;
alpha_b.y = alphaFrame_b.y;
}
alpha_b.alpha = 1;
}
}
}
[/code]
-> buttonMode가 true이면, 마우스 포인터를 Sprite객체위에 놓으면 모양을 손가락 모양으로 바꾼다.
* 그런데 만약 Sprite 객체로 버튼을 만들어 꾸며서 사용할 경우에는 buttonMode = true 속성 뿐 아니라,
useHandCursor = true 속성과 mouseChildren = false 를 함께 적용해주면 예기치 않은 동작에서 벗어 날
수 있다.
useHandCursor는 기본값이 true인데 이 속성은 buttonMode = true인 상태에서 손 모양 커서를 표시하겠다는 뜻이고, mouseChildren는 해당 객체의 자식에서 마우스의 기능을 사용할 것인지의 여부이다. 결론적으로 false인데 그 이유는 예를 들어
[code as3]
var spriteArea Sprite = new Sprite();
addChild( spriteArea );
var circle Sprite = new Sprite();
circle.graphics.beginFill( 0xFFFF00 );
circle.graphice.drawCircle( 0, 0, 100, 100 );
addChild( circle );
spriteArea.mouseChildren = false;
[/code]
이런식으로 자식 인스턴스에서만 마우스가 표시되어야지 부모까지 적용이 되게하면 마우스 포인터를 궂이
손 모양으로 지정해주는 의미가 없어지기 때문이다. 더 정확히 http://67740420.textcube.com/?page=9
여기 예제에서 Search 버튼인 자식 인스턴스에서는 손 모양이 적용되고 버튼 바깥부분인 부모 인스턴스에서
는 평범한 화살표 모양으로 바뀌게 되는 것이다.
if문 조건에서인 alpha_a인 지한 A무비클립(Sprite 객체)과 alphaFrame_a인 연한 색의 stage에 있는 A무비클립(DisplayObject 표시 객체) 영역의 겹침 부분을 감지하여 Boolean값으로 반환한다. 그런데 여기서 영역 대 영역으로 감지란 눈에 보이는 무비클립의 모양이 아닌, 네모 영역으로 겹침을 판단한다.

이렇게 되면 if조건을 true로 인식하고 alpha_a의 x와 y좌표 위치를 alphaFrame_a의 x와 y좌표 위치로 이동
시키는 것이다.
댓글 없음:
댓글 쓰기