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?
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.
Ich kann bestätigen, dass dieses Problem den Prozessor inpur nicht in eine neue Phase versetzt. Dies führt zu "Geister" -Buttons wie beschrieben.
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%