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 :

[SWING] map editor


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut [SWING] map editor
    Salut a tous !

    Je suis actuellement en train de créer un éditeur de map à la façon de RPG Maker. Je bloque actuellement sur le JFrame qui me permettrais de voir les tuiles sélectionnables. J'ai une image de départ (chipset) au format .PNG. Mon problème c'est : comment faire pour découper cette image ? Quelles sont en fait les méthodes/fonctions à utiliser à cet effet? J'espère que j'ai été clair.
    Merci d'avance.
    --
    "Qui fait le malin tombe dans le ravin"

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    JPanel plutot que JFrame (la frame ne sera que le container de l'editeur). Apres il te suffit de jouer avec la methode paintComponent() du panel pour dessiner ce que tu veux a l'ecran.

    Avec la souris (voir MouseListener et MouseMotionListener) tu vas, j'imagine, dessiner des formes carrees et/ou rectangulaires (voir Rectangle et Rectangle2D) de maniere cliquer-puis-tirer-pour-aggrandir-le-rectangle sur ton image source pour definir chacune de tes formes. Tu vas ensuite utiliser la methode getSubimage() de la classe BufferedImage pour recuperer l'image de chacune des sous-tiles.

    En cas de tile non-rectangulaire (ex: hexagones pour jeux de strategie ou losanges pour jeux en 3D isometrique) c'est pareil sauf que tu utiliseras plutot une methode de dessin de type cliquer-pour-ajouter-sommet-a-la-forme pour creer la forme du tile (voir Polygon et GeneralPath).

    Par contre apres, il va te falloir manullement modifier la sous-image pour mettre les pixels hors de la forme (puisque l'image est rectangulaire mais le tile ne l'est pas) en couleur transparente (voir la methode contains() de la classe Shape). Donc tu ne peux pas utiliser getSubimage() car avec cette methode les donnees sont partagees entre l'image source (la grande) et les images filles (les tiles crees avec cette methode). Tu peux :
    - soit utiliser la methode getRGB() prenant en parametre un tableau pour recuperer une portion des pixels (definits par la boite englobante de la forme choisie) de l'image et les mettres dans une nouvelle image avec la methode equivalenent setRGB().
    - soit en utilisant des translations peindre la zone selectionnee de l'image source dans une nouvelle image que tu auras creee (toujours a l'aide de la boite englobante de la forme choisie).
    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

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut
    Merci pour tes explications.
    C'est vrai que j'avais pas pensé à propos du JPanel au lieu du JFrame. Ce sera plus pratique. Par contre mes tiles vont être carrées. J'ai pas compris à partir du "Par contre"; Tu as voulu dire que je ne peux pas utiliser du tout la methode getSubimage ? Ou alors cette restriction ne s'appliquait-elle qu'au cas ou mes tiles n'auraient pas été carrées ? Je vais contiuer de fouiller du côté de Rectangle comme tu me l'as conseillé. Merci encore.
    --
    "Qui fait le malin tombe dans le ravin"

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Oui c'était dans le cadre des tiles non-rectangulaires car il t'aurais fallu modifier les tiles pour mettre certains pixels en couleur transparente.

    Citation Envoyé par javadoc
    Returns a subimage defined by a specified rectangular region. The returned BufferedImage shares the same data array as the original image.
    L'intérêt de getSubimage() c'est que les donnée de l'image sont partagées entre l'image source et les sous-image (chaque sous-image est une vue restreinte de l'image source). Ca occupe moins de mémoire ; mais si tu modifies un tile, cela peut donc se répercuter sur l'image source (et donc éventuellement sur d'autres tiles).

    Bon ça c'est surtout pour ton éditeur... après à toi de voir si au choix :

    - tu exportes chaque tile dans un fichier image séparé grace à ImageIO.

    - si tu ne conserves qu'une seule et même image qui sera lue par ton jeu et si tu exportes tes formes dans un fichier (txt, XML, ...) qui sera joint à l'image source.

    Cela veux dire aussi que si tu veux implémenter des trucs genre changement de palette, variation de la transparence, etc... ou toute autre opération succeptible de changer la valeur des pixels, alors oui il faudra quand même faire une copie "en dure" (pas avec getSubimage()) pour chacun des tiles.
    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 régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut
    ok, merci j'ai tout compris. Je vais donc bien me servir de getSubimage(), puisque je n'ai pas l'intention de faire de traitement sur les sous-images. Bonne journee bouye !
    --
    "Qui fait le malin tombe dans le ravin"

  6. #6
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 166
    Points : 91
    Points
    91
    Par défaut
    J'ai fait tout comme on m'a dit, j'ai fait dérivé des JPanel en ImagePanel qui sont en fait des composants/images que j'ajoute/affiche sur une JFrame. J'ai utilisé la méthode getSubimage() et tout est impec. Donc j'suis content.
    --
    "Qui fait le malin tombe dans le ravin"

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

Discussions similaires

  1. Constructeur d'expression du Map Editor
    Par hoshizora dans le forum Développement de jobs
    Réponses: 6
    Dernier message: 24/04/2012, 16h12
  2. Editeur de carte / map editor
    Par Scheb dans le forum Logiciels de création de jeux vidéo
    Réponses: 5
    Dernier message: 22/02/2011, 10h16
  3. localisation google-map swing
    Par hitlar73 dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 30/06/2009, 18h17
  4. conseil entre Swing, SWT et Visual Editor
    Par 18Marie dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 28/09/2006, 12h06
  5. Utilisation javax.swing.ButtonGroup dans Visual Editor
    Par inch dans le forum Composants
    Réponses: 3
    Dernier message: 16/12/2005, 16h25

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