Accueil Articles Tutoriels Forums
Animation en Java
Créé par Quintoff le 26 Déc 2007 à 17:10, dernière modification le 05 Jan 2008 à 10:17
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 :
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