2016-05-26 12 views
0

Ich bin neu in LibGDX. Ein Problem, auf das ich stoße, ist, dass Tasten beim Drücken aufeinander reagieren. Wenn ich zum Beispiel in meinem Code eine dieser Tasten drücke, möchte ich, dass die anderen beiden automatisch ausgezogen werden (nur eine der drei Tasten kann gleichzeitig gedrückt werden). Das Problem, auf das ich stoße, ist, dass es ziemlich viel Verzögerung für die Schalter gibt, um Zustände zu wechseln.LibGDX Quick Button Click Aktion

public MenuStateTest(GameStateManager gsm) { 
    super(gsm); 
    cam.setToOrtho(false, MyGame.WIDTH, MyGame.HEIGHT); 

    fitViewport = new FitViewport(MyGame.WIDTH, MyGame.HEIGHT); 

    stage = new Stage(fitViewport); 
    Gdx.input.setInputProcessor(stage); 
    font = new BitmapFont(); 
    skin = new Skin(); 

    buttonAtlas = new TextureAtlas("buttonTest.pack"); 
    skin.addRegions(buttonAtlas); 
    textButtonStyle = new TextButton.TextButtonStyle(); 
    textButtonStyle.font = font; 
    textButtonStyle.up = skin.getDrawable("1BBlock"); 
    textButtonStyle.down = skin.getDrawable("T1BBlock"); 
    button = new TextButton("", textButtonStyle); 
    stage.addActor(button); 
    button.setPosition(20, 200); 
    button.getStyle().checked = button.getStyle().down; 
    button.setChecked(false); 


     button2Atlas = new TextureAtlas("Button2Test.pack"); 
     skin.addRegions(button2Atlas); 
     textButtonStyle = new TextButton.TextButtonStyle(); 
     textButtonStyle.font = font; 
     textButtonStyle.up = skin.getDrawable("2BBlock"); 
     textButtonStyle.down = skin.getDrawable("T2BBlock"); 
     button2 = new TextButton("", textButtonStyle); 
     stage.addActor(button2); 
     button2.setPosition(175, 200); 
     button2.getStyle().checked = button2.getStyle().down; 
     button2.setChecked(true); 

     button3Atlas = new TextureAtlas("Button3Test.pack"); 
     skin.addRegions(button3Atlas); 
     textButtonStyle = new TextButton.TextButtonStyle(); 
     textButtonStyle.font = font; 
     textButtonStyle.up = skin.getDrawable("3BBlock"); 
     textButtonStyle.down = skin.getDrawable("T3BBlock"); 
     button3 = new TextButton("", textButtonStyle); 
     stage.addActor(button3); 
     button3.setPosition(330, 200); 
     button3.getStyle().checked = button3.getStyle().down; 
     button3.setChecked(true); 

} 

@Override 
protected void handleInput() { 
    if(button.isChecked()&& button.isPressed()){ 
     button.setChecked(false); 
     button2.setChecked(true); 
     button3.setChecked(true); 
    } 

    if(button2.isChecked()&& button2.isPressed()){ 
     button.setChecked(true); 
     button2.setChecked(false); 
     button3.setChecked(true); 
    } 

    if(button3.isChecked()&& button3.isPressed()){ 
     button.setChecked(true); 
     button2.setChecked(true); 
     button3.setChecked(false); 
    } 


} 

@Override 
protected void update(float dt) { 
    stage.getViewport().update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    handleInput(); 
} 

Jede Hilfe wäre willkommen.

Danke.

+0

nur dafür sorgen, ... tun Sie verstehen, dass „gedrückt‘ den Finger noch auf den Knopf gedrückt wird? Ein getestetes Zustand schaltet die Taste, wenn es ‚‘ geklickt, was bedeutet, es wurde gedrückt und dann losgelassen mit Derselbe Finger ist immer noch über dem Knopf. Und ist Ihr Ziel, drei Toggle-Buttons zu haben? Es gibt bereits eine ButtonGroup-Klasse für den Umgang mit Radio-Button-Funktionalität. – Tenfour04

+0

Also alles, was ich tun müsste, ist die Schaltflächen oben zu einer ButtonGroup hinzufügen ? – user2965071

Antwort

0
public MenuStateTest(GameStateManager gsm) { 
    super(gsm); 
    cam.setToOrtho(false, MyGame.WIDTH, MyGame.HEIGHT); 

    fitViewport = new FitViewport(MyGame.WIDTH, MyGame.HEIGHT); 

    stage = new Stage(fitViewport); 
    Gdx.input.setInputProcessor(stage); 
    font = new BitmapFont(); 
    skin = new Skin(); 

    buttonAtlas = new TextureAtlas("buttonTest.pack"); 
    skin.addRegions(buttonAtlas); 
    textButtonStyle = new TextButton.TextButtonStyle(); 
    textButtonStyle.font = font; 
    textButtonStyle.up = skin.getDrawable("1BBlock"); 
    textButtonStyle.checked = skin.getDrawable("T1BBlock"); 
    button = new TextButton("", textButtonStyle); 
    stage.addActor(button); 
    button.setPosition(20, 200); 

    button2Atlas = new TextureAtlas("Button2Test.pack"); 
    skin.addRegions(button2Atlas); 
    textButtonStyle = new TextButton.TextButtonStyle(); 
    textButtonStyle.font = font; 
    textButtonStyle.up = skin.getDrawable("2BBlock"); 
    textButtonStyle.checked = skin.getDrawable("T2BBlock"); 
    button2 = new TextButton("", textButtonStyle); 
    stage.addActor(button2); 
    button2.setPosition(175, 200); 

    button3Atlas = new TextureAtlas("Button3Test.pack"); 
    skin.addRegions(button3Atlas); 
    textButtonStyle = new TextButton.TextButtonStyle(); 
    textButtonStyle.font = font; 
    textButtonStyle.up = skin.getDrawable("3BBlock"); 
    textButtonStyle.checked = skin.getDrawable("T3BBlock"); 
    button3 = new TextButton("", textButtonStyle); 
    stage.addActor(button3); 
    button3.setPosition(330, 200); 

    ButtonGroup buttons = new ButtonGroup(button1, button2, button3); 
    buttons.setMaxCheckCount(1); 
} 

@Override 
protected void handleInput() { 

} 

@Override 
protected void update(float dt) { 
    stage.getViewport().update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
} 
+0

Dies ist ein Start in die richtige Richtung für mich, aber ich bin mir immer noch nicht bewusst, wie diese Klasse funktioniert, da ich lerne, während ich mitfahre.Ein Problem, auf das ich gestoßen bin, ist, dass sogar mit SeMaxCheckCount festgelegt Eins, ich kann immer noch alle drei Knöpfe überprüfen lassen, wenn meine Finger gleichzeitig auf ihnen sind Ich sehe sowieso nicht, wie ich sicherstellen kann, dass nur eine Taste gedrückt bleibt, egal ob meine anderen Finger auf den anderen Tasten sind. Idealerweise möchte ich das: Ein Finger ist auf Knopf1 und bleibt dort, während mein anderer Finger Knopf 2/3 berührt, dann möchte ich, dass Knopf1 zurückgeht und Knopf2/3 runter geht. – user2965071

+0

Ihre Down- und Checked-Zustände sahen gleich aus. Ich habe die Antwort bearbeitet, jetzt den Code. Wenn es funktioniert, vergleichen Sie es mit Ihrem eigenen - das ist der beste Weg zu lernen :-) – WonderfulWorld

+0

Es ist fast da, was ich will: P Eine Sache, die ich herausfinden möchte, ist, wie man es so macht, dass nur einer der Die Tasten können sich jeweils in einem heruntergefahrenen Zustand befinden. Das Problem für Ihre aktuelle Methode besteht darin, dass die Schaltfläche den Status ändert, wenn ich den Finger loslasse. Gibt es neue Klassen, die ich benutzen muss? Oder könnte ich mich mit den aktuellen Methoden in den TextButton- und ButtonGroup-Klassen herumschlagen? – user2965071