Page 1 sur 1

ScrollGadget :: Editeur map 2D probléme :(

Publié : jeu. 06/oct./2005 23:15
par garzul
Bonjour !

J'ai un probléme avec mon editeur de map (pour un rpg). Voici l'éditeur (fourni avec 2 charset) : http://garzul.tonsite.biz/DOM/D.O.M_EDITEUR.zip

Essayer d'ouvrir un charset (en cliquant sur charger un chipset) puis ensuite chargez un autre (différent) et essayer ensuite de descendre l'ascenseur vite ! Vous voyez que l'autre chipset apparait dérriere :( je ne sias pas comment faire pour resoudre ce bug !!

Voici ce que j'utilise pour le rafraichissement et le chargement / placement du charset !!! :

Code : Tout sélectionner

; - CallBack pour rafraichissement !
Procedure Call(Hnd,msg,wParam,lParam)
  Resultat = #PB_ProcessPureBasicEvents
  If Hnd = WindowID(#Window)
    Select msg
      Case #WM_MOVE
        InvalidateRect_(Hnd,@Re,#False)
      Case #WM_PAINT
        InvalidateRect_(Hnd,@Re,#False)
    EndSelect
  EndIf
  ProcedureReturn Resultat
EndProcedure 


; - Charge un chipset
Procedure OpenChipset()

      Chipset$ = OpenFileRequester("Choisissez un chipset à charger :","data\Chipsets\","Fichiers Chipsets|*.png;*.bmp;*.jpg",0)
       
        If Chipset$
       
          #position_scrolling = 0
     
          ;FreeImage(#ChipsetPNG)
          If IsImage(case_chipset)
            FreeImage(case_chipset)
          EndIf 
          
          case_chipset = LoadImage(#ChipsetPNG,Chipset$)
          i              = 0
          x              = 0
          y              = 0
          case_chipset_x = 0
          case_chipset_y = 0
          l_image        = ImageWidth()
          h_image        = ImageHeight()
          cal_l_image    = l_image
          cal_h_image    = h_image
          
          ;ResizeGadget(#AREACHIP,0,28, 205,504)
          ;ResizeGadget(#AREACHIP,0,27, 205,504)
          
          
            If l_image >= 32 And h_image >= 32

              Repeat
                
                ;For ImageGadgetg(i) = 0 To ImageGadgetg(i)
                
                
               ; Next ImageGadgetg(i)
                
                image(i) = GrabImage(#ChipsetPNG,#PB_Any, x, y,32,32)
                
                OpenGadgetList(#AREACHIP)
                     ImageGadgetg(i) = ImageGadget(#PB_Any, x, y, 36, 36, UseImage(image(i)), #PB_Image_Border)
                CloseGadgetList()
               
                cal_chipset = i%5
               
                If cal_chipset    = 0
                   case_chipset_x = 0
                   case_chipset_y + 32
                Else
                   case_chipset_x + 32
                EndIf
     
                cal_l_image-32
                x + 32
               
                If cal_l_image = 0
                   cal_l_image = l_image
                   cal_h_image-32
                   x = 0
                   y + 32
                EndIf
                i + 1
                
                ;ResizeGadget(#AREACHIP,0,27, 205,506)
                ;ResizeGadget(#AREACHIP,0,27, 205,504)
          
                UpdateWindow_(GadgetID(#AREACHIP))
                
             Until i = 1000

             SendMessage_(GadgetID(#AREACHIP), #WM_VSCROLL, #SB_THUMBTRACK | (#position_scrolling << 16), 0)
             
           EndIf
    EndIf  
EndProcedure

Publié : ven. 07/oct./2005 11:27
par Backup
le code que t'as mis demande tout un tas de parametre a reglé
(les constantes) ect .. bref j'ai la bulle d'avoir a chercher ce qui manque pour le faire marcher !
avant mem de regarder le probleme que tu cite , faut deja refaire le code ! :D

presentez un code qui fonctionne un minimum , sinon vous aurez pas grand monde pour vous depanner !:D

Publié : ven. 07/oct./2005 16:12
par bernard13
garzul et comtois sont les meilleurs createurs d'editeur de map que je connais sur PB

Bravo
et grand merci a vous 2
j'ai appris comment on crée un simple editeur de map2d

merci les amis

Publié : ven. 07/oct./2005 16:31
par garzul
Dobro : Tes pas chiant :D (j'avais pensé que des pros comme vous heu puisse identifié le probléme direct non je déconne :DD) bon voila la source : http://garzul.tonsite.biz/DOM/Src-Editor.rar

Sinon merci Bernard 13 :) (heu je t'ai rien appris moi avec mon bout de code lol :p remarque maintenant ta les sources de l'editeur lol)

Publié : ven. 07/oct./2005 17:08
par bernard13
comtois avais mis en ligne un tuto sur un editeur de map2d et comme ça que j'ai appris

Publié : ven. 07/oct./2005 20:28
par garzul
Ouep mais moi c'est un peu différent.

Publié : ven. 07/oct./2005 21:44
par comtois
juste une piste; je n'ai pas regardé dans le détail

Code : Tout sélectionner

    OpenGadgetList(#AREACHIP)
                     ImageGadgetg(i) = ImageGadget(#PB_Any, x, y, 36, 36, UseImage(image(i)), #PB_Image_Border)
                CloseGadgetList()
Tu utilises #PB_Any pour tes imageGadget ,donc tu en ajoutes des nouvelles à chaque fois que tu passes dans la fonction OpenChipset() !

J'ai modifié le code comme ça :

Code : Tout sélectionner

                ;Supprime les imagegadget 
                If  IsGadget(ImageGadgetg(i))
                	FreeGadget(ImageGadgetg(i))
                EndIf
                
                OpenGadgetList(#AREACHIP)
                     ImageGadgetg(i) = ImageGadget(#PB_Any, x, y, 36, 36, UseImage(image(i)), #PB_Image_Border)
                CloseGadgetList()
Avec #Pb_any ,le mieux c'est d'utiliser une liste chainée pour stocker les éléments créés .

Publié : sam. 08/oct./2005 7:11
par garzul
Oué Comtois ca marche :) J'avais penser au problémes que pouvez causer #PB_Any mais je ne savez pas comment le résoudre sachant que j'avais essayer différente configuration pour liberer le dernier charset de la mémoire mais aucune n'avais pas marcher (erreur) donc merci à toi :)