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

Interfaces Graphiques en Java Discussion :

Deplacer un objet grace au clavier


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Par défaut Deplacer un objet grace au clavier
    Bonjour,
    J'ai un jeu a realiser en java; et le doit deplacer mon objcet ki contient une position X et une position Y, en m'aidant des touche du clavier.
    et..... Au SECOURS je perd pied!!!
    Comment faire pour ke quan j'apuie sur la fleche du haut
    le PosY de l'objet soi modifier Ainsi de suite
    Merci d'avance

  2. #2
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    il faut que tu utilises les fonctions de keyListener et KeyEvent. Si tu ne sais pas comment les utiliser, sun a mis en ligne un petit tutorial que tu trouveras ici http://java.sun.com/docs/books/tutor...ylistener.html
    http://java.sun.com/docs/books/tutor...EventDemo.java

    Bonne chance.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Par défaut Merci mai je l'ai sous la main
    Sa m'aide pas trop vu ke c'est en anglaishttp
    J'ai beaucoup de cours et de tutorial mai la programmation est toujours differentes je m'y perds.
    N'aurait tu pas un bou de code en Exemple

  4. #4
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    Si tu as déjà les KeyListener il manque un timer pour capturer les événènements du clavier et déplacer l'objet. KeyEventDispatcher -> posX-posY <- timer.actionPerformed() -> draw(posX,posY)
    Tu peux t'inspirer du code source de ma platforme sf3Jswing basée sur un Pong classique avec 1 joueur contre la machine. sf3Jswing
    idéalement, les sources sont disponibles en exploration cvs sur le site.

  5. #5
    Membre éclairé Avatar de DonkeyMaster
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 95
    Par défaut
    Allons, allons, pas de panique.
    Ton problème est simple, tu vas voir qu'on va y arriver.

    D'abord, tu crées deux KeyListener qui modifient la position. Un sera pour quand on appuie sur une touche, l'autre pour quand on la relâche.

    Dans cette méthode, tu regarderas de quelle touche il s'agit, et
    Je ne me souviens plus des noms des classes et des méthodes, ça il te faudra le trouver tout seul, mais pour l'algorithme, c'est comme je te montre.

    Quand on appuye sur une touche, on démarre le déplacement dans cette direction:
    Code java : 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
     
    public void onKeyDown (KeyboardEvent event) {
      switch (event.KeyPressed) {
      case KEY_UP:
        joueur.y_step=-1; //on se déplace vers le haut
        break;
      case KEY_DOWN:
        joueur.y_step=+1; //on se déplace vers le bas
        break;
      case KEY_LEFT:
        joueur.x_step=-1; //on se déplace vers la gauche
        break;
      case KEY_RIGHT:
        joueur.x_step=+1; //on se déplace vers la droite
        break;
      }
    }

    Quand on relâche une touche, on arrête le déplacement dans cette direction:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void onKeyUp (KeyboardEvent event) {
      switch (event.KeyPressed) {
      case KEY_UP:
        joueur.y_step=0;    break;
      case KEY_DOWN:
        joueur.y_step=0;    break;
      case KEY_LEFT:
        joueur.x_step=0;    break;
      case KEY_RIGHT:
        joueur.x_step=0;    break;
      }
    }

    Enfin, à chaque battement de coeur, tu effectues le déplacement:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    joueur.x += joueur.x_step;
    joueur.y += joueur.y_step;

    Voilà, ceci n'est qu'une possibilité parmi beaucoup. J'espère t'avoir aidé.

  6. #6
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 115
    Par défaut
    Bonjour,

    tu peux tout simplement faire un repaint() mais avec de nouvelles coordonées:

    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
     
     
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
     
     
    public class test extends Applet{
    /*on crée une image sur laquelle on va dessiner, PUIS afficher, ce qui va éviter que l'écran ne sintille trop et on déclare les
    variables de position et de taille du bloc que l'on va déplacer*/
     
    Image img=null; // on "déclare" l'image qui va servir à afficher le bloc
    Graphics gi=null; // on déclare son "graphic"
     
    int X=0, Y=0, tailleX=100, tailleY=50;
     
      public void init(){
     
     	img=createImage(getSize().width, getSize().height);//on crée l'image à la taille de la zone de l'écran
    	 gi=img.getGraphics(); // on attribue ce graphic à l'image
         addKeyListener(new KeyAdapter(){ //on se sert d'un keyAdapter afin d'éviter d'avoir à appeler toutes les méthodes du keyListener
              public void keyPressed(KeyEvent evt){
                    if(evt.getKeyCode()==evt.VK_RIGHT && X+tailleX<=getSize().width){X++; paindre();} //on contrôle qu'il ne soit pas trop à droite avant de le déplacer vers la droite
                    if(evt.getKeyCode()==evt.VK_LEFT && X>=0){X--; paindre();} //on contrôle qu'ils ne soit aps trop à gauche avant de le déplacer vers la gauche
                    if(evt.getKeyCode()==evt.VK_DOWN && Y+tailleY<=getSize().height){Y++; paindre();} // on contrôle qu'il ne soit pas trop bas avant de le faire descendre
                    if(evt.getKeyCode()==evt.VK_UP && Y>=0){Y--; paindre();} //on contrôle qu'il ne soit pas trop haut, puis on le fait monter
              }
     
         });
     
         paindre();
      }
     
      public void paint(Graphics g){
     
    	 g.drawImage(img, 0, 0, this); //paint l'image
     
      }
     
      public void update(Graphics g){paint(g);} //on évite que l'écran ne sintille en demandant à la méthode de simplement paindre par dessus sans rien effacer
     
      public void paindre(){
      	  gi.setColor(Color.white);// on prends la couleur d'arrière plan
         gi.fillRect(0, 0, getSize().width, getSize().height); //on efface l'ancien bloque de l'image
     
         gi.setColor(Color.black);//on prends la couleur d'avant-plan
         gi.fillRect(X, Y, tailleX, tailleY); // on dessine le nouveau bloc sur l'image
     
         repaint(); //on appel la méthode update, qui va paindre la méthode "paint()"
      }
     
    }

    Voilà, ça te fait un bloc que tu peux déplacer, qui est limité aux limites de l'écran et qui ne sintille pas (ou pas beaucoup), j'éspère que ça t'ira ?

  7. #7
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut jInternalFrame
    Bonjour, est -il possible de faire la même opération sans applet mais dans une jInternalFrame ?

    C'est a dire, au lieu d'avoir notre carré noir dans un applet, il serait déssiné dans une jInternalFrame.


    Merci

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tu remplaces extends Applet par un extends JPanel, tu supprime la redéfinition de la méthode update, tu remplace paint par paintComponent.

    Puis tu ajoutes ce JPanel à cette JInternalFrame et m'affaire devrait être jouée.

  9. #9
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut Merci
    Merci pour ta réponse, hélas j'ai une grosse erreur ( arret de la JVM lors du lancement de la jInternalFrame) je posterai mon code demain.

    L'idée, c'est que j'ai déja ma fenêtre principale, puis après avoir clic sur un bouton, un internalframe se place dans la fenetre principale.. et donc je souhaite pouvoir avoir ce carré noir ( pour le moment, c'est déja bien si j'y parvient apres je pourrais codé le reste ) dans la jInternalFrame et répondre aux actions des touches du clavier.

    A demain, et merci.

  10. #10
    Membre éclairé Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Par défaut Déplacement
    Bonjour, je n'arrive pas à faire déplacer mon objet (image) sur ma fenêtre principale.

    Je souhaite pouvoir déplacer cette image dans les 4 directions cardinales et apres pouvoir l'ajouter à un background pour qu'elle puisse se balader par-dessus ( prochaine étape ).

    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
     
     
    // imports....
     
     
    public class Fenetre extends JFrame {
     
     
    	private JMenu jMenu5;
    	private JSeparator jSeparator1;
    	private JMenu jMenu4;
    	private JMenuItem exitMenuItem;
    	private JSeparator jSeparator;
    	private JMenuItem openFileMenuItem;
    	private JMenuItem newFileMenuItem;
    	private JMenu jMenu3;
    	private JMenuBar jMenuBar1;
     
     
     
    	public static void main(String[] args) {
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				Fenetre inst = new Fenetre();
    				//inst.setContentPane(new ArrierePlan());
    				inst.setContentPane(new Deplacement());
    				inst.setLocationRelativeTo(null);
    				inst.setTitle("SNAKE JAVA");
    				inst.setSize(600, 400);
    				inst.setDefaultCloseOperation(inst.EXIT_ON_CLOSE);
    				inst.setVisible(true);
    			}
    		});
     
     
    	}
     
     
     
     
    	public Fenetre() {
    		super();
    		initGUI();
    	}
     
     
    	private void initGUI() {
    		try 
    			{
    		    	setSize(600, 400);
    			{
    				jMenuBar1 = new JMenuBar();
    				setJMenuBar(jMenuBar1);
    				{
    					jMenu3 = new JMenu();
    					jMenuBar1.add(jMenu3);
    					jMenu3.setText("File");
    					{
    						newFileMenuItem = new JMenuItem();
    						jMenu3.add(newFileMenuItem);
    						newFileMenuItem.setText("New");
    					}
    						newFileMenuItem.addActionListener(new ActionListener() {
     
    							@Override
    							public void actionPerformed(ActionEvent e) {
     
     
    								}
     
    						});
     
    										{
    						exitMenuItem = new JMenuItem();
    						jMenu3.add(exitMenuItem);
    						exitMenuItem.setText("Exit");
    					}
    					exitMenuItem.addActionListener(new ActionListener() {
     
     
    						public void actionPerformed(ActionEvent arg0) {
     
     
    							System.exit(0);
    						}
     
    					});
    				}
     
     
     
     
    			}
     
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    Puis la classe ou se trouve mon image plus la méthode déplacement :

    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
     
     
    // imports....
     
    public class Deplacement extends JPanel implements KeyListener{
     
    	private JLabel labelImage = new JLabel(); 
    	private int x=0,y=0;
     
    	public void paintComponent(Graphics g) {
     
    		try {
    		   Image  img2 = ImageIO.read(new File("iconO.png"));
     
     
    	        g.drawImage(img2, 40,0, this);
     
     
    		}catch (IOException e) {
    			e.printStackTrace();
    		}
    		}
     
     
    	public void keyPressed(KeyEvent ke) {
    		int key = ke.getKeyCode();
    		switch (key) {
    			case KeyEvent.VK_DOWN : 
    				y+=5;
    				break;
    			case KeyEvent.VK_UP:
    				y-=5;
     
    				break;
    			case KeyEvent.VK_RIGHT:
    				x+=5;
    				break;
    			case KeyEvent.VK_LEFT:
    				x-=5;
    				break;
     
    		}
    		labelImage.setBounds(x,y,40,40);
    	repaint();
     
     
    	}
    	public void keyReleased(KeyEvent ke) {}
    	public void keyTyped(KeyEvent ke) {
    	}
     
     
     
    }
    Je pense que je dois mal utiliser le repaint(); ou quelque chose du genre...
    Merci a vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. deplacer des objets dans un panel
    Par chris81 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/03/2008, 12h44
  2. [CS3] Dreamweaver CS3 deplacer des objet
    Par sambzh24 dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 06/02/2008, 08h40
  3. [JS] 2 objets et évènement clavier
    Par Gryon dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/04/2007, 16h51
  4. Comment deplacer les objets sur JBuilder?
    Par awane dans le forum JBuilder
    Réponses: 3
    Dernier message: 08/07/2006, 18h23
  5. [VB6] Deplacer un objet sur une form en mode Exploitation
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 30/05/2006, 15h12

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