Jaki jest właściwy sposób całkowitego usunięcia ekranu w Libgdx? Obecnie Jeśli kliknę, gdzie przycisk był na moim poprzednim ekranie, przycisk nadal wykonuje to, co zrobiłbym, gdybym był na tym ekranie. Czy powinienem być .dispose()
-ing wszystko co mogę w metodzie dispose()
? czy istnieje prostszy sposób na pozbycie się wszystkiego na ekranie?Właściwy sposób utylizacji ekranów w Libgdx
Odpowiedz
Niestety nie ma łatwiejszego sposobu. Te klasy nie udostępniają żadnego zwykłego interfejsu "Disposable
" lub czegoś podobnego, aby zrobić to automatycznie. Wszystko, co ma metodę dispose()
, należy ręcznie umieścić, gdy nie jest już potrzebne.
Dotyczy to również samych Screens
. Po przełączeniu Screens
nie zostaną automatycznie usunięte, ale musisz to zrobić samodzielnie (przed wywołaniem Game.setScreen()
).
Z drugiej strony nie jest to wielka sprawa. Wystarczy przejrzeć wszystko w swoim Screen
i sprawdzić, czy należy go usunąć, czy nie. Jeśli istnieje metoda usuwania, zadzwoń w dispose()
z Screen
.
ALE to nie wyjaśnia twojego zachowania dotyczącego niewidocznych przycisków z ostatniego Screen
. Przypuszczam, że używasz Stage
i używasz Gdx.input.setInputProcessor(stage);
. To ustawienie nie zostanie zmienione po zmianie ekranu i konieczne będzie ustawienie procesora wejściowego na Stage
bieżącego Screen
lub na to, co obsługuje dane wejściowe w bieżącym Screen
. W ten sposób "stary" etap nie będzie już wychwytywał żadnych danych wejściowych.
Mogę potwierdzić, że ten problem nie przekazuje inpur procesorowi nowego etapu. spowoduje to pojawienie się przycisków "duchów" zgodnie z opisem.
Niestety LibGDX API documentation mówi
Zauważ, że rozporządzania() nie jest wywoływana automatycznie.
Więc co robię jest zbycie wszystkich jednorazowych (takich jak Stage
, Skin
, Texture
... itp) wewnątrz metody w Ekranie hide()
ponieważ hide()
nazywa się automatycznie i działa bardzo dobrze!
przykład:
public class GameScreen implements Screen {
...
@Override
public void hide() {
mainStage.dispose();
playGroundStage.dispose();
controller.dispose();
labelActor.dispose();
}
...
}
Nie polecam wyrzucania rzeczy w metodzie hide() - metoda ta jest wywoływana na Androidzie, jeśli ktoś do ciebie dzwoni –
- 1. poprawna obsługa LibGDX AssetManager
- 2. Jak zarządzać przyciskiem Wstecz przy użyciu wielu ekranów w Libgdx?
- 3. Czy istnieje właściwy sposób na usunięcie httpwebrequest?
- 4. Jak ukryć metodę utylizacji?
- 5. Podział ekranu w LibGDX
- 6. Debugowanie w libGDX
- 7. Właściwy sposób zakończenia BeginInvoke?
- 8. Właściwy sposób inicjowania danych
- 9. Właściwy sposób wstrzymania System.Timers.Timer?
- 10. Właściwy sposób nawigacji z Emberem
- 11. Właściwy sposób zwalniania obiektów COM?
- 12. Właściwy sposób pozbycia się BitmapSource
- 13. Właściwy sposób wywoływania metody JavaScript
- 14. Właściwy sposób pozycjonowania: przed pseudoelementami
- 15. właściwy sposób sudo nad ssh
- 16. Wyświetlanie wielu ekranów iOS
- 17. Właściwy sposób organizowania myapp/routes/*
- 18. Jaki jest właściwy sposób przekierowania?
- 19. Właściwy sposób na "warunkową zmianę" w iOS5
- 20. właściwy sposób porównać obiektu w badanej jednostki
- 21. Właściwy sposób tworzenia macierzy w C++
- 22. właściwy sposób korzystać z selektorów w Swift
- 23. Właściwy sposób na zabicie procesu w Javie
- 24. Właściwy sposób traktowania globalnych flag w Haskell
- 25. Właściwy sposób na zastąpienie NSTextStorage w NSTextView?
- 26. Jaki jest właściwy sposób liczenia w Railsach?
- 27. Właściwy sposób tworzenia DAO w PHP
- 28. Właściwy sposób zapisania się HQL w (...) kwerendy
- 29. Wykrywanie Backspace w UITextField we właściwy sposób
- 30. Właściwy sposób dodawania kolumn indeksu w greenDao?
Jak w przypadku wszystkich zmiennych? Jak sobie z nimi poradzę? – Chris
@ user2341336 Które zmienne dokładnie masz na myśli? Większość rzeczy, które należy usunąć na przełączniku ekranu, zachowuję jako własność prywatną samej klasy Screen, ponieważ logicznie należy ona do ekranu. – noone