LibGDX Game vs ApplicationAdapter


12

Lorsque je crée un nouveau projet LibGDX, la classe principale du projet Core étend ApplicationAdapter . Voici à quoi ça ressemble.

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

    }
}

Je dois donc changer l' ApplicationAdapter en Game si je veux appeler la méthode setScreen afin de basculer entre les écrans. Alors à quoi sert ApplicationAdapter ? Quand dois-je l'utiliser?

Réponses:


7

Comme l'a dit @ user3068350, Game et ApplicationAdapter implémentent ApplicationListener. Il est utile d'étendre Game si vous prévoyez d'utiliser l'interface Screen dans votre jeu, mais certains développeurs peuvent souhaiter adopter une approche différente et gérer la gestion d'écran à leur manière. Si tel est le cas, ceux-ci étendront ApplicationAdapter.

Personnellement, j'aime que mes classes implémentent une interface Updatable et / ou Drawable personnalisée, car je sépare ma méthode de rendu en update et draw. Dans ce cas, l'utilisation de Screen irait à l'encontre du but car l'interface contient une méthode de rendu.


1

La classe Game implémente l'interface ApplicationListener et n'est qu'une classe conçue pour faciliter le basculement entre différents écrans. Lorsqu'une méthode dans ApplicationListener est appelée, la classe Game se charge de la déléguer à l'écran actuellement défini.


1
mais quand dois-je utiliser ApplicationAdapter? Et comment dois-je utiliser les écrans ici.
Vahe Muradyan

2
Vous n'avez pas besoin d'utiliser ApplicationAdapter. ApplicationAdapter et Game implémentent l'interface ApplicationListener. Une classe d'adaptateur est juste une classe qui fournit des implémentations squelettes pour une interface afin que vous n'ayez pas à encombrer votre code avec des corps de méthode vides. Pour utiliser des écrans avec Game, vous appelez setScreen et passez dans une classe qui implémente l'interface Screen. Vous pouvez faire en sorte que vos classes d'écran prennent un objet Game dans le constructeur afin que vous puissiez changer d'écran dans un écran.
user3068350

1
alors pourquoi ont-ils créé ApplicationAdapter si cela n'a aucune utilité?
Vahe Muradyan

2
@VaheMuradyan, l'utilisateur a déjà répondu: vous n'avez pas à encombrer votre code avec des corps de méthode vides. Lorsque vous implémentez ApplicationListenerdirectement, vous devez fournir toutes les méthodes requises, y compris celles dont vous n'avez pas besoin (comme pause()ou resume(), qui ne sont pas toujours utilisées). ApplicationAdapterest là pour votre commodité, vous n'avez donc pas à garder des méthodes vides. C'est une classe utilitaire simple, elle n'ajoute aucune nouvelle fonctionnalité - elle maintient simplement votre code plus propre (ou plus court ).
JustACluelessNewbie

1

Comme ApplicationAdapter et la classe Game implémentent l'interface ApplicationListener, elles peuvent toutes deux être utilisées de manière presque interchangeable lors de la création de votre jeu. Si vous êtes prêt à utiliser Screen, rien ne vous empêche de les implémenter avec les deux options.

La classe Game a un peu plus de surcharge avec elle en utilisant des écrans. Cependant, cette surcharge est conçue pour faciliter la mise en œuvre de différents niveaux / étapes dans votre jeu. Il est important de noter que cette surcharge est minime.

L' ApplicationAdapter n'a pas de surcharge supplémentaire (il s'agit d'une implémentation directe d'un ApplicationListener). Cela vous donne plus de contrôle car vous devez tout faire vous-même. Personnellement, je préfère utiliser ApplicationAdapters.

TL; DR: Aucune différence réelle entre eux. ApplicationAdapter vous donne un peu plus de contrôle et le jeu est un peu moins de travail.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.