LibGDX Game vs ApplicationAdapter

12

Quando crio um novo projeto LibGDX, a classe principal do projeto Core estende o ApplicationAdapter . Aqui está como ele se parece.

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

    }
}

Portanto, tenho que mudar o ApplicationAdapter para Game se quiser chamar o método setScreen para alternar entre as telas. Então, qual é o uso do ApplicationAdapter ? Quando devo usá-lo?

Vahe Muradyan
fonte

Respostas:

7

Como @ user3068350 disse, Game e ApplicationAdapter implementam ApplicationListener. É útil estender o Game se você planeja usar a interface Screen no seu jogo, no entanto, alguns desenvolvedores podem querer adotar uma abordagem diferente e lidar com o gerenciamento de tela do seu próprio jeito. Se for esse o caso, eles estenderão o ApplicationAdapter.

Pessoalmente, gosto de minhas classes para implementar uma interface Atualizável e / ou Drawable personalizada, à medida que separo meu método de renderização em atualização e desenho. Nesse caso, o uso de Screen anularia o objetivo, pois a interface contém um método de renderização.

driima
fonte
1

A classe Game implementa a interface ApplicationListener e é apenas uma classe projetada para facilitar a alternância entre telas diferentes. Quando um método no ApplicationListener é chamado, a classe Game cuida de delegá-lo à tela definida no momento.

user3068350
fonte
1
mas quando devo usar o ApplicationAdapter? E como devo usar as telas aqui.
Vahe Muradyan
2
Você não precisa usar o ApplicationAdapter. ApplicationAdapter e Game implementam a interface ApplicationListener. Uma classe de adaptador é apenas uma classe que fornece implementações de esqueleto para uma interface, para que você não precise sobrecarregar seu código com corpos de métodos vazios. Para usar telas com o Game, você chama setScreen e passa em uma classe que implementa a interface Screen. Você pode fazer com que suas classes de tela tomem um objeto Game no construtor para poder mudar as telas dentro de uma tela.
user3068350
1
então por que eles criaram o ApplicationAdapter se ele não tem nenhum uso?
Vahe Muradyan
2
@VaheMuradyan, o usuário já respondeu isso: você não precisa desorganizar seu código com corpos de métodos vazios. Ao implementar ApplicationListenerdiretamente, você deve fornecer todos os métodos necessários, incluindo aqueles que você não precisa (como pause()ou resume(), que nem sempre são usados). ApplicationAdapterestá disponível para sua conveniência, para que você não precise manter métodos vazios por perto. É uma classe de utilitário simples, que não adiciona novas funcionalidades - apenas mantém seu código mais limpo (ou mais curto ).
precisa saber é o seguinte
1

Como o ApplicationAdapter e a classe Game implementam a interface ApplicationListener, eles podem ser usados ​​quase de forma intercambiável ao criar seu jogo. Se você estiver usando o Screen, nada o impedirá de implementá-los com as duas opções.

A classe Game possui um pouco mais de sobrecarga usando as Telas. No entanto, essa sobrecarga foi projetada para facilitar a implementação de diferentes estágios / níveis no seu jogo. É importante observar que essa sobrecarga é mínima.

O ApplicationAdapter não possui sobrecarga adicional (é uma implementação direta de um ApplicationListener). Isso lhe dá mais controle, pois você precisa fazer tudo sozinho. Pessoalmente, prefiro usar ApplicationAdapters.

TL; DR: Não há diferença real entre eles. O ApplicationAdapter oferece um pouco mais de controle e o jogo é um pouco menos trabalhoso.

Blunderchips
fonte