2016-07-26 24 views
0

Ich versuche, meinen Code mit der Sprungbewegung in Zahl zwischen 0 und 255 zu scrollen (so druckt: 1, dann 2, dann 3 auf cw Kreise und 3, 2 , 1 auf acw Kreisen).Java: Leap Motion Rückgabewert von void

Die Aktionen der Geste befinden sich in einer void onFrame() -Methode.

Ich muss jedes Mal, wenn eine Kreisgeste erkannt wird, eine Zahl erhöhen und jede einzelne Zahl ausgeben. So wie es aussieht, macht mein Code das Inkrementieren im Hintergrund und zählt nur hoch, wenn ich die Zahl eintrage (so wird meine hochgezählte Zahl in der zweiten Aufforderung angezeigt). Das ist schlecht, weil der Benutzer nicht tatsächlich sehen kann, welche Nummer an die Schwellenwerteingabe übergeben wird.

Bitte helfen Sie mir, ich bin ziemlich neu und es verlangsamt mein Projekt!

Ich habe abgespeckte Klassen zur Verfügung gestellt, um hervorzuheben, wo das Problem liegt.

Listener Klasse:

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) { 
      } 
     } 
    } 
} 

}

Plugin-Klasse (die die promptValue Variable ruft die Abfrage zu füllen:

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

Vielen Dank im Voraus,

Ryan

Antwort

0

Einen Wert von OnFrame() zurückzugeben, würde nicht helfen. OnFrame wird vom Leap-Motion-Code aufgerufen und würde nichts mit dem Wert tun, selbst wenn Sie einen bereitstellen könnten. Was Sie brauchen, ist eine Funktion, um den Eingabeaufforderungswert zu ändern - falls das überhaupt möglich ist. OnFrame könnte dann diese Funktion aufrufen.

+0

Ich dachte daran, die Observable-Klasse zu verwenden, um die Updates zu pumpen - würden Sie damit rechnen, dass es geschnitten würde? –

+0

Es scheint Overkill für den Aufruf einer einzelnen Funktion, aber wenn Sie erwarten, dass mehr Daten als nur diese eine ganze Zahl senden müssen, dann ist es vielleicht sinnvoll. Ich bin nicht wirklich ein Java-Typ, also ist es dumm für mich, Ihnen Java-ähnliche Anleitungen zu geben. –