LibGDX Game vs ApplicationAdapter

12

Wenn ich ein neues LibGDX-Projekt erstelle, erweitert die Hauptklasse des Core-Projekts ApplicationAdapter . So sieht es aus.

package com.marimba.apptest;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;

public class AppMain extends ApplicationAdapter {   
    @Override
    public void create () {

    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    }
}

Ich muss also den ApplicationAdapter in Game ändern , wenn ich die setScreen-Methode aufrufen möchte, um zwischen den Bildschirmen zu wechseln. Wozu dient ApplicationAdapter ? Wann soll ich es benutzen?

Vahe Muradyan
quelle

Antworten:

7

Wie @ user3068350 sagte, implementieren sowohl Game als auch ApplicationAdapter ApplicationListener. Es ist nützlich, das Spiel zu erweitern, wenn Sie beabsichtigen, die Bildschirmoberfläche in Ihrem Spiel zu verwenden. Einige Entwickler möchten jedoch möglicherweise einen anderen Ansatz verfolgen und die Bildschirmverwaltung auf ihre eigene Weise handhaben. In diesem Fall wird ApplicationAdapter erweitert.

Persönlich möchte ich, dass meine Klassen eine benutzerdefinierte aktualisierbare und / oder zeichnbare Schnittstelle implementieren, wenn ich meine Rendermethode in Aktualisieren und Zeichnen aufteile. In diesem Fall würde die Verwendung von Screen den Zweck zunichte machen, da die Schnittstelle eine Rendermethode enthält.

driima
quelle
1

Die Game-Klasse implementiert die ApplicationListener-Schnittstelle und ist nur eine Klasse, mit der das Wechseln zwischen verschiedenen Bildschirmen vereinfacht wird. Wenn eine Methode im ApplicationListener aufgerufen wird, übernimmt die Game-Klasse die Delegierung an den aktuell eingestellten Bildschirm.

user3068350
quelle
1
aber wann sollte ich ApplicationAdapter verwenden? Und wie soll ich hier Bildschirme verwenden.
Vahe Muradyan
2
Sie müssen ApplicationAdapter nicht verwenden. Sowohl ApplicationAdapter als auch Game implementieren die ApplicationListener-Schnittstelle. Eine Adapterklasse ist nur eine Klasse, die eine Grundstruktur für eine Schnittstelle bereitstellt, sodass Sie Ihren Code nicht mit leeren Methodenkörpern überladen müssen. Um Bildschirme mit Game zu verwenden, rufen Sie setScreen auf und übergeben eine Klasse, die die Screen-Schnittstelle implementiert. Sie können festlegen, dass Ihre Bildschirmklassen ein Game-Objekt im Konstruktor übernehmen, damit Sie die Bildschirme innerhalb eines Bildschirms ändern können.
user3068350
1
Warum haben sie ApplicationAdapter erstellt, wenn es keine Verwendung hat?
Vahe Muradyan
2
@VaheMuradyan, Benutzer hat bereits geantwortet: Sie müssen Ihren Code nicht mit leeren Methodenkörpern überladen. Wenn Sie ApplicationListenerdirekt implementieren , müssen Sie alle erforderlichen Methoden bereitstellen, auch solche, die Sie nicht benötigen (wie pause()oder resume(), die nicht immer verwendet werden). ApplicationAdapterist für Ihre Bequemlichkeit da draußen, so müssen Sie leere Methoden nicht herum aufbewahren. Es handelt sich um eine einfache Utility-Klasse, die keine neuen Funktionen hinzufügt. Sie sorgt lediglich dafür, dass der Code sauberer (oder kürzer ) bleibt .
JustACluelessNewbie
1

Da der ApplicationAdapter und die Game-Klasse die ApplicationListener-Schnittstelle implementieren, können beide beim Erstellen Ihres Spiels nahezu austauschbar verwendet werden. Wenn Sie mit Screen arbeiten, hindert Sie nichts daran, sie mit beiden Optionen zu implementieren.

Die Game- Klasse hat etwas mehr Aufwand mit der Verwendung von Bildschirmen. Dieser Overhead soll es jedoch einfacher machen, verschiedene Phasen / Ebenen in Ihrem Spiel zu implementieren. Es ist wichtig zu beachten, dass dieser Aufwand minimal ist.

Der ApplicationAdapter hat keinen zusätzlichen Overhead (es ist eine direkte Implementierung eines ApplicationListener). Dies gibt Ihnen mehr Kontrolle, da Sie alles selbst erledigen müssen. Persönlich bevorzuge ich ApplicationAdapter.

TL; DR: Kein wirklicher Unterschied zwischen ihnen. ApplicationAdapter gibt Ihnen ein bisschen mehr Kontrolle und das Spiel ist ein bisschen weniger Arbeit.

Fehlerchips
quelle