2013-08-02 59 views
9

我正尝试使用JavaScript API简单地获取使用Leap Motion轻扫手势的方向。我的代码是:使用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){ 
     // } 
    } 
}); 

我可以从数组中获取当前手势,但无法获取类型或方向。有任何想法吗?

谢谢。

回答

0

快速分析后,我发现你正在寻找的信息:

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

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

我得到“Uncaught TypeError:无法读取未定义的属性'type'on var gestureType = frame.gestures [0] .type;对不起,应该在我的问题中注意到。 – mrEmpty

0

框架对象有一个手势时,才会有一个。一帧可以包含0手,0手指或0手势。您必须检查手势是否存在,然后检索所需的信息。

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

with enableGestures:true and var gesture = frame.gestures [i];

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

这是我做到了我自己,TBH如果它向左或向右,我不能REM,但它不是elmination

0

这里的一个长期的过程是完美的作品对我来说是代码示例:

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

如果您关心的是右,左,上,下,您可以比较滑动方向矢量的水平和垂直坐标的绝对值,以查看滑动是更垂直还是更水平(然后比较相关的坐标为零,看看滑动是向右还是向左,或者向上或向下):

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

}) 

有了一个稍微复杂的比较,可以按向前或向后分类刷卡了。

+0

到目前为止最完整的例子。谢谢:)当人们不把答案标记为正确时,我讨厌它... – thgie