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";
}

