2016-01-27 1 views
0

Une boîte de dialogue modale scene2d est généralement dotée de deux boutons, un pour la confirmation de l'action utilisateur et un pour l'annulation. Cliquer simplement sur ce bouton d'annulation pour fermer la fenêtre de dialogue (qui est un comportement par défaut et, fondamentalement, tout ce qui est nécessaire, puisque nous ne voulons rien), puis répéter l'action supposée pour le montrer à nouveau (par exemple en cliquant sur un bouton "Supprimer" pour afficher la boîte de dialogue de confirmation de suppression), rien ne se passe (car la boîte de dialogue est maintenant masquée).Boîte de dialogue scene2d réutilisable

Quelle est la bonne manière d'activer la boîte de dialogue?

Est-ce que show() doit être appelé dans l'écouteur du bouton No?

noButton.addListener(new ClickListener() { 
       @Override 
       public void clicked(InputEvent event, float x, float y) { 
        deleteDialog.show(stage); 
       }; 

Le official scene2d code example crée une nouvelle boîte de dialogue à chaque fois, mais je crois comprendre qu'il est préférable de réutiliser ces éléments.

Répondre

1

Vous avez votre boîte de dialogue dans une variable que je suppose:

Group dialog = new Group(); 

Vous ajoutez comme ceci:

stage.addActor(dialog); 

écouteur à supprimer - supprimer la méthode ne supprime rien, il enlève juste la acteur de la scène:

noButton.addListener(new ClickListener() { 
    @Override 
    public void clicked(InputEvent event, float x, float y) { 
     dialog.remove(); 
    }; 

Et puis quand vous voulez afficher à nouveau:

stage.addActor(dialog); 
+0

Merci. Je sais que cela doit être dans une variable, je sais comment le faire, etc. (en fait, vous devez appeler addActor/show dans l'écouteur si vous voulez qu'il soit immédiatement disponible et supprimer/cacher n'est pas nécessaire car il est fait automatiquement pour ce widget quand un bouton est cliqué). Je me demandais juste si c'est la bonne façon. Cela me semble un peu bizarre, mais peut-être que c'est juste moi :-) Je pense que je vais essayer de poser des questions sur le forum libGDX. –