2016-07-26 2 views
0

J'essaye de faire défiler mon code entre 0 et 255 en utilisant le Leap Motion (donc j'imprime: 1, puis 2, puis 3 sur les cercles cw et 3, 2 , 1 sur les cercles d'acw).Java: Leap Motion retourne la valeur de void

Les actions du geste résident dans une méthode void onFrame().

Je dois incrémenter un nombre chaque fois qu'un mouvement de cercle est détecté et sortir chaque nombre unique. À l'heure actuelle, mon code fait l'incrémentation en arrière-plan et ne compte que lorsque j'entre la figure (ainsi mon chiffre compté est affiché dans la deuxième invite). C'est mauvais parce que l'utilisateur ne peut pas réellement voir quel nombre ils commettent à l'invite de seuil.

S'il vous plaît, aidez, je suis assez nouveau à cela et ça ralentit mon projet!

J'ai fourni des classes réduites pour mettre en évidence l'origine du problème.

classe Listener:

public class ImageJListener extends Listener { 

public Robot robot; 

public int promptValue; 
// potentially look into atomic objects and non atomic objects in case this has a threading issue 
public ImageJListener() { 
    this.promptValue = 0; 
} 

public int getPromptValue() { 
    return this.promptValue; 
} 

... 

public int onFrame(Controller controller) { 
    com.leapmotion.leap.Frame frame = controller.frame(); 

    for (Gesture gesture : frame.gestures()) { 
     if (gesture.type() == Type.TYPE_CIRCLE) { 
      CircleGesture circle = new CircleGesture(gesture); 
      if (circle.pointable().direction().angleTo(circle.normal()) <= Math.PI/4) { 


       promptValue++; 
       return promptValue; 


      } else { 

       promptValue--; 
       return promptValue; 

      } 

     } else if (gesture.type() == Type.TYPE_KEY_TAP) { 
      KeyTapGesture Tap; 
      Tap = new KeyTapGesture(gesture); 

      try { 
       Robot robot = new Robot(); 
       robot.keyPress(KeyEvent.VK_ENTER); 
       robot.keyRelease(KeyEvent.VK_ENTER); 
      } catch (AWTException awt) { 
      } 
     } 
    } 
} 

}

classe Plugin (qui appelle la variable promptValue pour remplir l'invite:

IJ.setRawThreshold(imp, IJ.getNumber("prompt", (listener.getPromptValue())), IJ.getNumber("prompt", (listener.getPromptValue())), null); 

Un grand merci à l'avance,

Ryan

Répondre

0

Renvoyer une valeur à partir de OnFrame() n'aiderait pas. OnFrame est appelé par le code Leap Motion et il ne ferait rien avec la valeur même si vous pouviez en fournir un. Ce dont vous avez besoin est une fonction pour changer la valeur de l'invite en place - si c'est même possible. OnFrame pourrait alors appeler cette fonction.

+0

Je pensais utiliser la classe Observable pour pomper les mises à jour - pensez-vous que cela le couperait? –

+0

Il semble exagéré d'appeler une seule fonction, mais si vous prévoyez d'envoyer plus de données que ce seul entier, alors peut-être que cela en vaut la peine. Je ne suis pas vraiment un mec Java, cependant, il est stupide pour moi de vous donner des conseils de style Java. –