Where I talk about me, programming and other stuff that you will not read

Gesture capture in flash lite

When building moGo and moPhoto I had to find a way for flash lite to capture gestures such as swiping your finger from left to right. I decided to build a test application which simply would just output the gesture into a text box and here it is, along with the code.

Gesture Capture


Try doing some simple gestures such as up to down swipe or a right to left swipe using your mouse inside the box below. Also try performing a diagonal or rotation gesture.



The code


//fscommand2("FullScreen", "true");

var startX:Number;
var startY:Number;
var endX:Number;
var endY:Number;
var endY:Number;
var gestureCombo1:String;
var gestureCombo2:String;
var gestureComboL1:Number;
var gestureComboL2:Number;
var gesturesListener:Object = new Object();
 
gesturesListener.onMouseDown = function()
{
    gestureCombo1 = "";
    gestureCombo2 = "";
    gestureComboL1 = 0;
    gestureComboL2 = 0;
    startX = _root._xmouse;
    startY = _root._ymouse;
    this.interval = setInterval(catchGesture, 80);
}
gesturesListener.onMouseUp = function()
{
    clearInterval(gesturesListener.interval);
    gestureCombo = "";
}
Mouse.addListener(gesturesListener);




// minimum length of a gesture
var MIN_H_GESTURE:Number = Stage.width / 4.5;
var MIN_V_GESTURE:Number = Stage.height / 4.5;

// flags for each kind of gesture
var UP_TO_DOWN:Number = 1;
var DOWN_TO_UP:Number = 2;
var LEFT_TO_RIGHT:Number = 3;
var RIGHT_TO_LEFT:Number = 4;
var DIAG_UP_LEFT_RIGHT:Number = 5;
var DIAG_UP_RIGHT_LEFT:Number = 6;
var DIAG_DOWN_LEFT_RIGHT:Number = 7;
var DIAG_DOWN_RIGHT_LEFT:Number = 8;


// Catch a gesture
function catchGesture()
{
    endX = _root._xmouse;
    endY = _root._ymouse;
   
    var xDelta:Number = endX - startX;
    var yDelta:Number = endY - startY;
 
    var gesture:Number = 0;
    var microGesture:Number = 0;
 
     // gesture match
    if(xDelta > MIN_H_GESTURE)
        gesture = LEFT_TO_RIGHT;
    else if(xDelta < - MIN_H_GESTURE)
        gesture = RIGHT_TO_LEFT;
 
    if(yDelta > MIN_V_GESTURE)
        gesture = UP_TO_DOWN;
    else if(yDelta < - MIN_V_GESTURE)
        gesture = DOWN_TO_UP;
   
    if(yDelta > MIN_V_GESTURE && xDelta > MIN_H_GESTURE)
        gesture = DIAG_DOWN_LEFT_RIGHT;
    else if(yDelta < - MIN_V_GESTURE && xDelta > MIN_H_GESTURE)
        gesture = DIAG_UP_LEFT_RIGHT;
       
    if(yDelta > MIN_V_GESTURE && xDelta < - MIN_H_GESTURE)
        gesture = DIAG_DOWN_RIGHT_LEFT;
    else if(yDelta < - MIN_V_GESTURE && xDelta < - MIN_H_GESTURE)
        gesture = DIAG_UP_RIGHT_LEFT;
   
   
    if(gesture > 0){
        if (gestureComboL1 == 2){
            gestureCombo1 = "";
            gestureComboL1 = 0;
        }
        if (gestureComboL2 == 3){
            gestureCombo2 = "";
            gestureComboL2 = 0;
        }
        gestureComboL1++;
        gestureComboL2++;
        gestureCombo1 = gestureCombo1 + gesture;
        gestureCombo2 = gestureCombo2 + gesture;
        handleGesture(gesture);
        startX = _root._xmouse;
        startY = _root._ymouse;
    }
   

   

}


// do what for each gesture
// ---------------------------------------
function handleGesture(gestureFlags:Number)
{
       
    if(gestureCombo1 == "33") // left to right gesture
        debug.text = "left to right gesture";
    if(gestureCombo1 == "44") // right to left gesture
        debug.text = "right to left gesture";
    if(gestureCombo1 == "11") // up to down gesture
        debug.text = "up to down gesture";
    if(gestureCombo1 == "22") // down to up gesture
        debug.text = "down to up gesture";
    if(gestureCombo1 == "55") // diag up from left to right gesture
        debug.text = "diaginal up from left to right gesture";
    if(gestureCombo1 == "77") // diag down from left to right gesture
        debug.text = "diaginal down from left to right gesture";
    if(gestureCombo1 == "66") // diag up from right to left gesture
        debug.text = "diaginal up from right to left gesture";
    if(gestureCombo1 == "88") // diag down from right to left gesture
        debug.text = "diaginal down from right to left gesture";
    if(gestureCombo1 == "32" || gestureCombo1 == "24" || gestureCombo1 == "13") // rotate lest
        debug2.text = "rotate left";
    if(gestureCombo1 == "42" || gestureCombo1 == "23" || gestureCombo1 == "31") // rotate lest
        debug2.text = "rotate right";
    if(gestureCombo2 == "324" || gestureCombo2 == "241" || gestureCombo2 == "132") // rotate right
        debug2.text = "rotate left";
    if(gestureCombo2 == "423" || gestureCombo2 == "231" || gestureCombo2 == "314") // rotate right
        debug2.text = "rotate right";
       
}




Post a comment

New user? Thats ok you can still post.

Your name:
Your email:
A password:
Comment:

Web designer?

Twitter (follow)



I'm rocking out to

All that remains