Прыжок - Обработка - Направление жеста смахивания?

До сих пор я использовал две библиотеки для своего проекта прыжкового движения в качестве боджа, потому что они обе позволяли разные функции, уникальные (лучше реализованные) друг для друга. Однако я хотел бы использовать только одну библиотеку, поскольку несколько вызывают проблемы.

В основном я использую Leap Motion от Майкла Хойера (мне нужно использовать эту библиотеку, потому что в настоящее время это единственная библиотека, которую я могу найти, которая позволяет мне оптимизировать hmd, а также коэффициент масштабирования).

Реализация жеста приведена ниже, есть ли способ получить от этого направление смахивания?

void onInit(final Controller controller)
{
  controller.enableGesture(Gesture.Type.TYPE_SWIPE);
  // enable top mounted policy
  controller.setPolicyFlags(Controller.PolicyFlag.POLICY_OPTIMIZE_HMD);
}

void onFrame(final Controller controller)
{
  Frame frame = controller.frame();
  for (Gesture gesture : frame.gestures())
  {
      if ("TYPE_SWIPE".equals(gesture.type().toString()) && "STATE_START".equals(gesture.state().toString())) {
    }

    println("gesture " + gesture + " id " + gesture.id() + " type " + gesture.type() + " state " + gesture.state() + " duration " + gesture.duration() + " durationSeconds " + gesture.durationSeconds()); 

 }
}

Я попробовал gesture.direction () в тщетной надежде, что это сработает, но направление не распознается функцией.

Любая помощь высоко ценится! Заранее спасибо! Воля


person Will_P    schedule 22.10.2014    source источник


Ответы (2)


Во-первых, вы можете использовать библиотеки Leap Motion непосредственно в Processing.

Во-вторых, вам нужно получить объект жеста как экземпляр SwipeGesture, чтобы получить доступ к функции direction ():

SwipeGesture swipe = SwipeGesture(gesture);

Базовый класс Gesture определяет только функции / свойства, общие для всех жестов. Вот как это работает в Leap Motion API; вероятно, он работает таким же образом в используемой вами библиотеке-оболочке.

person Charles Ward    schedule 22.10.2014
comment
Спасибо за ответ. Полезно знать, что у меня есть прямой доступ к библиотекам движений Leap. (Я немного не уверен, как это сделать) Я могу быть толстым, но я действительно не могу понять, как реализовать это в моем коде, не могли бы вы помочь мне интегрировать его с приведенным выше кодом? - person Will_P; 23.10.2014
comment
Извините, игнорируйте мой последний комментарий, мне удалось заставить его работать и получить от него направление смахивания, однако моя проблема теперь в том, что swipe.direction () возвращает вектор, и когда я пытаюсь сохранить его в PVector, чтобы получить координату x, он, очевидно, делает не работает и ошибки, говорящие «не могу преобразовать вектор в PVector», я попытался импортировать java.utils и сохранить его в векторе, но когда я это сделаю, я получаю «не могу преобразовать вектор в вектор» - person Will_P; 23.10.2014
comment
Опять же: игнорируйте приведенный выше комментарий, теперь я решил, что опубликую код ниже, спасибо, что указали мне в правильном направлении! - person Will_P; 23.10.2014

import com.leapmotion.leap.Controller;
import com.leapmotion.leap.Frame;
import com.leapmotion.leap.Gesture;
import com.leapmotion.leap.Hand;
import com.leapmotion.leap.HandList;
import com.leapmotion.leap.processing.LeapMotion;
import com.leapmotion.leap.SwipeGesture;
import com.leapmotion.leap.Vector;

LeapMotion leapMotion;

void setup()
{
  size(16 * 50, 9 * 50);
  background(20);

  leapMotion = new LeapMotion(this);
}

void draw()
{
  fill(20);
  rect(0, 0, width, height);
}

void onInit(final Controller controller)
{
  controller.enableGesture(Gesture.Type.TYPE_SWIPE);
  // enable top mounted policy
  //controller.setPolicyFlags(Controller.PolicyFlag.POLICY_OPTIMIZE_HMD);
}

void onFrame(final Controller controller)
{
  Frame frame = controller.frame();
  for (Gesture gesture : frame.gestures())
  {

 if(gesture.type() == Gesture.Type.TYPE_SWIPE) {
    SwipeGesture swipeGesture = new SwipeGesture(gesture);

    Vector swipeVector  = swipeGesture.direction();
    println("swipeVector : " + swipeVector);

    float swipeDirection = swipeVector.getX();
    println(swipeDirection);
   }
}

  HandList hands = frame.hands();
  //println(hands.count());
}

Просто на будущее, надеюсь, это поможет кому-то другому!

person Will_P    schedule 23.10.2014
comment
Здравствуйте, я разработчик дополнительной библиотеки. Я заметил, что спрос на направление свайпа, естественно, есть. Поэтому я буду реализовывать и обновлять библиотеку с этой функцией. После этого я уведомлю вас здесь с коротким комментарием. - person Darius; 27.05.2015