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 :

Problème pour faire bouger deux objets simultanement


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut Problème pour faire bouger deux objets simultanement
    Bonjour,
    Je suis entrain de réaliser un mini-jeu(pong-like), mes deux raquettes(correspondantes aux deux joueurs) bougent en fonction des boutons pressées au clavier, mais le problème est que on ne peut les faire bouger simultanément, c'est soit l'une soit l'autre.
    Je vous donne un aperçu de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void init()
      {
        addKeyListener(this);
      }
     public void keyReleased(KeyEvent e){}
     public void keyTyped(KeyEvent e) {}
    public void keyPressed(KeyEvent e)
      {
         /* ici je définie les actions en fonction des touches pressées
             pour la raquette player1 : ZQSD
             pour la raquette player1 : UP DOWN LEFT RIGHT
        */
      }
    Je voudrais savoir comment faire pour avoir deux Keylistener : un que gère les touches pressées par le player1, et lautre pour le player2.

    Est-ce-que je dois appeler une seconde fois addKeylistener?
    Mais dans ce cas comment attribuer un écouteur à un joueur, et l'autre écouteur à l'autre joueur.

    J'éspère avoir été à peu près clair, merci pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    Ca c'est un problème intéressant !

    Le prob ce situe donc dans le fait de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if(touche pressée = joueur){
    gérer joueur 1
    }else{
    gérer joueur 2
    }
    Tu peux peut être mettre un thread dans gérer joueur 1 et gérer joueur 2?

  3. #3
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Désolé mais je ne sais pas ce que c'est qu'un thread.

  4. #4
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Je me suis renseigné sur les threads, j'ai à peu près compris comment ça march(création, démarrage,...), mais je n'ai pas compris comment attribuer une tâche à un thread.

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par L Ankou
    Tu peux peut être mettre un thread dans gérer joueur 1 et gérer joueur 2?
    Cela ne changerait rien a priori, car les évènements sont générés à partir de l'edt, donc 1 seul thread!
    A priori, si les 2 appuient sur une touche en même temps, je pense que ça te génèrera 2 events, mais forcément de manière séquentielle (mais très rapidement)...

  6. #6
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Justement je voudrais savoir comment faire pour gerer deux evenement simultanés (ou presque) sachant que dans ma méthode keyPressed j'ai declaré un seul evenement KeyEvent e, et que par conséquent il n'y à qu'une raquette qui bouge à la fois.
    Je voudrais savoir comment faire pour avoir deux écouteur aux clavier ou deux evenments(si c'est possible) à la fois.

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par juve1897
    Justement je voudrais savoir comment faire pour gerer deux evenement simultanés (ou presque) sachant que dans ma méthode keyPressed j'ai declaré un seul evenement KeyEvent e, et que par conséquent il n'y à qu'une raquette qui bouge à la fois.
    Je voudrais savoir comment faire pour avoir deux écouteur aux clavier ou deux evenments(si c'est possible) à la fois.
    avec un if(la touche correspond au joueur 1) {...} else {...}
    ça devrait être ok...

    ça sera à la suite, mais à la vitesse où ils seront, tu ne devrais pas avoir de problème...

  8. #8
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    C'est à peu pres ce que je fais, le problème c'est que si par exemple le joueur 1 décide de monter(ou une autre action) le joueur 2 reste immobile pendant ce temps, les deux joueurs ne peuvent bouger simultanément.
    Je vais plutot te donner un aperçu du code :

    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
     
    public void keyPressed(KeyEvent e)
      {
          if((player1.r.y+50)<(getHeight()))
    	    if(e.getKeyCode()==KeyEvent.VK_S)
    	      player1.r.y += 10;
     
    	if(player1.r.y>=0)  
    	  if(e.getKeyCode()==KeyEvent.VK_Z)
    	    player1.r.y -= 10;
     
    	if(player1.r.x-10>=0)
    	  if(e.getKeyCode()==KeyEvent.VK_Q)
    	    player1.r.x -= 10;
     
    	if((player1.r.x+5)<(getWidth()/2-10))
    	    if(e.getKeyCode()==KeyEvent.VK_D)
    	      player1.r.x += 10;
     
    	if((player2.r.y+50)<(getHeight()))
    	  if(e.getKeyCode()==KeyEvent.VK_DOWN)
    	    player2.r.y += 10;
     
    	if(player2.r.y>=0)  
    	  if(e.getKeyCode()==KeyEvent.VK_UP)
    	    player2.r.y -= 10;
     
    	if((player2.r.x-10)>=(getWidth()/2))
    	  if(e.getKeyCode()==KeyEvent.VK_LEFT)
    	    player2.r.x -= 10;
     
    	if(player2.r.x+5<=getWidth()-10)
    	    if(e.getKeyCode()==KeyEvent.VK_RIGHT)
    	      player2.r.x += 10;
      }
    Sachant que r est un champ de ma classe Raquette, et est un point qui represente le coin haut-gauche de la raquette.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/07/2005, 17h40
  2. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13
  3. [SQL] problème pour faire ma requete
    Par seb.briet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/12/2004, 16h51
  4. [FLASH MX2004] Problème pour faire un bouton play
    Par melanie075 dans le forum Flash
    Réponses: 13
    Dernier message: 16/12/2004, 22h55
  5. [C#] Problème pour l'appel d'objet...
    Par AntiSAL dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/06/2004, 09h59

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