sept
29
2010

[Tutoriel Andengine] Partie 1 – Mes premiers pas avec AndEngine

Après le développement d’application sur la plateforme Android, nous allons nous pencher sur la création des jeux pour notre plateforme favorite, depuis l’apparition du SDK 1.6 Google à intégrer l’Opengl ES (Opengl Embedded System) ; grâce à cela nous allons pouvoir créer des jeux 2D et 3D sur Android.

Andengine est un moteur de jeu, c’est une surcouche qui permet la création d’applications utilisant le module Opengl d’Android, ce qui nous permettra de créer des jeux sans travailler directement avec Opengl ES sans y toucher directement. Nous verrons à travers divers chapitres les méthodes pour créer un jeu et l’améliorer.

Pré-requis

Tout d’abord, nous devons télécharger la bibliothèque AndEngine disponible sur le site officiel, deux possibilités s’offrent à nous :

1) Télécharger les sources et les mettres dans un fichier .jar

http://code.google.com/p/andengine/

 

 

Suivre le tutoriel http://andenginefromscratch.blogspot.com/2011/06/off-topic-article-how-to-stay-up-to.html

Nos premiers pas

Nous allons créer tout d’abord un projet sous Android 1.6, puis nous allons modifier l’architecture du projet pour le rendre compatible avec notre moteur de jeu.

Dans notre projet, nous allons rajouter un répertoire nommé “Lib” et y placer notre bibliothèque :

Une fois ceci fait, faites un clic droit sur la bibliothèque puis “Build path” > “Add to build path“.

Désormais, le moteur AndEngine est lié à notre projet.

Nous allons ajouter un deuxième répertoire à notre architecture, celui-ci s’appellera “Gfx” et sera placé dans le répertoire “assets“, il contiendra toutes les images liées à notre jeu.

Une activité bien différente

Dans nos anciens projets, nous étions habitués à travailler avec des activités héritant du type Activity ou encore ListActivity. Dans un projet de type AndEngine, un autre type d’activité vient alors remplacer ce que nous avons connu, notre activité va donc hériter du type BaseGameActivity.

Ouvrez la classe MonJeuActivite et changez l’héritage en BaseGameActivity, il vous faudra supprimer la méthode surchargée onCreate et implémenter les méthodes obligatoires. Si vous oubliez de le faire, Eclipse soulignera en rouge MonJeuActivite, passez le curseur dessus et faites un “Add unimplemented methods“.

Eclipse se charge d’implémenter les méthodes manquantes sans que vous n’ayez rien à faire.

On se retrouve désormais avec une classe comme celle-ci :

public class MonJeuActivite extends BaseGameActivity {

@Override

public void onLoadComplete() {

// TODO Auto-generated method stub

}

@Override

public Engine onLoadEngine() {

// TODO Auto-generated method stub

return null;

}

@Override

public void onLoadResources() {

// TODO Auto-generated method stub

}

@Override

public Scene onLoadScene() {

// TODO Auto-generated method stub

return null;

}

}

Si vous êtes un temps soit peu familié avec la langue de Shakespeare, vous comprendrez rapidement l’utilité de ces méthodes :

• onLoadComplete : Une fois le chargement terminé

• onLoadEngine : Au chargement du moteur

• onLoadResources : Au chargement des ressources (images, sons, etc…)

• onLoadScene : Au chargement de notre scène de jeu

Pour le moment rien de très difficile à comprendre, le moteur du jeu se charge d’exécuter les méthodes réécrites que nous avons ci-dessus.

Nous allons avoir besoin de trois variables : la première sera notre camera, la seconde et la troisième seront la taille de la camera. La camera servira en quelques sorte à définir notre champ de vision dans le jeu.

private Camera camera;

private static final int CAMERA_LARGEUR = 480;

private static final int CAMERA_HAUTEUR = 320;

Ensuite, nous allons travailler dans notre méthode onLoadEngine qui permet de définir les paramètres pour le moteur : s’il est en plein écran, la taille, lui affecter une caméra, ….

@Override

public Engine onLoadEngine() {

camera = new Camera(0, 0, CAMERA_LARGEUR, CAMERA_HAUTEUR);

return new Engine(new EngineOptions(true,

ScreenOrientation.LANDSCAPE,

new RatioResolutionPolicy(CAMERA_LARGEUR, CAMERA_HAUTEUR),

camera));

}

On commence par initialiser notre caméra prenant en paramètres les coordonnées X et Y de départ et d’arrivée, ensuite nous allons retourner notre moteur, celui-ci prend en paramètres un OptionsEngine qui lui même à comme paramètres ceci :

EngineOptions(boolean pFullscreen, ScreenOrientation pScreenOrientation, IResolutionPolicy pResolutionPolicy, Camera pCamera)

Le premier sert à déterminer si le jeu est en plein écran ou non, le deuxième s’il est en mode portrait ou paysage, et le troisième, la résolution et enfin notre caméra.

Pour finir, nous allons rajouter une scène à afficher dans notre jeu, dans la méthode onLoadScene nous allons faire ceci :

@Override

public Scene onLoadScene() {

final Scene scene = new Scene(1);

return scene;

}

Une Scene prend en paramètre le nombre de calques, ici le nombre sera de un.

Lancez notre programme et vous devriez voir apparaitre un fond noir, mais ce n’est que le début.

Permissions

Ajoutez la permission WAKE_LOCK à votre android manisfest, sinon vous verrez une erreur se produire durant les phases de débogage (DDMS)

Dans le chapitre suivant, je vous apprendrez à dessiner une ligne, un carré et même afficher une image !

Sources de la formation : FormationAndEngine

A bientôt pour la suite

  • http://SiteWeb Alex R.

    J’avais dans l’idée de faire quelques jeux pour android, débutant tout juste dans le développement mobile (je connaissais déjà le java), j’ai suivi ton tutoriel, et je dois dire qu’il est extra.

    Merci et vivement la suite :)

  • http://www.golemcreation.com vincent

    Je suis infographiste, et j’ai bossé dans le jeu vidéo pendant quelques années.
    vous pensez que le tutoriel est accessible à quelqu’un n’ayant pas eu de formation en programmation?

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    La base est simple, le fond est plus complexe. Il faut réfléchir de manière algorithmique le plus souvent dans le développement de jeux.

    Après rien ne vous empêche d’apprendre au fur et à mesure, en commençants par les base du langage Java (Un bon tutoriel ce trouve sur le site du zero), puis venir sur la plateforme Android pour progresser dans ce domaine.
    Rien n’est inaccessible, tout dépend le temps et l’envie que l’on désire y mettre.

    Je vous souhaite bonne chance dans tout les cas.

  • http://www.lovelive.fr Lovelive

    Hello,
    Je suis en train d’apprendre un peu le développement avec Android.
    Jusque là, je n’ai pas eu de problème, la doc est beaucoup trop terre-à-terre mais les exemples sont bien. Bref, pour ne pas avoir à réinventer la roue, je me suis penché sur Andengine.
    Et là, patatras, même le plus simple des tutos (celui-ci en l’occurrence) plante lamentablement lorsque l’appli est lancée.
    Je n’ai pas un écran noir, l’application plante !
    Je m’y replonge.

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    Bizarre toutes les personnes ayant fait le tutoriel non pas eu de soucis, regarde bien dans le DDMS et dans le LogCat pourquoi ton application plante défois c’est pour quelque chose d’idiot :)

  • http://SiteWeb kevlemecsympa

    ce serai super si tu pouvais faire un tuto sur le chargement de map tmx sous andengine

  • ZackaruS

    Bonjour,

    Tout d’abord, merci pour ces tutoriels sur AndEngine.
    Comme Lovelive, je n’avais pas un écran noir, mais un beau plantage.
    Et dans les dernières versions du moteur, “Scene(1)” (à la ligne “final Scene scene = new Scene(1);”) est “deprecated”.
    Pour résoudre ces problèmes, voici la solution:

    protected Camera camera;
    private MenuScene scene;

    @Override
    public Scene onLoadScene()
    {
    this.scene = new Scene(this.camera);
    return this.scene;
    }

  • http://www.ace-art.fr/wordpress/ Pierre-Emmanuel Mercier

    Ça a encore changé depuis la dernière mise à jour du tutoriel. Ils sont pénibles de modifier les méthodes en boucle -_-’

  • http://www.facebook.com/michel.guadeloupe Blixis Facultatif

     Quelqu’un pourrais m’envoyer le lien du “jar” par ce que je tourne en rond :/