2013-08-02 17 views
9

Próbuję po prostu uzyskać kierunek gestu machnięcia przy użyciu Leap Motion za pomocą interfejsu API javascript. Mój kod to:Wykrywanie kierunku gestów przesuwania za pomocą 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){ 
     // } 
    } 
}); 

Mogę pobrać aktualny gest z tablicy, ale nie mogę uzyskać typu ani kierunku. Jakieś pomysły?

Dzięki.

Odpowiedz

0

Po szybkiej analizie znalazłem informacji szukasz:

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

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

Otrzymuję "Uncaught TypeError: Nie można odczytać właściwości" typ "nieokreślonego" na var gestureType = frame.gestures [0] .type; Przepraszam, powinienem to zauważyć w moim pytaniu. – mrEmpty

0

Przedmiotem ramka ma gest tylko wtedy, gdy istnieje. Ramka może zawierać 0 dłoni, 0 palców lub 0 gestów. Musisz sprawdzić, czy gest jest obecny, a następnie pobrać potrzebne informacje.

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

z włączonymi gestami: true i var gesture = frame.gestures [i];

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

to jak ja to zrobiłem, tbh nie mogę rem, czy to w lewo lub w prawo, ale nie jest to długi proces elmination

0

tutaj jest przykładowy kod, który działa idealnie dla mnie:

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

Jeśli dbasz o prawo, w lewo, w górę lub w dół, można porównać wartość bezwzględną współrzędnych poziomych i pionowych wektora kierunku Przesuń, aby zobaczyć, czy Swipe jest bardziej pionowa lub bardziej poziomo (a następnie porównaj odpowiednią współrzędną na zero, aby sprawdzić, czy przesunięcie idzie w prawo czy w lewo, lub w górę lub w dół):

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

}) 

Przy nieco bardziej złożonym porównaniu można również klasyfikować przesunięcia w przód lub w tył.

+0

Jak dotąd najbardziej kompletny przykład. Dziękuję :) Nienawidzę tego, gdy ludzie nie zaznaczają odpowiedzi jako właściwej ... – thgie

Powiązane problemy