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

2D Java Discussion :

Créateur de map (j'aimerais y aller pas à pas)


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut Créateur de map (j'aimerais y aller pas à pas)
    Bonjour tout le monde,

    Je débute complètement dans le domaine du graphisme sous java et j'aimerais réaliser un programme pour gérer des maps.

    Ma première difficulté est au niveau du cahier des charges qui m'impose d'avoir non seulement une image qui apparait (en fond) mais aussi des calques personnalisable en nom et en position. Un calque pouvant être visible ou non et bien entendu et verrouillé ou non. Il me sera nécessaire d'avoir des répertoires virtuels contenant certains calques déplaçable en drag and drop. (Le drag et drop peut aussi se faire via des boutons, peu importe).

    Le comportement d'un calque devra être le suivant.

    -Si la souris est sur une zone vide (sur le calque sélectionné), si on appuie sur le bouton gauche on pourra déplacer la carte de base ainsi que ses calques en même temps.

    -Dans le cas ou on clique sur un bouton de création, lorsque on clique sur un endroit vide de la carte on fera apparaitre une popup disant création d'un point, création d'une note, création d'un groupe PJ, création d'un groupe PNJ, création d'un PJ, création d'un PNJ, création d'un village/ville, création d'un point particulier.

    Une fos le clique fait, une boite apparaît pour saisir les donnés, lorsque on clique sur Ok, on enregistre le tout pour passé au second point etc..

    -Si la souris est sur un point et que nous ne cliquons sur rien, il faudra donc
    apparaitre une popup permettant de visualisé les données saisies.
    -Si la souris est sur un point et que nous cliquons sur le buton gauche, à ce moment là apparit un menu disant modifier le point, déplacer le point, supprimer le point.

    En outre il devra y avoir une multitude illimitée de points dans un calques et on autorisera bien entendu plusieurs calques.

    Mon premier souci est de trouver un composant simple à placer dans un jScrollPane afin de permettre d'afficher les calques et de pouvoir les manipuler.
    Mon second souci est liée à la map elle même. Doit-on avoir une carte mettons au format PNG avec un fichier properties par calque, ou un seul properties pour l'ensemble des points et des donnés et des calques ?

    Enfin j'aimerais y arriver pas à pas, c'est à dire savoir quel composant, essayer de l'utilisé, trouvé des codes approchants et finir par arrivé à quelque-chose. Bien entendu le principal est de comprendre et de faire en sorte que ça soit instructif. J'entends par là aussi que j'aime bien quand un code est commenté et qu'il deviens du coup plus clair.

    Sur ce, ne prenez pas ce post comme une demande de tout mâché ni de pensé de moi que j'aimerais tout savoir. Je cherche juste à apprendre et avancer dans mes idées d'applications. Celle-ci étant depuis plus d'un ans dans un dossier qui n'en fini pas de demander des contraintes.

    Sur ce, je vous remercie pour votre compréhension et espère vraiment que tout ne sera pas mal pris.

  2. #2
    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
    Citation Envoyé par Microbulle Voir le message
    Mon premier souci est de trouver un composant simple à placer dans un jScrollPane afin de permettre d'afficher les calques et de pouvoir les manipuler.
    Tes besoins sont vraiment spécifiques, de fait je doute qu'il existe un composant qui convienne réellement à ce que tu attends. En fait il existe bien des composants de carte, mais ce sont plutôt des composant orienté tiles.

    De fait il va te falloir mettre les mains dans le cambouis et créer ton composant à partir de rien.

    Avant même de créer ton composant tu devrais plutôt faire une modélisation des classes correspondant à la logique de ton projet via UML, ainsi que la classe qui regroupera toutes tes informations qui servira de modèle à ton composant graphique (classe qui regroupera toutes les données nécessaires au composant, c'est à dire les divers éléments, genre point/pnj mais aussi l'organisation des calques et ainsi de suite). Donc commence par analyser tous les éléments devant intégrer ta carte, toutes les propriétés qui leur sont nécessaires et ainsi de suite pour réaliser à minima un diagramme de classe.

    Puis une fois ceci modélisé correctement et codé, va falloir que tu plonges dans les joies de Java2D pour réaliser le composant en lui même. En effet tu ne trouveras pas de composant réalisant ce que tu cherches, donc ce sera à toi de développer ce composant. Autant dire qu'il y a du boulot, et que tu vas devoir augmenter ton niveau en java d'un bon niveau.

    Les notions de Drag&Drop viendront à la fin, ce sera vraiment la dernière couche.

    Citation Envoyé par Microbulle Voir le message
    Mon second souci est liée à la map elle même. Doit-on avoir une carte mettons au format PNG avec un fichier properties par calque, ou un seul properties pour l'ensemble des points et des donnés et des calques ?
    En ce qui concerne le stockage de tes données, tu ferais mieux de définir quelque chose à base d'un fichier un poil plus structuré que du properties. En l'occurence du XML, ou alors une base de données embarquées. Tu stocke dedans les noms de tes fichiers images (voir même un format sprite, c'est à dire regrouper toutes les petites images en une grande, et de découper en suite ce qui a tendance à être plus rapide pour les charger de par la suite, donc dans ce cas ce sont les coordonnées de l'image qui sont stockées, enfin ça ce sont des détails d'implémentation). De fait le fichier XML reproduira les structures de données des classes que tu a modélisés ci dessus, a quelques aménagements près).


    Citation Envoyé par Microbulle Voir le message
    Enfin j'aimerais y arriver pas à pas, c'est à dire savoir quel composant, essayer de l'utilisé, trouvé des codes approchants et finir par arrivé à quelque-chose. Bien entendu le principal est de comprendre et de faire en sorte que ça soit instructif. J'entends par là aussi que j'aime bien quand un code est commenté et qu'il deviens du coup plus clair.
    Malheureusement la théorie des bouts de codes piochés à gauche ou à droite, ça marche vaguemenent pour des petits sites perso bricolés à base de php et javascript. Mais pour des développements d'amplitude supérieure comme ce que tu cherches à faire, c'est l'autoroute pour la dérive, les bugs dont on ne comprend pas l'origine et ainsi de suite.


    Dernier conseil, arme toi d'un dictionnaire et mets toi un tant soit peu à l'anglais. En effet, au final tu gagneras du temps à comprendre un peu mieux l'anglais, car un majeure partie des ressources java sont disponibles en anglais. Il existe de fait des ressources françaises (par exemple le livre suivant: http://java.developpez.com/livres/?p...op#L2212120192)

    Toutefois, rien que pour une bonne compréhension de la javadoc un tant soit peu d'anglais est nécessaire.

    Et surtout, ne te jette pas tête baissée dans le code, pense modélise, fait des retours sur ton code précédent, travaille par itérations et ainsi de suite.

  3. #3
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Et bien je suis en tout point d'accord avec ce que tu a mis Sinok.

    Je ne comptais pas me lancé tête baisser. C'est aussi pour ça que j'ai fait ce post avec le lourd cahier des charges.

    Monter le code d'un niveau ne me dérange pas tant qu'on m'explique un temps soit peu comment ça fonctionne. Je veux dire par là qu'autant il m'arrive de prendre tout prêt par manque de temps, autant là, je suis totalement à l' opposé.

    Faire de l' UML, ou encore en bon français une représentation graphique de qui fait quoi. Avec la robotique j'en ai déjà fait beaucoup. Donc il ne sera pas gênant de regardé un modèle (oui par ce que si on va par là, on peut aussi faire dans les détails), puis ensuite créer chaque petit modules, les mettre en classe, comprendre par des algorithmes et enfin codé le soft.

    Créer mon propre composant est bien sympathique et me convient parfaitement. Dans ces cas là, faut-il que ça soit dans une classe, et si oui à ce moment là, est-ce que ça le rends portable sur d'autres projets ? Dans ces cas là pourquoi ne pas le rendre dès le départ open-source afin que tout le monde puisse l'utilisé ?

    Le XML ma beaucoup rebuté dans le c++ auparavant et je n'ai jamais vraiment réussi à m'en servir. Donc la il va falloir que j'apprenne et que je face comme les properties une classe de gestion. J'ai fait gestionProp pour les properties, je ferais GestionXML pour les XML. D'ailleurs si des je puis me permettre je fais toujours comme ceci concernant mes fichiers.

    Méthodes
    createPath() Créer un répertoire si nécessaire. Déjà fait et éprouvé ca sera facile ça.

    createXML() créer un xml vide (vide mais avec juste l'entête et les balises <xml></xml> + type de codage, perso je reste UTF-8).

    deleteXML() Vise à supprimer une ligne à partir d'un nom exact de valeur (la je ne suis pas sur que c'est vraiment faisable)

    getSelectXML() cherche à retourné la valeur d'ont le nom est donné (genre <infos>toto</infos> affichera à partir du nom infos, toto)

    updateXML() qui permettra de mette à jour une valeur dont le nom est donné (genre <infos>toto</infos> avant de changer la valeur pour <infos>tata et titi</infos> après en avoir fait la modif via updateXML())

    validPath() qui renvoie false / true en fonction du chemin s'il est vrai ou faux.

    En gros c'est ce que je compte faire dans ma classe XML. Je n'ai pas dit qu'elle était complète, il manque surement des choses à voir dans la section xml.

    Je suppose sinok, quand tu me dis que le XML peut être la solution, c'est que nous aurions alors dedans ceci.
    xml
    entête
    map -> chemin de la carte
    calque 1
    contenu du calque 1
    calque 2
    contenu du calque 2
    points
    point 1
    info point 1
    bon j'ai pas fermé volontairement juste pour l'idée mais je pense que tout le monde aura compris.

    A partir de tout ça je me lancerais dans l'UML du projet

    Un dernier point, faut-il que je laisse ce post pour l'intgralité du projet ou je suis vraiment obliger de faire plusieurs posts dans différentes sections ?

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Concernant la vue de la map en elle-meme, deux pistes evidentes :
    • Un JLayeredPane qui affiche un JComponent / JPanel par calque. Ici, afficher / cacher des calques signifie juste appeler setVisible() sur la couche appropriee.
    • Un unique JComponent / JPanel qui affiche tous les calques (definir une entite Layer avec toutes les methodes de rendu appropries). Ca reste super rapide a implementer, un peu moins a optimiser (utiliser les methodes classique avec un champs dirty)


    Dans tous les cas utiliser les optimisations habituelles de rendu sous Swing : images compatibles, rendu partiel par zone de clip, eviter de redessiner inutilement les calques non-modifies, si la memoire le permet cacher les calques vectoriels ou necessitant des calculs pour etre rendu en un calque bitmap quand ils ne sont pas modifies.

    Il faudra implementer la recherche en profondeur pour gerer les clics et recuperer le calque actif, selectionner l'objet (si calque reactif contenant des objets selectionnables) et les actions applicables (pour construire le popup).

    Concernant la gestion des calques, classique soit une JList soit un JTree comme dans n'importe quel logiciel de dessin, vectoriel, SIG.
    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 éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    Citation Envoyé par bouye Voir le message
    Concernant la vue de la map en elle-meme, deux pistes evidentes :
    • Un JLayeredPane qui affiche un JComponent / JPanel par calque. Ici, afficher / cacher des calques signifie juste appeler setVisible() sur la couche appropriee.
    • Un unique JComponent / JPanel qui affiche tous les calques (definir une entite Layer avec toutes les methodes de rendu appropries).

    Effectivement, je ne voyais pas cela aussi simple.

    Citation Envoyé par bouye Voir le message
    Ca reste super rapide a implementer, un peu moins a optimiser (utiliser les methodes classique avec un champs dirty)
    Par contre, rien que pour ça, je pense d'abord monter un diagramme UML, et voir la création à la main d'un composant graphique. On ne me retirera pas l'idée que si je fais à la main ce composant, ça sera plus long mais beaucoup plus efficace.

    Libération de mémoire, c'est une des grosses parties. Au démarrage de l'application, on cherche le premier calque, on le place au fond, on cherche l'image, on la met dans le calque 1. On prends le calque 2, on cherche les points x, y, son nom et indice, on le place sur la carte, ainsi de suite. Pendant cette phase, peut-être que j'ajouterais une progress bar. Par contre, on a pas tout à passé en paramètres.

    Effectivement on ne chargera les donnés du points qu'à partir de son identification et sur passage de la souris, si le calque autorise la popup.
    Dans une map, je vais avoir certains calques avec que peu de points mais mobiles. Sur d'autres les points sont fixe. Donc je verrait avec le temps s'il faut que nous limitions le nombre de calques et de points.

    Une chose qui m'inquiète, c'est que peut-il arrivé en cas de dépassement de mémoire sous java ?

  6. #6
    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
    Bah, ouais. De fait la JVM est lancée avec un montant maximum de mémoire qu'elle peut utiliser, spécifié par le paramètre -Xmx de l'exécutable java.

    Ensuite dans ton cas les histoires de débordement mémoires, ne t'en préoccupe pas pour le moment, les optimisations viendront quand tu auras déjà quelque chose de fait. (premature optimisation is the root of all evil - désolé pour l'anglais, mais c'est un classique du genre)

Discussions similaires

  1. [Google API Maps] Carte qui ne s'affiche pas
    Par Mister Jingles dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 08/12/2013, 19h27
  2. Map et generics, ça ne passe pas
    Par DevServlet dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 22/09/2011, 16h40
  3. Contactée par une SSII à 31 ans : y aller ou pas ?
    Par lafeedesbois dans le forum SSII
    Réponses: 17
    Dernier message: 10/07/2007, 21h07
  4. Réponses: 27
    Dernier message: 25/08/2004, 22h30
  5. Réponses: 3
    Dernier message: 09/10/2002, 11h35

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