Bonjour,
Cette semaine j’ai du rendre pour l’école des gobelins le jeux que j’ai fait avec un framework java. Comme ce projet est fini, et que je ne pense pas que je vais en faire grand chose de mon coté, je vais vous en expliquer le fonctionnement. Peut être que ça vous sera utile.
I) Installation
L’installation de slick dans un projet eclipse est assez déroutante pour un newbie JAVA (j’y ai passé une demi journée de cours ^^) même avec un très bon (l’unique ?) tutoriel d’installation. Faites bien attention au dernier point, c’est important.
En fait Slick est basé sur un autre framework nommée lwgl, il y a donc deux librairies pour le prix d’une. Vive la réutilisation ! Slick étant un framework dédié aux un jeux 2D, il fait le ménage dans lwgl des choses non indispensables et rajoute tout ce qui va bien pour la 2D.
Passons au code !
II) Premier Exemple
Je pars du principe que votre installation est fonctionnelle. Voici le code de mon premier test slick. Il s’agissait d’afficher une image, un test, et grâce au clavier de faire pivoter cette image. Le principe de base est le même pour le jeux final.
J’ai commenter tout le code pour vous expliquer pas à pas ce qu’il se passe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | import org.newdawn.slick.BasicGame; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.Image; import org.newdawn.slick.Input; import org.newdawn.slick.SlickException; import org.newdawn.slick.AppGameContainer; import org.newdawn.slick.util.Log; //Il faut étendre la classe BasicGame public class SimpleTest extends BasicGame { // L'image tourne, il faut un petit angle non ? // En fait il en faut un pour se souvenir d'un FPS à l'autre de combien il // faut tourner l'image. public Integer angle_image = 0; public Image imgToTurn; // Il faut un constructeur de base. // Vous noterez que toutes les erreurs seront catchés au moment de // l'exécution. (c'est à dire, dans le main) public SimpleTest() throws SlickException { // Initialise le nom de la fenetre .. super("SimpleTest"); // Très pratique pour débuger l'application. Remplace le // System.out.println .. et plus si affinié Log.info("je viens d'être initialisé"); } // Initialise mes objets. Exécuté au lancement du jeux. @Override public void init(GameContainer container) throws SlickException { // J'ai besoin d'une image. imgToTurn = new Image("ressources/images/woman.jpg"); } // Méthode appelé en boucle. C'est ici que l'on fait vivre nos objets // "non graphique" comme la gestion des touches, de nos propriétés (comme // angle) etc @Override public void update(GameContainer container, int delta) throws SlickException { // Si on appuie sur la fleche Haut if (container.getInput().isKeyDown((Input.KEY_UP))) { angle_image++; } // Si on appuie sur la fleche Bas if (container.getInput().isKeyDown(Input.KEY_DOWN)) { angle_image--; } // On fait en sorte que notre angle "tourne en rond" ^^ if (angle_image > 360) angle_image = 0; } // Méthode appelé en boucle. C'est ici qu'on gére l'affichage. @Override public void render(GameContainer container, Graphics g) throws SlickException { // Affiche un hello world en x:0 et y:100 g.drawString("Hello, Slick world!", 0, 100); g.drawString("coucou", 0, 150); // Je fais tourner l'image imgToTurn.setRotation(angle_image); // Et je la rajoute à ma fenetre g.drawImage(imgToTurn, 200, 0); } public static void main(String[] args) { try { // Démarre un jeux à partir de ma classe AppGameContainer app = new AppGameContainer(new SimpleTest()); app.setTargetFrameRate(500); app.start(); } catch (SlickException e) { // Et c'est ici que je catch les erreurs de toutes mes méthodes. e.printStackTrace(); } } } |
Wahou non ? on a fait un jeux à partir de 5 fonctions, dans l’ordre :
- constructeur() – Spécifie la fenetre de jeux (icone, intitulé de fenetre ..)
- init() – Initialise tout nos objets
- update() – Gestion du clavier et mis à jours d’objet non graphique
- render() – Gestion de l’affichage, c’est là qu’on affiche ou non des éléments graphiques (image, texte, animation, etc)
- main() – Il faut bien un point d’entré non ? On peut aussi s’en servir comme point de récupération des erreurs.
Bon ca casse pas trois pattes à un canard, mais en moins de 100 lignes de codes avec les commentaires on s’en sort plutôt pas mal non ?
![]() |
![]() |









