2017-02-22 1 views
0

In libgdx, screen.setScreen() ruft nicht automatisch rechts ab. Muss ich in einem überschriebenen setScreen zuerst screen.dispose anrufen und dann super.setScreen anrufen oder den ersteren anrufen? Ich weiß, dass dies wie doppelte Frage scheint, aber immer noch wollte ich wissen, weil super.setScreen Anrufe screen.hide. Ruft hide nach dispose Run-Time-Safe? Ist es eine schlechte Übung? Ich mache ein 3D-Spiel basierend auf this und this Beispiel. Hier erweitere ich GameName Klasse von Game und versuchen, setScreen zu übersteuern, so dass Sie dispose aufrufen, wenn der Bildschirm nicht null ist und dann super.setScreen aufrufen.Ist es sicher, Screen.hide() nach Screen.dispose() in LibGDX aufzurufen?

Antwort

0

screen.dispose() wird nie von LibGDX aufgerufen. Sie müssen es manuell tun, bevor Sie den Verweis auf Ihren Bildschirm löschen. Wenn Sie die Screen-Instanz nicht wiederverwenden möchten, ist screen.hide()screen.dispose() der perfekte Ort dafür.

screen.hide() wird nie als Reaktion auf Android-Ereignisse aufgerufen.

Ich empfehle nicht überschreiben game.setScreen(), um Bildschirme zu entsorgen, es sei denn, Sie wissen sicher, dass Sie keine Bildschirminstanzen wiederverwenden wollen. In den meisten einfachen Spielen möchten Sie sie wiederverwenden, anstatt Zeit für das wiederholte Entladen und erneute Laden von Ressourcen zu verschwenden.

0

Zwei Arten von verfügbaren Assets (SpriteBatch, Texture, Stage, ...), einer wird auf einem anderen Bildschirm geteilt und ein anderer ist für einen bestimmten Bildschirm spezifisch.

  1. Gemeinsame Vermögenswerte sollten von Spiel dispose() Methode entfernt werden.

  2. Screen spezifische Assets sollten durch dispose() Methode von Screen entsorgt werden, aber Bildschirm dispose() nie aufgerufen, so dass Sie es explizit aufrufen müssen.

Wenn Sie Ihren Bildschirm hide() Methode der Bildschirm aufgerufen ändern, damit Sie dispose() Methode von hide() Methode aufrufen sollte.

+0

Aber in Android wird Hide aufgerufen, wenn der Benutzer einen Anruf oder ein Spiel verliert Fokus verlieren. Das Hinzufügen von "Inside Hide" ist also eine schlechte Idee. – Anutrix

+0

@Anutrix, was die Methode hide() von Screen denken, rufen Sie hide() von Android auf. Beide sind unterschiedliche Methoden. – Aryan

+0

@Anutrix, Nein, tut es nicht. 'pause()' wird aufgerufen, wenn das Spiel den Fokus verliert, aber nicht 'hide()'. – Tenfour04

Verwandte Themen