buttonMode

ActionScript 3 2007. 5. 28. 14:23 |

as 3.0에서는 buttonMode 속성을 true 라고 해줘야 손가락 모양이 나타난다.


그런데 true 라고 해줘도 안나타나는 경우가 있다. 그 경우는 다음과 같다...

var sp:Sprite = new Sprite();
var tf:TextField = new TextField();
tf.text = "미나토입니다";
tf.autoSize = TextFieldAutoSize.LEFT;
sp.addChild(tf);
addChild(sp);

sp.buttonMode = true;

sp.addEventListener(MouseEvent.ROLL_OVER, over);
function over(event:Event):void
{
 trace(event);
}



이것은 hitArea 의 영역을 설정해주지 않았기 때문으로 보여진다. hitArea 의 리턴값은 Sprite 인데 TextField 는 Sprite 를 상속받지 않기 때문일 것으로 보인다...

그래서 다음과 같이 코드를 추가하게 되면...

var sp:Sprite = new Sprite();
var tf:TextField = new TextField();
tf.text = "미나토입니다";
tf.autoSize = TextFieldAutoSize.LEFT;
tf.selectable = false;
var hit_sp:Sprite = new Sprite(); // hitArea 의 리턴값이 DisplayObject나 Rectangle 클래스가 아닐까 했지만 Sprite 이다... 그리고 addChild 를 해줘야만 적용된다.
hit_sp.graphics.beginFill(0xFFFFFF, 0);
hit_sp.graphics.drawRect(0, 0, tf.width, tf.height);

sp.addChild(tf);
sp.addChild(hit_sp);
sp.hitArea = hit_sp;

sp.buttonMode = true;
addChild(sp);

sp.addEventListener(MouseEvent.ROLL_OVER, over);
function over(event:Event):void
{
 trace(event);
}



그런데 tf가 hitArea 의 뎁스(as 3.0에서는 인덱스이지만...) 보다 위에 있다면 buttonMode 가 활성화 되지 않는다.

결과적으로 TextField 가 hitArea 위에 존재한다면 tf의 영역을 제외한 만큼만 buttonMode 가 활성화 된다는 것이다.


같은 DisplayObject 이지만 buttonMode 같은 몇가지 속성 적용에는 다르다는 것을 기억해야 한다.

Posted by 미나토

댓글을 달아 주세요