Gioco LibGDX vs ApplicationAdapter


12

Quando creo un nuovo progetto LibGDX la classe principale del progetto Core estende ApplicationAdapter . Ecco come appare.

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);

    }
}

Quindi devo cambiare ApplicationAdapter in Gioco se voglio chiamare il metodo setScreen per passare da una schermata all'altra. Allora, a che serve ApplicationAdapter ? Quando dovrei usarlo?

Risposte:


7

Come diceva @ user3068350, sia Game che ApplicationAdapter implementano ApplicationListener. È utile estendere il gioco se prevedi di utilizzare l'interfaccia dello schermo nel tuo gioco, tuttavia alcuni sviluppatori potrebbero voler adottare un approccio diverso e gestire la gestione dello schermo a modo loro. In tal caso, questi estenderanno ApplicationAdapter.

Personalmente, mi piacciono le mie classi per implementare un'interfaccia aggiornabile e / o disegnabile personalizzata, mentre separo il mio metodo di rendering in aggiornamento e disegno. In questo caso, l'utilizzo di Screen annullerebbe lo scopo poiché l'interfaccia contiene un metodo di rendering.


1

La classe Game implementa l'interfaccia ApplicationListener ed è solo una classe progettata per facilitare il passaggio da una schermata all'altra. Quando viene chiamato un metodo in ApplicationListener, la classe Game si occupa di delegarlo alla schermata attualmente impostata.


1
ma quando dovrei usare ApplicationAdapter? E come dovrei usare le schermate qui.
Vahe Muradyan,

2
Non è necessario utilizzare ApplicationAdapter. Sia ApplicationAdapter che Game implementano l'interfaccia ApplicationListener. Una classe adattatore è solo una classe che fornisce implementazioni scheletriche per un'interfaccia in modo da non dover ingombrare il codice con corpi di metodo vuoti. Per usare le schermate con Game, devi chiamare setScreen e passare a una classe che implementa l'interfaccia Screen. Puoi fare in modo che le tue classi di schermate prendano un oggetto Gioco nel costruttore in modo da poter cambiare schermate all'interno di una schermata.
user3068350

1
quindi perché hanno creato ApplicationAdapter se non serve a niente?
Vahe Muradyan,

2
@VaheMuradyan, l'utente ha già risposto che: non è necessario ingombrare il codice con corpi di metodo vuoti. Quando si implementa ApplicationListenerdirettamente, è necessario fornire tutti i metodi richiesti, compresi quelli che non sono necessari (come pause()o resume(), che non sono sempre utilizzati). ApplicationAdapterè là fuori per la tua comodità, quindi non devi tenere metodi vuoti in giro. È una semplice classe di utilità, non aggiunge nuove funzionalità: mantiene il codice più pulito (o più breve ).
JustACluelessNewbie,

1

Poiché ApplicationAdapter e la classe Game implementano l'interfaccia ApplicationListener, entrambi possono essere usati quasi in modo intercambiabile durante la creazione del gioco. Se sei impostato su Screen, non c'è nulla che ti impedisca di implementarli con entrambe le opzioni.

La classe di gioco ha un po 'più di sovraccarico usando gli schermi. Tuttavia, questo sovraccarico è progettato per rendere più semplice l'implementazione di diversi livelli / livelli nel gioco. È importante notare che questo sovraccarico è minimo.

L'ApplicationAdapter ha alcun overhead aggiuntivo (è un'implementazione retta di un ApplicationListener). Questo ti dà un maggiore controllo in quanto devi fare tutto da solo. Personalmente, preferisco usare ApplicationAdapters.

TL; DR: nessuna vera differenza tra di loro. ApplicationAdapter ti dà un po 'più di controllo e il gioco è un po' meno lavoro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.