Wie erstelle ich mit Scene2D ein Popup-Fenster?

13

Ich habe einen Hauptmenübildschirm mit einem Logo und einer Reihe von Schaltflächen. Wenn der Login-Button gedrückt wird, erscheint ein Dialog, in dem ich nach einem Benutzernamen und einem Passwort frage.

Dies funktioniert gut, abgesehen vom "Aufspringen". Im Moment verschiebt das neue Dialogfeld nur alles, aber ich möchte es positionieren über der aktuellen Szene .

Ich lerne gerade Scene2D.

Gibbo
quelle

Antworten:

10

Das Dialogfeld eignet sich besser für modale Popup-Fenster und enthält eine Tabelle mit "Schaltflächen" und "Inhalten", die sich bereits im Fenster befinden (wie in den Dokumenten angegeben ). Sie können diese Tabellen mit getButtonTable () oder getContentTable () abrufen.

Der Dialog erleichtert das Arbeiten mit Popup-Fenstern. Hier ist zum Beispiel ein Bestätigungsdialog:

Dialog dialog = new Dialog("Warning", skin, "dialog") {
    public void result(Object obj) {
        System.out.println("result "+obj);
    }
};
dialog.text("Are you sure you want to quit?");
dialog.button("Yes", true); //sends "true" as the result
dialog.button("No", false);  //sends "false" as the result
dialog.key(Keys.Enter, true); //sends "true" when the ENTER key is pressed
dialog.show();

Sie können andere Objekte für beispielsweise Ja / Nein / Abbrechen-Optionen verwenden.

user212
quelle
Ist es möglich, die Größe des Dialogfelds automatisch anhand des Inhalts festzulegen? Sieht so aus, als wäre es im obigen Beispiel zu klein.
Lake
Ich denke, es ist möglich, pack () -Methode aufzurufen :)
Lake
0

Gut, da niemand geantwortet hat, werde ich meine Lösung posten.

Wenn Sie der Bühne Schauspieler hinzufügen, anstatt Folgendes zu tun:

stage.add(actor);

Um eine Zelle mit dem angegebenen Schauspieler hinzuzufügen, habe ich Folgendes ausgeführt:

stage.addActor(actor);

Es stand mir dann frei, Schauspieler zu überlappen und sie per Tweening zu bewegen / zu skalieren / zu drehen. Das einzige, was ich derzeit wahrscheinlich sehe, ist die absolute Positionierung von Widgets.

Um sie zu positionieren, müssen Sie anrufen:

actor.setPosition(x, y);

Daher kann es etwas schwierig sein, mit Android-Geräten mit unterschiedlichen Seitenverhältnissen und Auflösungen umzugehen.

Gibbo
quelle
Die absolute Position ist kein Problem, solange Sie eine statische Weltgröße festlegen und ein Ansichtsfenster für Ihre Bühne verwenden. Es behandelt Skalierung, Dehnung und andere undurchsichtige Aspekte des Umgangs mit Seitenverhältnissen und Auflösungen.
Nhydock