2013-08-02 7 views
9

Sto cercando di ottenere semplicemente la direzione di un gesto di scorrimento con Leap Motion utilizzando l'API javascript. Il mio codice è:Rilevamento della direzione del gesto di scorrimento con Leap Motion

$(document).ready(function() { 
    controller = new Leap.Controller("ws://localhost:6437/"); 
    listener = new Leap.Listener(); 

    listener.onFrame = function(controller) { 
     var frame = controller.frame(); 
     var hands = frame.hands(); 
     var pointables = frame.pointables(); 

     var gestures = frame.gestures(); 

     $("#rotationAxis").text(pointables.length); 
     $("#gestureDetected").text(gestures[0]); 
    } 

    controller.addListener(listener); 
    controller.enableGesture("swipe", true); 
    listener.onConnect = function(controller) { 
     // calibrate = new Leap.Calibrate(controller); 
     // calibrate.onComplete = function(screen){ 
     // } 
    } 
}); 

Posso ottenere il gesto corrente dall'array, ma non è possibile ottenere il tipo o la direzione. Qualche idea?

Grazie.

risposta

0

Dopo una rapida analisi ho trovato le informazioni che state cercando:

var gestureType = frame.gestures[0].type; 

if (gestureType === "swipe") 
{ 
    if (frame.gestures[0].direction[0] > 0) 
     console.log(">>> swipe >>>"); 
    else 
     console.log("<<< swipe <<<"); 
} 
+0

Ottengo "Uncaught TypeError: Impossibile leggere la proprietà 'type' di undefined" su var gestureType = frame.gestures [0] .type; Spiacente, dovrei averlo notato nella mia domanda. – mrEmpty

0

L'oggetto telaio ha un gesto solo quando v'è uno. Una cornice può contenere 0 mani, 0 dita o 0 gesture. Devi controllare se è presente un gesto, quindi recuperare le informazioni necessarie.

var frame = controller.frame(); 
if (frame.gestures.length > 0) 
{ 
    for (var i = 0; i < frame.gestures.length; i++) 
    { 
    var gesture = frame.gestures[i]; 
    var type = gesture.type; 
    var direction = gesture.direction; 
    } 
} 
2

con enableGestures: true e var gesture = frame.gestures [i];

 // detect swipe 
     if (gesture.direction[0] > gesture.direction[2]) { 
     console.log('swipe left') 
     } 

Ecco come ho fatto io, TBH non posso rem se è a destra oa sinistra, ma non è un lungo processo di elmination

0

qui è un esempio di codice che funziona perfettamente per me:

var controller = new Leap.Controller({enableGestures: true}); 

controller.on('gesture', function (gesture){ 
    console.log(gesture); 
    if(gesture.type === 'swipe'){ 
     handleSwipe(gesture); 
    } 
}); 

function handleSwipe (swipe){ 
    var startFrameID; 
    if(swipe.state === 'stop'){ 
     if (swipe.direction[0] > 0){ 
      //this means that the swipe is to the right direction 
      moveRight(); 
     }else{ 
      //this means that the swipe is to the left direction 
      moveLeft(); 
     } 
    } 
} 

controller.connect(); 
11

Se ti interessa a destra, a sinistra, in alto o in basso, puoi confrontare il valore assoluto delle coordinate orizzontali e verticali del vettore di direzione di scorrimento per vedere se lo scorrimento è più verticale o più orizzontale (e quindi confronta la coordinata rilevante a zero per vedere se il colpo sta andando a destra o a sinistra, o alto o in basso):

// Setup Leap loop with frame callback function 
var controllerOptions = {enableGestures: true}; 

Leap.loop(controllerOptions, function(frame) { 

    if (frame.gestures.length > 0) { 
    for (var i = 0; i < frame.gestures.length; i++) { 
     var gesture = frame.gestures[i]; 

     if (gesture.type == "swipe") { 
      //Classify swipe as either horizontal or vertical 
      var isHorizontal = Math.abs(gesture.direction[0]) > Math.abs(gesture.direction[1]); 
      //Classify as right-left or up-down 
      if(isHorizontal){ 
       if(gesture.direction[0] > 0){ 
        swipeDirection = "right"; 
       } else { 
        swipeDirection = "left"; 
       } 
      } else { //vertical 
       if(gesture.direction[1] > 0){ 
        swipeDirection = "up"; 
       } else { 
        swipeDirection = "down"; 
       }     
      } 
     } 
    } 
    } 

}) 

Con un paragone un po 'più complesso, si potrebbe classificare come colpi in avanti o indietro, troppo.

+0

Finora l'esempio più completo. Grazie :) Odio quando le persone non segnano una risposta come giusta ... – thgie