Spriteをクリックしたときにフォーカスを与える
クリックしたときにフォーカスを当てるのに少し戸惑ったのでメモです。まず、動作しているものはこれ。
まず、矢印のSprite。focusRectをfalseに設定にしておくとフォーカスがあたったときにフォーカスの枠が表示されなくなります。プログラム中からSpriteに明示的にフォーカスを与えたい場合は、stageのfocusプロパティにフォーカスを与えるオブジェクトを指定します。
package { import flash.display.Sprite; import flash.text.TextField; public class Study05Focus extends Sprite { public function Study05Focus():void { for (var i:int = 0; i < 10; i++) { var arrow:Study05Arrow = new Study05Arrow(); addChild(arrow); arrow.x = Math.floor(320 * Math.random()); arrow.y = Math.floor(240 * Math.random()); } } } }
package { import flash.display.Sprite; import flash.text.TextField; import flash.events.MouseEvent; import flash.events.FocusEvent; import flash.filters.DropShadowFilter; public class Study05Arrow extends Sprite { public function Study05Arrow():void { draw(0x0000ff); // フォーカスしたときに色を付けないようにする focusRect = false; addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); addEventListener(MouseEvent.MOUSE_UP, onMouseUp); addEventListener(FocusEvent.FOCUS_IN, focusIn); addEventListener(FocusEvent.FOCUS_OUT, focusOut); } private function onMouseDown(event:MouseEvent):void { stage.focus = this; filters = [new DropShadowFilter()]; startDrag(); } private function onMouseUp(event:MouseEvent):void { stopDrag(); filters = []; } private function focusIn(event:FocusEvent):void { draw(0xff0000); } private function focusOut(event:FocusEvent):void { draw(0x0000ff); } private function draw(color:uint):void { graphics.lineStyle(1, 0x000000); graphics.beginFill(color); graphics.moveTo(0, 15); graphics.lineTo(0, 45); graphics.lineTo(60, 45); graphics.lineTo(60, 60); graphics.lineTo(90, 30); graphics.lineTo(60, 0); graphics.lineTo(60, 15); graphics.lineTo(0, 15); graphics.endFill(); } } }