Je suis tombé sur une vidéo de timelaps minecraft assez bluffante et je me suis demandé comment il avait réussi leurs mouvements de caméra.
Avez vous remarqué les cercles qu’il fait autour des structures etc ?
Comme je joue sur un serveur ou quelqu’un fait aussi des vidéos minecraft il était aussi intéresser pour pouvoir faire la même chose… et nous avons réussi à le faire très simplement !
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.
importorg.newdawn.slick.BasicGame;importorg.newdawn.slick.GameContainer;importorg.newdawn.slick.Graphics;importorg.newdawn.slick.Image;importorg.newdawn.slick.Input;importorg.newdawn.slick.SlickException;importorg.newdawn.slick.AppGameContainer;importorg.newdawn.slick.util.Log;//Il faut étendre la classe BasicGamepublicclass 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.publicInteger angle_image =0;publicImage 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
publicvoid init(GameContainer container)throws SlickException {// J'ai besoin d'une image.
imgToTurn =newImage("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
publicvoid update(GameContainer container, int delta)throws SlickException {// Si on appuie sur la fleche Hautif(container.getInput().isKeyDown((Input.KEY_UP))){
angle_image++;}// Si on appuie sur la fleche Basif(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
publicvoid 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);}publicstaticvoid 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 ?
Dans le cadre de ma formation « développeur informatique multi-support » on nous a demandé de créer un jeux en Java en 2D de type « mario » ou plutôt de modifier un jeux existant en vue d’apprendre par nous même le java et d’en voir un coté plus sexy que les habituelles programmes en ligne de commande.
Seulement je n’ai pas pour habitude d’apprendre en traficotant des exemples de code. Je le faisais quand je débutais en programmation, mais maintenant je pense être capable d’apprendre par moi même et de partir sur une base propre. Comme un framework par exemple !!
Les Frameworks Java
L’idée d’utiliser un framework java et capitaliser le temps des cours en une expérience riche m’est venu en regardant l’écran de Clément Biron et Romain pouclet qui s’intéressaient tout deux aux frameworks « processing » et à « PulpCore ». (Il faut toujours cité ses sources :))
Alors pour maximiser nos découvertes je suis parti dans la découverte d’un troisième framework nommé Slick. Voila un bref apercu de ces frameworks après une journé à les regarder.
Processing
En un mot : Enorme. Le couteau suisse par exellence, ce framework s’adresse à tout le monde :
» for people who want to program images, animation, and interactions. It is used by students, artists, designers, researchers, and hobbyists for learning, prototyping, and production. »
Personnellement, j’ai été bluffé par Processing quand j’ai vu cette vidéo :
Bien sur cela ne se limite pas qu’à ça :) Il y a quand même 6 livres qui sont sorties sur ce framework ! « Ça envoie du lourd » comme dirait certains :)
Pulpcore
Pulpcore je le vois plutôt comme un moyen d’embarquer du java dans des pages web de façon transparente et se rapproche plus de Flash. Exemple ici et un autre exemple là.
Bien que jeune, ce framework tant à se faire connaitre avec son slogan provocateurs « Applets are back » :)
A la base, on nous a demandé de faire un jeux. Processing étant quand même énorme, et pulcore un peu trop limitatif, il fallait que je trouve un framework « médiant ». Hors Slick se positionne exclusivement comme étant LE framework dédié aux jeux 2D en java. Great !
En gros, il fournit tout ce qu’on a besoin pour un jeux : gestion du clavier, gestion des collisions, gestion des cartes via Tiled