Page 1 sur 1
[..] Editeur de "cartes"
Posté : mar. 06 janv. 2015 11:41
par GhostLine
Bonjour à tous !
J'aimerai pouvoir faire ça en vrai :
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

Re: [..] Editeur de "cartes"
Posté : mar. 06 janv. 2015 13:59
par mikell
Si les images sont en jpg ou bmp ya pas besoin de GDI+, ça peut être fait facilement avec GUICtrlCreatePic et GUICtrlSetImage
Re: [..] Editeur de "cartes"
Posté : mar. 06 janv. 2015 15:45
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).
Re: [..] Editeur de "cartes"
Posté : mar. 06 janv. 2015 19:26
par sozary
Whaou jguinch! Vos enfants peuvent être fier de vous!

Re: [..] Editeur de "cartes"
Posté : mer. 07 janv. 2015 00:39
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
Code : Tout sélectionner
#pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico)
#include <GUIConstantsEx.au3>
Opt("GUIOnEventMode", 1)
Opt("MustDeclareVars", 1)
Global $gui
Global $taille[2] = [339, 339]
Global $pics[20][20][2]
Global $nbImagesMax = 4
Global $count = 0
$gui = GUICreate("", $taille[0], $taille[1])
GUISetOnEvent($GUI_EVENT_CLOSE, "quit", $gui)
GUISetState(@SW_SHOW, $gui)
For $y = 0 To UBound($pics, 1)-1
For $x = 0 To UBound($pics, 2)-1
$pics[$y][$x][0] = -1
$pics[$y][$x][1] = GUICtrlCreatePic("", $x*17, $y*17, 16, 16)
Next
Next
While(True)
For $y = 0 To UBound($pics, 1)-1
For $x = 0 To UBound($pics, 2)-1
$pics[$y][$x][0] = Mod($pics[$y][$x][0]+1, $nbImagesMax)
Local $retour = GUICtrlSetImage($pics[$y][$x][1], @ScriptDir & "\" & $pics[$y][$x][0] & ".bmp")
$count += 1
If($count >= 9556) Then
ConsoleWrite($count & " : " & $retour & @CRLF)
Sleep(1000)
EndIf
Next
Next
WEnd
Func quit()
Exit
EndFunc
Edit : avec les images ça sera mieux ^^
Re: [..] Editeur de "cartes"
Posté : mer. 07 janv. 2015 11:41
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) ?
Re: [..] Editeur de "cartes"
Posté : mer. 07 janv. 2015 16:46
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.
Re: [..] Editeur de "cartes"
Posté : mer. 07 janv. 2015 19:08
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 ?
Re: [..] Editeur de "cartes"
Posté : lun. 12 janv. 2015 10:08
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
