Для направлений прокрутки вы можете сравнить координаты x и y свойства direction объекта Gesture. В JavaScript JavaScript API перехода, векторы представлены 3-элементными массивами. Так:
gesture.direction[0] is the x coordinate (left to right)
gesture.direction[1] is the y coordinate ( up, down)
gesture.direction[2] is the z coordinate (front to back)
В примере, который вы приводите, рассматривается только знак x-координаты, поэтому все прокрутки классифицируются как правые или левые. Чтобы также классифицировать swipes как вверх или вниз, вам нужно будет сравнить величину координат x и y, чтобы определить, является ли салфетка более горизонтальной или более вертикальной, а затем сравнить знак координаты, чтобы определить, осталось ли горизонтальное салфетки или правый или вертикальный салфетки вверх или вниз.
Жест жестокости сообщается как другой тип жестов, поэтому вы можете посмотреть свойство gesture.type.
Вот пример JavaScript, который иллюстрирует это (адаптировано из файла Sample.html, включенного в SDK Leap Motion):
// Store frame for motion functions
var previousFrame = null;
// Setup Leap loop with frame callback function
var controllerOptions = {enableGestures: true};
Leap.loop(controllerOptions, function(frame) {
// Display Gesture object data
var gestureOutput = document.getElementById("gestureData");
var gestureString = "";
if (frame.gestures.length > 0) {
for (var i = 0; i < frame.gestures.length; i++) {
var gesture = frame.gestures[i];
switch (gesture.type) {
case "circle":
gestureString += "<br>ID: " + gesture.id + "<br>type: " + gesture.type + ", "
+ "<br>center: " + vectorToString(gesture.center) + " mm, "
+ "<br>normal: " + vectorToString(gesture.normal, 2) + ", "
+ "<br>radius: " + gesture.radius.toFixed(1) + " mm, "
+ "<br>progress: " + gesture.progress.toFixed(2) + " rotations"
+ "<br>";
break;
case "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";
}
}
gestureString += "<br>ID: " + gesture.id + "<br>type: " + gesture.type + ", "
+ "<br>direction " + swipeDirection
+ "<br>gesture.direction vector: " + vectorToString(gesture.direction, 2) + ", "
+ "<br>";
break;
}
}
}
gestureOutput.innerHTML = gestureString + gestureOutput.innerHTML;
})
function vectorToString(vector, digits) {
if (typeof digits === "undefined") {
digits = 1;
}
return "(" + vector[0].toFixed(digits) + ", "
+ vector[1].toFixed(digits) + ", "
+ vector[2].toFixed(digits) + ")";
}
Чтобы использовать это, поместите его где-нибудь, он будет выполнен и будет содержать элемент с идентификатором gestureData в тексте документа HTML:
<div id="gestureData"></div>
Мой друг создал библиотеку именно для этой цели. Он проверяет swipes в 6 разных направлениях и может определить, в каком направлении движется круг.
https://github.com/L1fescape/curtsy
Его код должен быть легко читаемым, поэтому, если вы хотите увидеть, как он сделал все, что мог.