Was ist die richtige Art, 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()
-alles, was ich kann in der dispose()
Methode sein? Oder gibt es eine einfachere Möglichkeit, alles auf dem Bildschirm zu entsorgen?Korrekte Weise, Bildschirme in Libgdx zu entsorgen
Antwort
Leider gibt es keinen einfacheren Weg. Diese Klassen teilen keine gemeinsame "" -Schnittstelle oder irgendetwas ähnliches, um dies automatisch zu tun. Alles, was eine dispose()
Methode hat, muss manuell entsorgt werden, wenn es nicht mehr benötigt wird.
Dies gilt auch für die Screens
selbst. Beim Umschalten von Screens
werden sie nicht automatisch entsorgt, aber Sie müssen das selbst tun (vor dem Aufruf Game.setScreen()
).
Auf der anderen Seite ist dies 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 Entsorgungsmethode gibt, rufen Sie sie in dispose()
der Screen
.
ABER das erklärt nicht Ihr Verhalten über unsichtbare Tasten von der letzten Screen
. Ich nehme an, Sie verwenden eine Stage
und verwendet Gdx.input.setInputProcessor(stage);
. Diese Einstellung wird nicht geändert, wenn Sie den Bildschirm wechseln, und Sie müssen den Eingangsprozessor auf Stage
Ihres aktuellen Screen
setzen, oder auf den Eingang des aktuellen Screen
. Auf diese Weise fängt die "alte" Stufe keine Eingaben mehr ab.
Ich kann bestätigen, dass dieses Problem den Inpur-Prozessor eine neue Stufe nicht übergeben wird. Dies führt zu "Geister" -Buttons wie beschrieben.
Leider LibGDX API documentation sagt
Beachten Sie, dass() verfügen nicht automatisch aufgerufen wird. So
, was ich tun ist, entsorgen Sie alle Disposables (wie Stage
, Skin
, Texture
... etc) im Innern der hide()
Methode im Screen weil hide()
automatisch aufgerufen wird, und es funktioniert sehr gut!
Beispiel:
public class GameScreen implements Screen {
...
@Override
public void hide() {
mainStage.dispose();
playGroundStage.dispose();
controller.dispose();
labelActor.dispose();
}
...
}
Ich würde nicht empfehlen, Dinge innerhalb der hide() - Methode zu entsorgen, da dies auf Android angerufen wird, wenn jemand Sie anruft –
- 1. Bildschirme in LibGdx entsorgen
- 2. Libgdx mehrere Bildschirme
- 3. Richtige Weise, eine BitmapSource zu entsorgen
- 4. Korrekte Weise, ReactCSSTransitionGroup zu verwenden?
- 5. Korrekte Weise, ORACLE_HOME zu setzen?
- 6. LLVM API: korrekte Art zu erstellen/zu entsorgen
- 7. korrekte Weise, Funktionszeiger zuzuweisen
- 8. Korrekte Weise, AFHTTPSessionManager als Singleton zu verwenden?
- 9. Korrekte Weise, diese Bedingung zu schreiben
- 10. libGDX: Ist es besser, Bildschirme erneut zu verwenden oder jedes Mal neue Instanzen zu erstellen?
- 11. Korrekte Weise, die Bindung in Ember.js
- 12. korrekte Art und Weise zu berechnen Daten in C#
- 13. korrekte Art und Weise Singleton in Cocos2Dx zu implementieren
- 14. Korrekte Weise, Facebook-Token von Client zu Server zu senden
- 15. Libgdx - preformance zwickt
- 16. korrekte Art und Weise Absolutwert von INT_MIN zu nehmen
- 17. korrekte Art und Weise Task.Run zu bedienen und warten
- 18. Rekursive make: korrekte Art und Weise $ `(MAKEFLAGS)`
- 19. JSON-Objekt auf die korrekte Weise erstellen
- 20. korrekte Art und Weise jQuery mit require.js zu implementieren
- 21. Korrekte Weise, ionic modal mit textarea und Tastatur zu zeigen
- 22. korrekte Art und Weise zu unterzeichnen und überprüfen Signatur bouncycastle
- 23. Korrekte Weise, eine Jasper Reports-Tabelle mit Parametern zu verwenden?
- 24. korrekte Art und Weise Python-Programm
- 25. korrekte Weise Spalten zu Datenrahmen ohne Schleife hinzufügen
- 26. korrekte Art und Weise K8S-User-Startup-Skript zu definieren
- 27. korrekte Art und Weise Sql Selbst Vereinigung
- 28. korrekte Art und Weise aktuelle Anwendungskonfiguration
- 29. Assets in Libgdx
- 30. Wie Ressourcen in Drittanbieter-DLL zu entsorgen?
Wie für alle Variablen? Wie würde ich mit ihnen umgehen? – Chris
@ user2341336 Welche Variablen genau meinen Sie? Ich halte die meisten Dinge, die auf einem Screen-Schalter als private Eigenschaft der Screen-Klasse selbst entsorgt werden müssen, weil sie logisch zum Bildschirm gehört. – noone