티스토리 뷰
플래시 작업중 2중으로 객체가 마우스 오버, 아웃이벤트를 가지고있을경우
밑에 있던 객체는 마우스 포커스를 잃어 자연스레 마우스 아웃이 진행된다.
아래 샘플과 같이 main_mc안에 under_mc, close_mc가 들어있고
under_mc에서 close_mc로 마우스를 가져가면 under_mc 부분은 마우스아웃이 진행되어 오버 효과가 풀리게된다.
플래시 작업할때 의외로 많은 고민과 애로사항이 있는 부분이다.
이것을 relateObject라는 이벤트로 캐치해낸뒤 약간의 조건문으로 해결할 수 있다.
문제점)
APi를 보면
relatedObject:InteractiveObject
이벤트와 관련된 표시 목록 객체에 대한 참조입니다.
예를 들어 mouseOut 이벤트가 발생하면 relatedObject는 포인팅 장치가 현재 가리키고 있는 표시 목록 객체를 나타냅니다.
이 속성은 mouseOut, mouseOver, rollOut 및 rollOver 이벤트에 적용됩니다.
라고 나와있다.
해결1. 조건문으로 간소화 처리)
import flash.events.MouseEvent; import caurina.transitions.Tweener; import caurina.transitions.properties.ColorShortcuts; ColorShortcuts.init(); main_mc.under_mc.buttonMode = true; main_mc.close_mc.buttonMode = true; main_mc.under_mc.addEventListener(MouseEvent.MOUSE_OVER, overHan); main_mc.under_mc.addEventListener(MouseEvent.MOUSE_OUT, underOutHan); main_mc.close_mc.addEventListener(MouseEvent.MOUSE_OVER, overHan); main_mc.close_mc.addEventListener(MouseEvent.MOUSE_OUT, closeOutHan); function overHan(e:MouseEvent):void{ Tweener.addTween(e.target, {_color:"0x0066ff", time:1}); } function underOutHan(e:MouseEvent):void{ var container:MovieClip = e.currentTarget.parent as MovieClip; var relate:Object = e.relatedObject; if(relate != null){ //null체크를 안해주면 relate.name 속성에 접근할 수 없어서 에러가난다. if(relate.name == "close_mc")return; } Tweener.addTween(e.target, {_color:null, time:1}); } function closeOutHan(e:MouseEvent):void{ Tweener.addTween(e.target, {_color:null, time:1}); }
22 : relate변수에 타겟이 바뀐 e.relateObject를 받은뒤
24 : 객체의 속성이 null이 아닐경우 다음을 진행한다.
25 : 타겟이 변환될 객체의 name속성을 비교하여 return 처리한다.
해결 간소화)
'■ 플래시 ■ > Adobe ActionScript3.0' 카테고리의 다른 글
2. AS3.0 새로 구성된요소 (0) | 2013.10.17 |
---|---|
1. AS3.0의 시작? (0) | 2013.10.17 |
Localconnection - 서로다른 SWF에 대한 상호 동작 (0) | 2013.10.16 |
dispatchEvent - EventDispatcher 상속을 활용한 이벤트전파 (0) | 2013.10.16 |
Loader - applicationDomain.getDefinition을 이용한 라이브러리 로드 (0) | 2013.10.16 |
댓글