2017-10-24 2 views
0

Ich habe eine Play-Taste wie folgt;Verwenden von Aktionen auf einem Button-LibGdx

private void drawPlayButton() { 
     playButton = new ImageButton(new TextureRegionDrawable(playTexture), new TextureRegionDrawable(pressTexture)); 
     stage.addActor(playButton); 

     playButton.setPosition(UIConstants.PLAY_X, UIConstants.PLAY_Y, Align.center); 

     playButton.addListener(new ActorGestureListener() { 
      @Override 
      public void tap(InputEvent event, float x, float y, int count, int button) { 
       super.tap(event, x, y, count, button); 

       game.setScreen(new GameScreen(game)); 

      } 
     }); 
    } 

Ich möchte Scale-in- und out-Effekt zu dieser Schaltfläche mit Aktionen hinzufügen.

Ich bin nicht so vertraut mit Aktionen, ich habe so etwas versucht;

float duationsec= 0.5f; 
playButton.addAction(Actions.sequence(Actions.scaleBy(0.2f,0.2f,duationsec),  
Actions.scaleTo(1f, 1f, duationsec))); 
img.setOrigin(Align.center); 
stage.addActor(playButton); 

Aber dies gibt keine Auswirkungen auf die Schaltfläche auch denselben Code arbeitet für eine Image.Is weil Schaltfläche ziehbar Textur verwendet?

Wie kann ich diesen Effekt mit Aktionen auf eine Schaltfläche anwenden?

Auch mein Code funktioniert nur einmal.Ich rufe es in show(). Wenn ich es in render() aufrufen, funktioniert es in einer abnormalen Art und Weise.Ich möchte, dass dieser Effekt für immer angezeigt wird.

Ist es möglich, dies zu erreichen? Jede Hilfe wäre willkommen.

+0

Dieser Link enthält die ähnliche Frage und Antwort. https://stackoverflow.com/questions/42404452/add-actions-scaleto-toa-a-label-in-libgdx] – Niranjana

Antwort

1

Aus Performance-Gründen die meisten scene2d.ui Gruppen haben transform Satz standardmäßig auf false und ImageButton ist Teil dieser ui Gruppe, so dass Sie durch die Verwendung setTransform(..) Transformationsverfahren zu ermöglichen haben.

Weitere Einzelheiten können Sie
https://github.com/libgdx/libgdx/wiki/Scene2d.ui#rotation-and-scale

float duationsec= 0.5f; 

playButton.setOrigin(Align.center); 
playButton.setTransform(true);    // <-- Enable Transform 
stage.addActor(playButton); 
playButton.addAction(Actions.sequence(Actions.scaleBy(0.2f,0.2f,duationsec),Actions.scaleTo(1f, 1f, duationsec))); 

EDIT überprüfen

Wenn Sie/unten auf Benutzer klicken Sie auf das Scale-up wollen, auf diese Weise tun:

playButton.addListener(new ClickListener(){ 
     @Override 
     public void clicked(InputEvent event, float x, float y) { 

      playButton.addAction(Actions.sequence(Actions.scaleBy(0.2f,0.2f,duationsec),Actions.scaleTo(1f, 1f, duationsec), Actions.run(new Runnable() { 
       @Override 
       public void run() { 
        game.setScreen(new GameScreen(game)); 
       } 
      }))); 

      super.clicked(event, x, y); 
     } 
    }); 
+0

Nach dem Aktivieren der Transformation auch keinen Effekt. – Niranjana

+0

wo möchten Sie eine Aktion auf 'playButton' anwenden? – Aryan

+0

Ich wollte diesen Effekt für immer auf der Schaltfläche angezeigt werden. Ich habe diese Frage verwiesen und es funktioniert. [https://stackoverflow.com/questions/42404452/add-actions-scaleto-to-a-label-in-libgdx]. Nach der Verwendung des Containers funktionierte es. – Niranjana

Verwandte Themen