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

Développement 2D, 3D et Jeux Discussion :

Créer une animation de sprite sous Eclipse


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 29
    Points : 27
    Points
    27
    Par défaut Créer une animation de sprite sous Eclipse
    Bonjour !

    Je suis étudiant débutant en JAVA, et nous sommes sur un projet pour créer un Bomberman... J'avance plus ou moins bien, mais j'aurais besoin de votre aide pour améliorer l'animation de mes personnages. Ce sont des sprites, et j'ai leurs mouvements décomposés. Par contre je ne sais comment faire pour qu'à chaque direction le sprite du perso se tourne et que l'animation se fasse... Voici un bout de mon code, avec la classe principale et la classe Player.
    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
    //Importation des classes nécessaires.
     
    import javax.swing.JApplet;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.net.*;
    import java.awt.event.*;
     
     
    public class BomberSrcApplet extends JApplet implements KeyListener
    {
    	//Déclaration des attributs (variables)
     
    	private Image fondBomberSRC;
    	private Image imgPlayer1;
    	private Image imgPlayer2;
    	private Image imgPlayer3;
    	private Image bloc_ind;
    	private GUI monAffichage;
    	private Player monPlayer1;
    	private Player monPlayer2;
    	private Player monPlayer3;
     
     
    //Methode init() lancée au démarrage de l'applet
     
    	public void init()
    	{
    		this.setSize(800,600);
    		try 
    		{
    			fondBomberSRC = this.getToolkit().getImage(new URL(getDocumentBase(),"ressources/images/fondBomb.jpg"));
    			imgPlayer1 = this.getToolkit().getImage(new URL(getDocumentBase(),"ressources/images/sprites/Boy_stand_south.gif"));
    			imgPlayer2 = this.getToolkit().getImage(new URL(getDocumentBase(),"ressources/images/sprites/Girl_stand_south.gif"));
    			imgPlayer3 = this.getToolkit().getImage(new URL(getDocumentBase(),"ressources/images/sprites/Sprite_stand_south.gif"));
    			bloc_ind = this.getToolkit().getImage(new URL(getDocumentBase(),"ressources/images/sprites/bloc.jpg"));
    		}
    		catch(MalformedURLException exc)
    		{
    			System.out.println("Problème chargement d'image" + exc);
    		}
     
    		fondBomberSRC.getHeight(this);
    		monAffichage = new GUI (fondBomberSRC);
    		monPlayer1 = new Player (imgPlayer1, 125, 115);
    		monPlayer2 = new Player (imgPlayer2, 685, 565);
    		monPlayer3 = new Player (imgPlayer3, 680, 120);
     
    		addKeyListener(this);
    		this.repaint();
    	}//fin méthode init()
     
    //Déclaration des méthodes générales
    	public void keyReleased (KeyEvent touch){};
    	public void keyTyped (KeyEvent  touch){};
    	public void keyPressed (KeyEvent touch)
    	{int key = touch.getKeyCode();
    		switch (key)
    		{
    		case KeyEvent.VK_DOWN:System.out.println("bas");
    								monPlayer1.setPosY(10);
    								//monPlayer1.setDirection("B");
    								this.repaint();
    								break;
    		case KeyEvent.VK_UP:System.out.println("haut");
    								monPlayer1.setPosY(-10);
    								//monPlayer1.setDirection("H");
    								this.repaint();
    								break;
    		case KeyEvent.VK_LEFT:System.out.println("gauche");
    								monPlayer1.setPosX(-10);
    								//monPlayer1.setDirection("L");
    								this.repaint();
    		break;
    		case KeyEvent.VK_RIGHT:System.out.println("droite");
    								monPlayer1.setPosX(10);
    								//monPlayer1.setDirection("R");
    								this.repaint();
    		break;
    		}
    	}
     
    	public void paint(Graphics g)
    	{
    		monAffichage.dessiner(g);
    		monPlayer1.afficher(g);
    		monPlayer2.afficher(g);
    		monPlayer3.afficher(g);
    	}
     
    }//fin class BomberSRC

    Et maintenant la classe Player

    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
    import java.awt.Graphics;
    import java.awt.Image;
     
     
    public class Player
    {
    	//Déclaration des attributs.
    	private int posX, posY, direction;
    	public Image imgPerso;
     
    	//Méthodes constructeurs
    	public Player (Image param, int pos_X, int pos_Y)
    	{
    		posX = pos_X;
    		posY = pos_Y;
    		imgPerso = param;
    	}
     
    	//Méthodes générales
    	public int GetX()
    	{
    		return posX;
    	}
    	public int GetY()
    	{
    		return posY;
    	}
    	public void setPosX (int dplt)
    	{
    		int nouvX = posX+dplt;
    			if (nouvX<690 && nouvX>120)
    			{
    				posX = nouvX;
    			}
    	}
    	public void setPosY (int dplt)
    	{
    		int nouvY = posY+dplt;
    			if (nouvY<570 && nouvY>110)
    			{
    				posY= nouvY;
    			}
    	}
    	public void afficher(Graphics g)
    	{
    		g.drawImage(imgPerso, posX, posY, null);
     
    	}
     
    	//public void setDirection (dir) 
    	//{
    	//	if (dir == "H") {
    	//		imgPlayer1 = changeImage("ressources/images/sprites/Boy_stand_north.gif");	
    	//}
     
     
    }


    Vous pouvez voir en gros mon idées, quand la flèche droite est enfoncée, je lui attribue la valeur 'D' et je voudrais changer le sprite de mon personnage... Et par la suite continuer la décomposition du mouvement...J'ai commencé avec la fonction setDirection, j'avoue bloquer à partir de ce moment la...

    Merci d'avance,

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 352
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 352
    Points : 20 359
    Points
    20 359
    Par défaut
    Je ne connais pas Eclipse mais pour faire une animation de sprite, basiquement il faut procéder ainsi:

    *mettre les images dans un tableau ou au mieux un tableau dynamique une sorte de pile
    *initialiser une temporisation et un pointeur d'image cadre ( "frame")
    *à chaque fréquence clé de la temporisation, incrémenter le pointeur de frame.
    *
    Avec ce pointeur de frame on pointe dans le tableau d'images de l'animation.
    Il faut prendre garde à ce que le pointeur d'animation soit inférieur à la limite supérieur du tableau d'images
    *ainsi on affiche en continu l'image courante du tableau de frames selon le pointeur de frames

  3. #3
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    pour compléter ce que t'as dis Mat.M, il faut que tu charges toutes tes images que tu peux stocker dans une ArrayList une seule fois au démarrage.
    Tu y gagnerais beaucoup à créer une classe FramesSequence possédant une ArrayList d'images, un nom, une durée de frame et ajouter un attribut FrameSequence currentFramesSequence dans Player et quelques méthodes.
    Au final tu auras quelque chose de ce style (inutile de stocker la direction) :

    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
    	public void setPosX (int dplt)
    	{
    		int nouvX = posX+dplt;
    			if (nouvX<690 && nouvX>120)
    			{
    				posX = nouvX;
    			}
    		if(dplt > 0) {
    			this.setCurrentFramesSequence("MoveRight");
    		}
    		else if(dplt < 0) {
    			this.setCurrentFramesSequence("MoveLeft");
    		}
    		else {
    			this.setCurrentFramesSequence("Idle");
    		}
    	}
     
    	public void afficher(Graphics g, int elapsedTime)
    	{
    		this.currentFramesSequence.nextFrame(elapsedTime);
    		g.drawImage(this.currentFramesSequence.getFrame(), posX, posY, null);
     
    	}
    Si tu ne gères pas la temporisation, l'animation variera en fonction des cycles par secondes, mais ce n'est peut-être pas important pour ton projet.
    Vive les roues en pierre

Discussions similaires

  1. Créer une animation
    Par zappa37 dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 13/01/2007, 22h22
  2. Créer un client Web Service sous Eclipse et Windows
    Par Lebas dans le forum Services Web
    Réponses: 2
    Dernier message: 28/08/2006, 11h53
  3. [GD] Est-il possible de créer une animation ?
    Par JavaAcro dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 02/03/2006, 17h33
  4. Créer une barre de progression sous Vba ??
    Par Deejoh dans le forum Général VBA
    Réponses: 7
    Dernier message: 17/10/2005, 16h05
  5. [FLASH MX2004] Aide pour créer une animation
    Par SnakeTales dans le forum Flash
    Réponses: 5
    Dernier message: 04/08/2005, 11h50

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