IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Une animation 2D


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut Une animation 2D
    Bonjour,

    Je suis entrain de chercher le moyen de faire une animation en java 2D et je cherche le moyen de faire une animation dans une animation ...

    Je m'explique, j'ai crée une Class Sprite qui charge une image et gère son déplacement.

    Hormis son déplacement, je souhaiterais que l'image ait une animation indépendante (écrasement composé de 4 parties d'image)



    Je voudrais donc que le je code de l'animation se trouve dans la Class Sprite (Toad) mais je n'ai vraiment aucune idée de comment faire...

    Dois je créer un thread dans cette Class ? Devrait elle être un JPanel pour pour dessiner directement dedans ? Parce que pour l'instant je dessiner dans une autre classe. Enfin, je suis un peu perdu donc si vous avez une idée ou une piste n'hésitez pas.

    Ma Class Sprite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    public class Toad
    {
        private int dx;
        private int dy;
        private int x;
        private int y;
        private Image imgToad = new ImageIcon(this.getClass().getResource("toad.png")).getImage();
     
        public Toad() 
        {
            x = 40;
            y = 60;   
        }
     
        public void move() {
            x += dx;
            y += dy;
        }
     
        public int getX() {
            return x;
        }
     
        public int getY() {
            return y;
        }
     
        public Image getImage() {
            return imgToad;
        }
     
        public void keyPressed(KeyEvent e) {
     
            int key = e.getKeyCode();
     
            if (key == KeyEvent.VK_LEFT) {
                dx = -1;
            }
     
            if (key == KeyEvent.VK_RIGHT) {
     
                dx = 1;
            }
     
            if (key == KeyEvent.VK_UP) {
                dy = -1;
            }
     
            if (key == KeyEvent.VK_DOWN) {
                dy = 1;
            }
        }
     
        public void keyReleased(KeyEvent e) {
            int key = e.getKeyCode();
     
            if (key == KeyEvent.VK_LEFT) {
                dx = 0;
            }
     
            if (key == KeyEvent.VK_RIGHT) {
                dx = 0;
            }
     
            if (key == KeyEvent.VK_UP) {
                dy = 0;
            }
     
            if (key == KeyEvent.VK_DOWN) {
                dy = 0;
            }
        }
    }
    Ma Class Principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    public class MarioBrosByD3L1 extends JPanel implements ActionListener
    {
        private Timer timer;
        private Toad toad;
     
        public MarioBrosByD3L1() 
        {
     
            addKeyListener(new TAdapter());
            setFocusable(true);
            setBackground(Color.BLACK);
            setDoubleBuffered(true);
     
            toad = new Toad();
     
            timer = new Timer(5, this);
            timer.start();
        }
     
        public static void main(String[] args)
        {
            MarioBrosByD3L1 game = new MarioBrosByD3L1();
     
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setLocationRelativeTo(null);
            f.setResizable(true);
            f.setSize(640, 480);
            f.add(game);
            f.setVisible(true);
     
        }
     
     
        @Override
        public void paint(Graphics g) 
        {
            super.paint(g);
     
            Graphics2D g2d = (Graphics2D)g;
            g2d.drawImage(toad.getImage(), toad.getX(), toad.getY(), this);
            repaint();
            Toolkit.getDefaultToolkit().sync();
            g.dispose();
        }
     
     
        @Override
        public void actionPerformed(ActionEvent e) 
        {
            toad.move();
            repaint();  
        }
     
        private class TAdapter extends KeyAdapter 
        {
     
            @Override
            public void keyReleased(KeyEvent e) {
                toad.keyReleased(e);
            }
     
            @Override
            public void keyPressed(KeyEvent e) {
                toad.keyPressed(e);
            }
        }
     
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    voici la solution que je te propose :


    Dans la classe Toad tu crées un tableau toads[] d'images dans lequel tu mets tes 4 images.

    Tu définies également une variable compteurImage pour connaitre le numéro de l'image affichée,

    et une variable deltaCompteur égale à 1 ou -1 pour accéder aux images du tableau de 0 à 3 puis de 3 à 0.

    tu définies également une méthode setImage() qui assignera à chaque appel une nouvelle image du Toad en fonction des paramètres ci-dessus.

    Dans ta classe principale l'idée est de créer un nouveau thread dans lequel on appelle toad.setImage() toutes les x millisecondes.

    pour cela fais implémenter Runnable à ta classe principale et override la méthode run() qui sera appelée par ton thread threadImage.

    voici le code de Toad :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    import java.awt.event.*;
    import java.awt.*;
    import javax.swing.*;
     
     
    public class Toad
    {
        private int dx;
        private int dy;
        private int x;
        private int y;
        private Image iimgToad;
        private Image iimgToad_1= new ImageIcon(this.getClass().getResource("Toad_1.png")).getImage();
        private Image iimgToad_2= new ImageIcon(this.getClass().getResource("Toad_2.png")).getImage();
        private Image iimgToad_3= new ImageIcon(this.getClass().getResource("Toad_3.png")).getImage();
        private Image iimgToad_4= new ImageIcon(this.getClass().getResource("Toad_4.png")).getImage();
        private Image[] toads = new Image[4];
        private int compteurImage = 0;
        private int deltaCompteur = 1;
     
        public Toad() 
        {
            x = 40;
            y = 60;
            toads[0] = iimgToad_1;
            toads[1] = iimgToad_2;
            toads[2] = iimgToad_3;
            toads[3] = iimgToad_4;
        }
     
        public void move() {
            x += dx;
            y += dy;
        }
     
        public int getX() {
            return x;
        }
     
        public int getY() {
            return y;
        }
     
        public Image getImage() {
            return iimgToad;
        }
     
        public void setImage() {
        	 iimgToad = toads[compteurImage];
        	 compteurImage = compteurImage + deltaCompteur;
        	 if (compteurImage ==3)
        	 	 deltaCompteur = -1;
        	 if (compteurImage ==0)
        	 	 deltaCompteur = 1;
     
        }
     
        public void keyPressed(KeyEvent e) {
     
            int key = e.getKeyCode();
     
            if (key == KeyEvent.VK_LEFT) {
                dx = -1;
            }
     
            if (key == KeyEvent.VK_RIGHT) {
     
                dx = 1;
            }
     
            if (key == KeyEvent.VK_UP) {
                dy = -1;
            }
     
            if (key == KeyEvent.VK_DOWN) {
                dy = 1;
            }
        }
     
        public void keyReleased(KeyEvent e) {
            int key = e.getKeyCode();
     
            if (key == KeyEvent.VK_LEFT) {
                dx = 0;
            }
     
            if (key == KeyEvent.VK_RIGHT) {
                dx = 0;
            }
     
            if (key == KeyEvent.VK_UP) {
                dy = 0;
            }
     
            if (key == KeyEvent.VK_DOWN) {
                dy = 0;
            }
        }
    }
    le code de MarioBrosByD3L1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.Timer;
    import java.awt.*;
     
     
    public class MarioBrosByD3L1 extends JPanel implements ActionListener, Runnable
    {
        private Timer timer;
        private Toad toad;
     
        public MarioBrosByD3L1() 
        {
     
            addKeyListener(new TAdapter());
            setFocusable(true);
            setBackground(Color.BLACK);
            setDoubleBuffered(true);
     
            toad = new Toad();
            Thread threadImage = new Thread(this);
            threadImage.start();
            timer = new Timer(5, this);
            timer.start();
        }
     
        public static void main(String[] args)
        {
            MarioBrosByD3L1 game = new MarioBrosByD3L1();
     
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setLocationRelativeTo(null);
            f.setResizable(true);
            f.setSize(640, 480);
            f.add(game);
            f.setVisible(true);
     
        }
     
        @Override
        public void run() {
        	while (true) {
        		toad.setImage();
        		try {
        			Thread.sleep(200);
        			System.out.println("coucou");
        		}
        		catch(InterruptedException e) {};
        	}
        }
     
        @Override
        public void paint(Graphics g) 
        {
            super.paint(g);
     
            Graphics2D g2d = (Graphics2D)g;
            g2d.drawImage(toad.getImage(), toad.getX(), toad.getY(), this);
            repaint();
            Toolkit.getDefaultToolkit().sync();
            g.dispose();
        }
     
     
        @Override
        public void actionPerformed(ActionEvent e) 
        {
            toad.move();
            repaint();  
        }
     
        private class TAdapter extends KeyAdapter 
        {
     
            @Override
            public void keyReleased(KeyEvent e) {
                toad.keyReleased(e);
            }
     
            @Override
            public void keyPressed(KeyEvent e) {
                toad.keyPressed(e);
            }
        }
     
    }
    et en pièces jointes les Toad issus de l'image jointe.
    Images attachées Images attachées     

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 48
    Points
    48
    Par défaut
    Merci pour ta réponse ! Je vais regarder à cela

Discussions similaires

  1. Controler une anim Flash
    Par Nico-ganja dans le forum Flash
    Réponses: 2
    Dernier message: 04/03/2003, 00h37
  2. Réponses: 3
    Dernier message: 25/11/2002, 14h15
  3. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54
  4. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo