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

Graphisme Java Discussion :

P.b Sprite et mousseListner : tout ce déplace en même temps


Sujet :

Graphisme Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 46
    Par défaut P.b Sprite et mousseListner : tout ce déplace en même temps
    Slt,
    Je veux créer un jeux de domino. J'ai crée ma class Domino et une class Sprite pour mieux gérer les déplacements de mé domino. Mais voila :
    je voudrais déplacer mon Sprite à l'aide la souris mais ça fonctionne pas
    Au lieu de bouger mon domino il bouge mon plateau (tapis)
    voici le code de mon 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
     
     
       public class Sprite 
    {
     
      protected Rectangle rectangle;
      //Emplacement du sprite
      private int x,y;
      private Image image;
      //Indique si le sprite est visible
      private boolean visible=true;
      public static final int DEFAULT_SPRITE_WIDTH=25;
      public static final int DEFAULT_SPRITE_HEIGHT=50;
     
      /**
       * Crée le sprite
       */
      public Sprite(Image image,int x,int y)
      {
        this.image=image;
        this.x=x;
        this.y=y;
        int width=DEFAULT_SPRITE_WIDTH;
        int height=DEFAULT_SPRITE_HEIGHT;
        rectangle=new Rectangle(x, y, width, height);
      }
     
     
      /* Renvoie la visibilité du sprite
       */
      public boolean estVisible()
      {
        return visible;
      }
     
      /**
       * Change la visiblité du sprite
       */
      public void setVisible(boolean visible)
      {
        this.visible=visible;
      }
    voici le code d'affichage
    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
     
    Tapis(Joueur[] joueurs) {
     
        lesjoueurs = joueurs;
        dominoV = new ImageIcon("C:\\image\\00.jpg");
        essai=new JLabel(dominoV);
        setLayout(null);
        this.addMouseListener(this);
        this.addMouseMotionListener(this);
     
      }
     
     
      /*********************************************************
     *        Partie actionlistener
     ********************************************************/
     
     public void mouseReleased(MouseEvent e) {
     
     
    setLocation( currentX,  currentY);
     repaint();
        }
     
        public void mouseEntered(MouseEvent e) {
        }
     
        public void mouseExited(MouseEvent e) {
     
    }
     
    //pour puvoir faire bouger l'objet je detecte si j'ai bien clické sur un objet
        public void mousePressed(MouseEvent e) {
        AncienAbs = e.getX();
        AncienOrd = e.getY();
     
        }//fin mousePressed
     
     
     
        // un click de bouton ajoute un rectangle dans la liste et 
    // le repaint le dessine 
        public void mouseClicked(MouseEvent e) {
         System.out.println("Clic en [" + e.getX() +
                             ", " + e.getY() + "]");
        }
     
     
        public void mouseMoved( MouseEvent e ){
        }
     
     
       public void mouseDragged( MouseEvent e )
       {
           currentX = e.getX();
           currentY = e.getY();
     
            System.out.println("IMAGE_MANIP - Dragged at x="+currentX+" y="+currentY);
            repaint();
       }
     
    /*********************************************************
    *               la partie de l'affichage
    **********************************************************/
    //  @Override
      public void paint(Graphics g) {
        super.paintComponent(g);
     
        Graphics2D g2d = (Graphics2D) g;
        //affichage du tapis
        File fichier0=new File("C:\\image\\Tapis.gif");
          try{
         image = ImageIO.read(fichier0);
      }catch(IOException e){
                return;
      }
        g2d.drawImage(image, 0, 0, null);
     
        //jeu du joueur sud 
     
     
        int posx = 175;
        int posy = 550;
        int nb = lesjoueurs[0].main.size();
     
         for (int v = 0; v < nb; v++) { 
          Domino ledomino =(Domino)lesjoueurs[0].main.get(v); 
          if (ledomino!=null){
         Image image=ledomino.getImage();
          Sprite img=new Sprite(image,posx,posy);
           g2d.drawImage(image, posx,posy,null);
                posx = posx + 25; 
          }
        }
    Si une personne aurait une explication elle sera la bien venu

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    public void mouseReleased(MouseEvent e) {
    setLocation( currentX, currentY);
    repaint();
    }
    C'est normal, ici tu modifies la position du tapis avec setLocation.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 46
    Par défaut
    Je daccord avec toi mais je n'arrive pas à trouver la commande exact pour que ce soit les dominos qui bougent. C la l'objet de ma question

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Dans ce cas ta question initiale etait mal posee.

    A la reception de l'evenement de pression de bouton de la souris, tu parcoures ta liste de dominos pour trouver celui se trouvant aux coordonnees X, Y. Ce domino, s'il y en a un, devient le domino courant/selectionne et tu reaffiche. Lors que la souris est tiree a travers le tapis, tu met a jour les coordonnees X, Y du domino courant (s'il existe) et tu reaffiche. Lorsque la souris est relachee, tu positionee une derniere fois ton domino selectionne (s'il existe) et nullifie la reference du domino courrant (il n'y a alors plus de domino selectionne) et reaffiche...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 46
    Par défaut
    Ben ! j'y ai pensé mais il me faudrait faire un calcul du style lors d'un clic[si e.getx se trouve entre le x et gety se trouve entre le y d'un objet de ma liste de domino : retouner] et je trouve ça trop long. c'est pour cela que je voulais utiliser un sprite et ensuite mettre un sprite _cursor (hidden) sous le curseur de la souris et ensuite la détection d'une collision entre _cusor et un sprite(domino) me renvera l'id de ce dernier.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Je n'ai rien compris a ce que tu explique sur la fin, mais je ne vois pas en quoi le parcours de la liste de domino pour trouver sur lequel tu es est long (meme si c'est pour changer le curseur). Ces parcours sont facilites par l'utilisation judicieuse et astucieuse des boites enblogantes rectangulaires des objets qui permettent d'eviter de faire des calculs de collision fastidieux (nottament si les images formant tes dominos ne sont justement pas de forme rectangulaire mais contiennent des parties vides/transparentes supposees ne pas appartenir au domino lui-meme).

    Le(s) seul(s) moment ou tu dois reellement utiliser un algorithme de collision de sprite, c'est quand tu es effectivement a l'interieur de la boite enblobante d'un domino. Les methodes permettant de determiner si on se trouve a l'interieur d'une surface rectangulaire (les methodes contains(), intersects(), etc... d'un Rectangle ou d'un Rectangle2D) s'executent rapidement et surtout... existent deja (dans les classe metionnees).

    Quand a la detection elle-meme, une fois dans la boite englobante, tu as divers methodes a ta disposition, comme verifier le niveau de transparence du pixel de l'image du domino ou joindre une image masque opaque (2 couleur N&B) a celle du domino permettant de specifier quand on se trouve dedans ou dehors).

    Reste la colision, pour eviter qu'un domino ne "rentre" dans un autre. La il faudra chercher un peu plus en avant avec ce qui se fait deja dans les jeux videos.

    Encore une fois le but n'est pas d'eviter de parcourir la liste (ou l'arbre) mais de restreindre les calculs lourds aux endroits ou on en a reellement besoin.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Grant sur toutes les tables en même temps
    Par jer64 dans le forum SQL
    Réponses: 3
    Dernier message: 25/09/2006, 08h59
  2. Réponses: 9
    Dernier message: 14/12/2005, 22h05
  3. [JFrame] Désiconifier toutes les autres fenêtres en même temps
    Par stoukou dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 07/10/2005, 13h01

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