Animation en Java
La possibilité de créer des animations est indispensable pour un programmeur, surtout un programmeur de jeux vidéo. Java vous permet d'en créer facilement grâce aux composants Swing et AWT. Vous trouverez plus bas un code source assez simple qui effectue une animation basique. Il vous suffira de modifier la méthode paintComponent pour créer une animation différente.
Prérequis
- Les notions les plus complexe de ce tutorial sont :
- L'héritage
- Les threads
- Différences Applets/Applications
Pour ce qui est de la différence entre les applets et les applications java indépendantes, elle est assez simple : plus de méthode "public static void main" mais une méthode "public void init()" par laquelle l'applet est lancé.
L'héritage est une notion de la programmation orientée objet. En attendant la mise en ligne sur ce site d'un dossier sur la programmation orientée objet, retenez que si une classe hérite d'une autre, elle possède les mêmes "caractéristiques" que la classe mère et qu'elle peut redéfinir ses méthodes ainsi qu'avoir accès à ses méthodes publiques ou protégées.
Quand vous lancez un nouveau thread, celui si s'exécute parallèlement au reste du programme. C'est à dire qu'il s'exécute en même temps. Votre programme pincipal peut ainsi continuer à exécuter ses instructions sans devoir s'arrêter pour exécuter le contenu du thread.
Description
Cette animation est rafraîchie dans un panneau qui est affiché dans l'applet. L'animation utilise le double-buffering software. Quand vous créez une animation, il peut arriver qu'elle clignote (clipping). C'est parce que chaque frame de votre application est dessinée directement dans la partie visible de celle-ci. Le double-buffering software est geré par la JVM est vous permet d'écrire dans un buffer mémoire puis de l'afficher par la suite : vous ne dessinez plus à l'écran et il n'y a donc plus de clipping.
Animation et Java
Animation.java :
Code :
MonPanneau.java:
Code :
Actualise.java :
Code :
Ecrit par Quintoff
Prérequis
- Les notions les plus complexe de ce tutorial sont :
- L'héritage
- Les threads
- Différences Applets/Applications
Pour ce qui est de la différence entre les applets et les applications java indépendantes, elle est assez simple : plus de méthode "public static void main" mais une méthode "public void init()" par laquelle l'applet est lancé.
L'héritage est une notion de la programmation orientée objet. En attendant la mise en ligne sur ce site d'un dossier sur la programmation orientée objet, retenez que si une classe hérite d'une autre, elle possède les mêmes "caractéristiques" que la classe mère et qu'elle peut redéfinir ses méthodes ainsi qu'avoir accès à ses méthodes publiques ou protégées.
Quand vous lancez un nouveau thread, celui si s'exécute parallèlement au reste du programme. C'est à dire qu'il s'exécute en même temps. Votre programme pincipal peut ainsi continuer à exécuter ses instructions sans devoir s'arrêter pour exécuter le contenu du thread.
Description
Cette animation est rafraîchie dans un panneau qui est affiché dans l'applet. L'animation utilise le double-buffering software. Quand vous créez une animation, il peut arriver qu'elle clignote (clipping). C'est parce que chaque frame de votre application est dessinée directement dans la partie visible de celle-ci. Le double-buffering software est geré par la JVM est vous permet d'écrire dans un buffer mémoire puis de l'afficher par la suite : vous ne dessinez plus à l'écran et il n'y a donc plus de clipping.
Animation et Java
Animation.java :
Code :
import javax.swing.*;
import java.awt.*;
public class Animation extends JApplet
{
public static MonPanneau anim;
public void init()
{
//contenu représente le contenu de l'applet
Container contenu = getContentPane();
//on spécifie qu'il ne faut pas qu'un gestionnaire
//s'occupe de la mise en page de notre applet
contenu.setLayout(null);
//On crée un panneau personalisé pour l'animation
anim = new MonPanneau();
contenu.add(anim);
//comme il n'y a pas de gestionnaire
//on doit spécifier les dimensions du panneau
anim.setBounds(0, 0, 400, 300);
//on crée et démarre le thread rafraîchissant l'animation
Actualise thread = new Actualise();
thread.start();
}
}MonPanneau.java:
Code :
import javax.swing.*;
import java.awt.*;
public class MonPanneau extends JPanel
{
//notre buffer dans lequel on dessine
private Graphics memory;
//image qu'on affiche quandn a fini de dessiner
private Image show;
//largeur du cercle d'animation
private int width = 0;
//valeur à ajouter a chaque rafraîchissement
//à la largeur du cercle
private int add =1;
public void paintComponent(Graphics g)
{
//si où l'on veux dessiner est "null"
if(memory==null)
{
//on crée l'image show
show = createImage(400, 300);
//on récupère les "graphismes" de l'image
//où l'on va dessiner
memory = show.getGraphics();
}
//on modifie la largeur du cercle intérieur
//pour réaliser l'animation
if(width >= 240)
add=-1;
else if(width <= 0)
add=1;
//on modifie la largeur du cercle
width+=add;
//on dessine un rectangle plein pour le fond
memory.setColor(Color.WHITE);
memory.fillRect(0, 0, 400, 300);
//on dessin un cercle plein
memory.setColor(new Color(82, 162, 255));
memory.fillOval(70, 20, 260, 260);
//on dessine le cercle d'animation
memory.setColor(Color.WHITE);
memory.fillOval( ((400-width)/2), ((300-width)/2), width, width);
//on dessine le texte à découvrir
memory.setColor(new Color(82, 162, 255));
memory.setFont(new Font("Comic sans MS", Font.BOLD, 20));
memory.drawString("www.DevAmateur.be", 100, 150);
//on affiche l'image dont on a dessiner les "graphismes"
g.drawImage(show, 0, 0, this);
}
}Actualise.java :
Code :
public class Actualise extends Thread
{
//méthode qui est lancée au démarage du thread
public void run()
{
//boucle qui se répete à l'infini
while(true)
{
//on rafraîchit le panneau d'animation
Animation.anim.repaint();
try
{
//on fait un pause soulager le processeur
sleep(15);
}
catch(Exception e) {}
}
}
}Ecrit par Quintoff




