Java

Au revoir WordPress !

06 April 2017 06:20 Vie du Blog Blog, Developpement, geek, Java

J'ai ouvert ce blog en 2008, ce qu'on peu dire, c'est que le rythme des parutions est pour le moins aléatoire. Un peu moins de 9 ans plus tard, il est temps de prendre un nouveau tournant. Aujourd'hui enfin je me débarrasse de prestashop pour un moteur que j'ai moi-même développé. Techniquement :

Et bien sur si cela vous intéresse le code est sous licence GPL disponible sur GitHub

Le blog n'as pas encore fini sa migration, je dois porter une partie du contenu, fixé quelque point, ajouter un catcha, cela va se faire doucement. Mais il fallait bien que je sorte ce blog pour me forcer à le faire.

edit : Depuis, j'ai de gros problème avec des bots, mon blog se prend beaucoup de spam, je suis encore à la recherche de la meilleurs solution, il se pourrait que je soit obligé de mettre un catcha. En attendant de trouver mieux, tous les commentaires contenant http:// seront bloqués.

edit 2 : Les articles sur slick on été porté vers du mark down, il faudra attendre un peu pour les autres.

Slick2d, leçon 21 :: Les combats aux tour par tour (6/6)

12 September 2016 09:30 Slick2d - Leçons 20-29 Java, Jeux, Slick2d, Tutorial

Après une longue pause voici enfin le 6ieme et dernier article sur les combats aux tour par tour. Dans celui-ci nous verrons comment changer la musique au début et en fin de combat. Cette méthode permet également de déclencher des "choses" quand on change d'état. Comme cela fait un moment que je n'ai pas écris de tuto, il se peut que le style change un peu, les fautes d'orthographes resterons.

Actuellement la musique se charge au lancement du jeux et ne change plus tout au long du jeux. Nous allons voir comment changer cela.

Préparation

J'ai trouvé quelques musiques sur OpenGameArt, celle-ci pour le combat et celle-ci pour la victoire. Comme précédemment, il faut convertir les musiques en OGG.

Rappel

Comme nous avons vu dans la leçon 7, pour charger et lire une musique de fond il nous suffisait de faire cela dans une des méthodes inits :

@Override
public void init() {
  Music background = new Music("sound/lost-in-the-meadows.ogg");
  background.loop();
}

Slick2d, leçon 20 :: Les combats aux tour par tour (5/6)

17 May 2015 08:58 Slick2d - Leçons 20-29 Java, Jeux, Slick2d, Tutorial

Aujourd'hui on va voir comment ajouter un hud à notre combat par l'intermédiaire de bouton cliquable et une fenêtre de texte qui contiendra les logs du combat.

Préparation :: un bouton.

Comme pour la leçon 13 j'ai utilisé la ressource Golden UI trouvée OpenGameArt pour faire un bouton que voici :

bouton

Code :: BattleHud

Comme pour la leçon 13 créons une classe dédiée à l'affichage du hud BattleHud.

// Classe : BattleHud
public class BattleHud { 

  public void init(GameContainer container) throws SlickException { }
  
  public void render(GameContainer container, Graphics g) { }

}

Slick2d, leçon 19 :: Les combats aux tour par tour, (4/6)

19 April 2015 08:57 Slick2d - Leçons 10-19 Java, Jeux, Slick2d, Tutorial

Dans la leçon précédente nous avons vu comment faire une animation qui suit un courbe de bézier, pour rendre notre combat plus dynamique. Mais les animation se déclenchais en même temps pour le joueur et le monstre. Aujourd'hui on va voir comment résoudre ce problème à l'aide de listener.

Préparation ::  Listener ?

Qu'est-ce qu'un Listener ? Un listener c'est quelque chose qui écoute un événement, lorsque l'événement ce produit, alors on appel l'écouteur, c'est à dire le listener. C'est déjà ce qu'on utilise pour la gestion du clavier et de la manette.

J'ai fais évoluer SlickUtils, dans sa version 1.2, j'ai ajouté une interface AnimationListener et par la même la classe PathAnimation à évolué pour permettre d'y ajouter des points d'écoutes. PathAnimation a maintenant une méthode addListener(AnimationListener, long) permettant d'ajouter un point d'écoute à un certain point de l'animation. AnimationListener lui ne demande qu'une seul méthode on() qui sera appeler au point que l'on a demandé. Vous l'aurez compris, si vous n'avez pas la version 1.2 de SlickUtils, mettez-vous à jour.

Quel point d'écoute définir ? C'est un peu en fonction de ce que vous voulez. Moi j'ai choisis 2 points d'écoute pour le joueur.

  1. Quand le joueur arrive à la moitié de son attaque, je calcul les dégâts qu'il fait et je les assigne au monstre.
  2. Quand le joueur arrive à la fin de son mouvement d'attaque, je calcul si le monstre est mort et j'en déduis la suite du combat en fonction de la commande du joueur.

Callback Animation

Slick2d, leçon 18 :: Les combats aux tour par tour (3/6)

22 March 2015 09:07 Slick2d - Leçons 10-19 Java, Jeux, Slick2d, Tutorial

Suite et toujours pas la fin sur les combats au tour par tour. Dans l'article précédent nous avons vu comment ajouter un système de commande pour traiter les attaques et défense lors du combat. Mais plusieurs problèmes ce soulevaient alors et voici ceux qu'on va résoudre aujourd'hui :

  • Non réinitialisation des pv des monstres.
  • Le combat est très statique et manque d'animation

Réinitialiser les points de vie du monstre.

On m'as demandé dans les commentaires, et plusieurs fois par mail, comment rappeler la méthode init(). Même si on pourrait, il ne faut pas. Sans rentrer dans les détails, la méthode init() sert à initialiser les ressources (image, son, contrôleur, etc..) nécessaires à la boucle, et si on la rappelle, on recharge encore une fois les ressources. Parfois ce n'est pas gênant, mais bien souvent c'est le cas. Prenons le cas d'une image, elle est chargée avec un objet java mais également dans la ram de votre carte graphique, n'oublions pas que Slick2D utilise OpenGL. Si l'objet java n'est plus référencé, java va le supprimer de votre mémoire, mais java ne peu pas savoir que image est également dans la ram de la carte graphique et va y rester ! Bien sur qu'il est possible de libérer cette mémoire, mais il faut l'indiquer à Slick2D.

Alors comment est-ce que l'on fait donc hein ? On utilise la méthode enter() qui est définit dans l'interface GameState on peu donc la surcharger dans nos boucles. Cette méthode est appelée quand on entre dans une boucle de jeux.

Code :: enter()

Ajoutons la méthode enter à notre BattleGameState.