[..] Editeur de "cartes"

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

[..] Editeur de "cartes"

#1

Message par GhostLine »

Bonjour à tous !

J'aimerai pouvoir faire ça en vrai :

Image

J'en aurai besoin dans un projet plus global qui me permettra de créer une carte de lieux réels.

Le fonctionnement est simple :
1- on clique sur une des images sous la "carte"
2- tant que l'on clique sur un des carrés de la grille sur la "carte", l'image de ce carré est remplacée par celle sélectionnée en 1-
3- lorsque l'on quitte, la carte est sauvegardée dans une matrice
(idéalement, si le fond "vert" pouvait n'être qu'un fond, définissable à la main, ce serait génial)

Vu que je n'ai AUCUNE expérience de l'utilisation de GDI+, et que je pressent que c'est la meilleure méthode dans mon cas, je vous appelle à l'aide :)

Merci !

Edit: les images font 32x32, et ont été honteusement pompées aux jeux Zelda :)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Editeur de "cartes"

#2

Message par mikell »

Si les images sont en jpg ou bmp ya pas besoin de GDI+, ça peut être fait facilement avec GUICtrlCreatePic et GUICtrlSetImage
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Editeur de "cartes"

#3

Message par jguinch »

Mikell à raison : ce serait se compliquer la vie d'utiliser GDI+...
J'avais fait un Puzzle il y a quelques temps, peut-être que ça peut t'aider (pour faire du drag&drop) : http://www.autoitscript.fr/forum/viewto ... 412#p74412

Sinon, je pense qu'il te suffit d'un tableau 2D, dont le nombre de lignes et de colonnes dépendra du nombre de cases de ta carte.
Chacune de tes "formes" correspondra à une valeur (par exemple : 0 pour vide, 1 pour bloc, 2 pour porte, 3 pour fenêtre ...)
I te restera donc à stocker ces valeurs dans le tableau et sauvegarder/charger ton tableau sous forme de chaîne dans ton fichier de sauvegarde (ou autre).
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
sozary
Niveau 6
Niveau 6
Messages : 274
Enregistré le : lun. 20 janv. 2014 19:17
Status : Hors ligne

Re: [..] Editeur de "cartes"

#4

Message par sozary »

Whaou jguinch! Vos enfants peuvent être fier de vous! :D
"Là où la volonté est grande, les difficultés diminuent.", Niccolò Machiavelli
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2127
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Editeur de "cartes"

#5

Message par TommyDDR »

Si vous n'avez pas beaucoup de changement d'image à faire utilisez GUICtrlCreatePic et GUICtrlSetImage, sinon... c'est un autre problème.
J'ai remarqué que le GUICtrlSetImage était limité...
En effet, au bout d'un certain nombre d'utilisation de GUICtrlSetImage la fonction retourne une erreur (au bout de 9559 images chez moi).

Cela est du aux nombre limité de GDI Handle (<10 000 par processus) ainsi qu'une mauvaise gestion de GUICtrlSetImage qui ne libère pas le GDI handle de l'ancienne image.

Calcul :
Fenêtre de base : 37 GUI Handle
La 1ere pic utilise 3 GUI Handle de plus que les autres (je ne sais pas pourquoi mesure, faite avec process explorer)
1 GUICtrlSetImage utilise 1 GUI Handle (2 GUI Handle si la pic n'a pas encore d'image, faite avec process explorer)

Donc :
37 + 3 + 20*20 = 440 (correspond à créer une fenêtre avec 20*20 pic et en anticipant le fait que 2 GUI Handle seront pris lors du 1er GUICtrlSetImage).
9999-440 = 9559 ce qui correspond bien à ce que nous avons obtenu.

Si vous voulez tester :
► Afficher le textecode
Edit : avec les images ça sera mieux ^^
Fichiers joints
a.zip
(1.1 Kio) Téléchargé 86 fois
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Editeur de "cartes"

#6

Message par GhostLine »

Bonjour à tous, et merci pour ces réponses !

Je pense que je risque de tomber dans le cas que décrit TommyDDR : en effet, j'aimerai que la carte s'agrandisse automatiquement si l'on screene à gauche ou à droite, et du coup, rien que parce que chaque case de "fond" va prendre un handle, je vais vite me retrouver coincé ... il n'y a aucun moyen de remettre à zéro le nombre de handle (peu importe que cela nécessite de fermer la fenêtre contenant la "carte" et de la rouvrir) ?
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2127
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Editeur de "cartes"

#7

Message par TommyDDR »

Pour "contrer" ce problème assez simplement je faisait un GUICtrlDelete suivi d'un GUICtrlCreatePic au lieu d'un GUICtrlSetImage, mais il vous faudra pour cela connaitre les coordonnées.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Editeur de "cartes"

#8

Message par jguinch »

Pour le fond, tu peux aussi créer une grande image avec uniquement les cases de fond et ajouter par dessus tes autres images, non ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Editeur de "cartes"

#9

Message par GhostLine »

Merci pour tout vos conseils avisés : je vais me lancer ASAP sur ce projet :) J'espère que j'aurai un truc sympa à mettre en ligne d'ici quelques semaines :)
Répondre