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 :

Image et jeu


Sujet :

AWT/Swing Java

  1. #1
    Invité
    Invité(e)
    Par défaut Image et jeu
    Bonjour, je suis en DUT info et pour ne pas m'ennuyer le soir je me suis lancé dans un jeu de plateau, le backgammon.
    Et mon manque de connaisance me fait me poser des question. Mon probleme ce trouve sur la gestion des images avec SWING en gros j'ai une image pour le plateau et image pour chaque pion et je sait pas trop si je doit mettre une image par Jpanel ou toutes les images dans le meme JPanel aussi j'ai pas trouver de methode pour bouger une image dans la classe ImageIcon d'ou ma question sur une image par Jpanel. Est-ce que je doit detruire l'image pour la reafficher quelque pixel plus loin ce qui me parrait très gourmand. Merci pour vos reponses.

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 57
    Points : 93
    Points
    93
    Par défaut
    Il faut dessiner dans un seul panel sinon forcément il manquera des éléments dans la vue. Autrement, tu charges initialement tes images dans une BufferedImage et quand tu dois déplacer une image je pense qu'il faut déterminer les pixels du background qui étaient occultés par l'image mais ne le seront plus après déplacement puis repeindre tous les pixels recouverts par l'image après déplacement.

    En principe ton image est rectangulaire, et l'intersection de deux rectangles est un rectangle éventuellement vide (enfin dans ce cas-là, car l'un ne sera jamais incliné par rapport à l'autre). Or un rectangle est facilement défini par les coordonnées de deux sommets non consécutifs donc l'étape de détermination des pixels du background qui vont redevenir visibles doit juste te renvoyer un couple de points si l'intersection existe, et null sinon.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu peux dans un JPanel, afficher une image de fond, et afficher par dessus des images de pions. Pour le déplacement, il n'y a de problème à se poser : il faut toujours bien avoir en tête qu'on ne dessine pas dans SWING comme sur du papier. La méthode paint() et les méthodes qui sont appelées par la méthode paint() dessinent dans un contexte graphique (le paramètre de classe Graphics de ces méthodes). Cette méthode est invoquée par SWING quand SWING le juge nécessaire ou quand on lui demande de le faire (par repaint()) : le code de la méthode paint() doit simplement dessiner les différents éléments dans l'état actuel : dans le fond, le plateau, et tous les pions à l'endroit (des coordonnées) où ils se trouvent au moment où le dessin est fait.

    Pour déplacer une pièce, on change simplement les coordonnées du pion et on appelle repaint() : en faisant ça, on dit à SWING qu'on a changé quelque chose et que si éventuellement il n'avait pas déjà décidé de redessiner le panel de lui-même, il faudrait qu'il le fasse (sinon SWING ne peut pas savoir que le changement de coordonnées a un impact sur la façon dont le jeu est dessiné. Et, en conséquence, le panel va se redessiner, donc la méthode paint() va être appelée, et comme les coordonnées ont changé, les pions seront dessinés à leur nouvelle position, et on verra qu'il bouge. Si on modifie les coordonnées progressivement entre, une position de départ et une position d'arrivée, dans un thread autre que le thread graphique (EDT), en demandant un repaint() après chaque modification, on verra le pion se déplacer progressivement.

    Inutile de détruire les images. On les charges au début, au lancement du programme, et on les utilise. Pour la transparence (la partie autour du pion qui est rond, alors qu'une image c'est toujours rectangulaire), autant utiliser des png avec un fond transparent, ou éventuellement des images avec masque.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci pour vos reponses. Apres avoir essayer divers chose j'ai compris qu'il fallait simplement modifier les coordonées de mon image dans ma methode surchargé paintComponent() et que à chaque fois que swing comme tu le disais joel, redessinait tous mon panel.
    Autre petite question pour deplacer mon image avec la souris je pensait pour simplifier les choses mettre chaque jeton dans un JLabel comme sa je peux affecter un listener.
    Merci encor de vos reponses

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par douney Voir le message
    Autre petite question pour deplacer mon image avec la souris je pensait pour simplifier les choses mettre chaque jeton dans un JLabel comme sa je peux affecter un listener.
    Oui, tu peux procéder comme ça. Il suffit que tes JLabel soient transparents (setOpaque(false)). Il te faudra également supprimer le layout manager du panel du plateau, et gérer la placement des labels pions "à la main".

    Mais tu peux également, assez facilement, mettre les listeners sur le JPanel plateau, et détecter le pion sous la souris, en parcourant la liste de pions, et en utilisant la méthode contains de Shape (ton pion est un rond) pour déterminer quel pion est à l'endroit des coordonnées de la souris.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai regarder la doc de l'interface shapes, j'ai encore un peu de mal avec la notion d'interface mais si j'ai bien compris, le plus simple pour mettre en oeuvre ta seconde solution serait de definir un Objet Ellipse2D.Double qui lui implémente l'interface shape pour chaque pions et ainsi pouvoir utiliser la methode contains qui serai déja défini dans la classe Ellipse2D.Double.

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, pour Ellipse2D.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Un set d'images de jeu de cartes.
    Par Luke spywoker dans le forum Contribuez
    Réponses: 8
    Dernier message: 03/02/2015, 07h58
  2. Utilisation d'images un jeu sous licence GPL
    Par ZouBi dans le forum Droit
    Réponses: 2
    Dernier message: 11/09/2011, 19h11
  3. Déplacer image dans jeu de plateau
    Par kawasaki dans le forum Débuter
    Réponses: 10
    Dernier message: 29/02/2008, 15h48
  4. Affichage d'images pour jeu de cartes
    Par sebcrash dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/02/2008, 09h35
  5. [Images] représentation d'une carte pour jeu en php
    Par maniaco_jazz dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 29/11/2005, 10h41

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