Korrekte Möglichkeit, Bildschirme in Libgdx zu entfernen

7

Was ist der richtige Weg, um einen Bildschirm in Libgdx vollständig zu entsorgen? Momentan Wenn ich auf einen Knopf auf dem vorherigen Bildschirm klicke, macht der Knopf immer noch das, was er getan hätte, wenn ich auf diesem Bildschirm wäre. Sollte ich .dispose() -ing alles was ich kann in der dispose() Methode? Oder gibt es eine einfachere Möglichkeit, alles auf dem Bildschirm zu entsorgen?

    
Chris 15.10.2013, 22:34
quelle

3 Antworten

17

Leider gibt es keinen einfacheren Weg. Diese Klassen teilen keine gemeinsame " Disposable " -Schnittstelle oder ähnliches, um dies automatisch zu tun. Alles, was eine Methode dispose() hat, muss manuell entsorgt werden, wenn es nicht mehr benötigt wird.

Dies gilt auch für die Screens selbst. Wenn Sie Screens wechseln, werden sie nicht automatisch entsorgt, aber Sie müssen das selbst tun (bevor Sie Game.setScreen() aufrufen).

Auf der anderen Seite ist das keine große Sache. Sehen Sie sich einfach alles in Ihrem Screen an und prüfen Sie, ob es entsorgt werden muss oder nicht. Wenn es eine dispose-Methode gibt, rufen Sie sie in dispose() von Screen auf.

ABER das erklärt nicht Ihr Verhalten in Bezug auf unsichtbare Schaltflächen vom letzten Screen . Ich nehme an, dass Sie Stage verwenden und Gdx.input.setInputProcessor(stage); verwenden. Diese Einstellung wird nicht geändert, wenn Sie den Bildschirm wechseln, und Sie müssen den Eingangsprozessor auf Stage Ihrer aktuellen Screen oder auf die Eingabe in Ihrer aktuellen Screen setzen. Auf diese Weise fängt die "alte" Stufe keine Eingaben mehr ab.

    
noone 16.10.2013, 04:30
quelle
2

Ich kann bestätigen, dass dieses Problem den Prozessor inpur nicht in eine neue Phase versetzt. Dies führt zu "Geister" -Buttons wie beschrieben.

    
TypingTurtle 14.01.2014 05:28
quelle
0

Leider LibGDX API Dokumentation sagt

  

Beachten Sie, dass dispose () nicht automatisch aufgerufen wird.

Also was ich mache, ist, alle Einwegartikel (wie Stage , Skin , Texture ... usw.) innerhalb der hide() -Methode im Screen zu entsorgen, weil hide() automatisch aufgerufen wird und sehr gut funktioniert gut!

Beispiel:

%Vor%     
Khalid Bhyan 29.02.2016 11:37
quelle

Tags und Links