スポンサーサイト

-------- | --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[ActionScript 3.0] Mouse Gesture Recognition

2007-11-21 | 19:52

マウスジェスチャをサポートするライブラリ Mouse Gesture Recognition
マウスの軌跡を登録しておけば、その軌跡に近い動きをした時にイベントを通知してくれる。

下のウィンドウにマウスで四角形か三角形を(マウスをクリックしたまま一筆書きで)書いてみて下さい。

package
{
    import flash.display.*;
    import flash.utils.*;
    import flash.events.*;
    import fl.transitions.Tween;
    import fl.transitions.easing.*;

    import com.foxaweb.ui.gesture.*;
       
    [SWF(width="400", height="400", backgroundColor="#ffffff")]
    public class MouseShape extends Sprite
    {
        private var mg:MouseGesture;
       
        public var draw_mc:Sprite;
       
        private var timer:Timer;
        private var fadeTween:Tween;
        private var fiabTween:Tween;

        public function MouseShape()
        {
            prepareMouseGestureEngine();
        }

        private function prepareMouseGestureEngine():void{
            draw_mc = new Sprite();
            addChild(draw_mc);
           
            stage.scaleMode="noScale";

            mg=new MouseGesture(stage);       
            mg.addGesture("rectangle","2064");
            mg.addGesture("triangle","305");
            mg.addGesture("O","432107654");
            mg.addGesture("no","0");

            mg.addGesture("BACKSPACE","4");
           
            timer=new Timer(500,1);
            timer.addEventListener(TimerEvent.TIMER,fadeDrawing);
           
            mg.addEventListener(GestureEvent.GESTURE_MATCH,matchHandler);
            mg.addEventListener(GestureEvent.NO_MATCH,noMatchHandler);
            mg.addEventListener(GestureEvent.START_CAPTURE,startHandler);
            mg.addEventListener(GestureEvent.STOP_CAPTURE,stopHandler);
        }

        protected function matchHandler(e:GestureEvent):void{
            switch (e.datas){
                case "BACKSPACE":
                break;
                case "SPACE":
                break;
                case "o":
                break;
                case "rectangle":
                    trace("rectangle");
                createRectangle();
                break;
                case "triangle":
                    trace("triangle");
                createTriangle();
                break;
                default:
                break;
            }

           
            timer.start();
        }
       
        /**
        * no match handler
        */   
        protected function noMatchHandler(e:GestureEvent):void{
            draw_mc.graphics.clear();
        }
       
        /**
        * start capturing phase handler
        */
        protected function startHandler(e:GestureEvent):void{
           
           
            timer.stop();
            if (fadeTween)fadeTween.stop();
            if (fiabTween)fiabTween.stop();
           
            draw_mc.graphics.clear();
            draw_mc.alpha=1;
            draw_mc.graphics.lineStyle(4,0x444444);
            draw_mc.graphics.moveTo(mouseX,mouseY);
            addEventListener(Event.ENTER_FRAME,capturingHandler);
        }
       
        /**
        * fade the drawing zone
        */
        protected function fadeDrawing(e:TimerEvent):void{
             fadeTween = new Tween(draw_mc,"alpha",Regular.easeIn,draw_mc.alpha,0,20);
        }
               
        /**
        * stop capturing phase handler
        */
        protected function stopHandler(e:GestureEvent):void{
            removeEventListener(Event.ENTER_FRAME,capturingHandler);
        }
       
        /**
        * capturing handler
        */
        protected function capturingHandler(e:Event):void{
            draw_mc.graphics.lineTo(mouseX,mouseY);
        }

        private function createRectangle():void{
            var spr:Sprite = new Sprite();
            spr.graphics.lineStyle(1,0,1);
            spr.graphics.beginFill(0xff);
            spr.graphics.moveTo(0,0);
            spr.graphics.lineTo(0,100);
            spr.graphics.lineTo(100,100);
            spr.graphics.lineTo(100,0);
            spr.graphics.lineTo(0,0);
            spr.graphics.endFill();
            spr.x = stage.mouseX;
            spr.y = stage.mouseY;
            addChild(spr);

            spr.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void{
                    removeChild((Sprite)(e.target));
                    });
        }
        private function createTriangle():void{
            var spr:Sprite = new Sprite();
            spr.graphics.lineStyle(1,0,1);
            spr.graphics.beginFill(0xff00);
            spr.graphics.moveTo(50,0);
            spr.graphics.lineTo(0,100);
            spr.graphics.lineTo(100,100);
            spr.graphics.lineTo(50,0);
            spr.graphics.endFill();
            spr.x = stage.mouseX-50;
            spr.y = stage.mouseY;
            addChild(spr);
            spr.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void{
                    removeChild((Sprite)(e.target));
                    });
        }
    }
}


スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。