Page 1 sur 1
Disparition magique d'un dessin de fenêtre
Publié : jeu. 27/juil./2006 19:38
par Joubarbe
J'ai inséré ce code dans une boucle principale :
Code : Tout sélectionner
If DrawMap = 0
StartDrawing(WindowOutput(#fenetre_gamescreen))
Box(150,15,850,730,RGB(0,0,0))
For x = 1 To 500
Plot(Random(850) + 150, Random(730) + 15, RGB(200,200,200))
Next
StopDrawing()
DrawMap = 1
EndIf
Je suis toujours débutant et je découvre que lorsque je déplace la fenêtre aux extremités de l'écran, le dessin de la fenêtre disparait. Bug de PureBasic ? Mauvais code de ma part ?
Merci
Publié : jeu. 27/juil./2006 20:14
par Dr. Dri
en fait il faudrait redessiner à chaque fois que la fenetre est rafraichie... fais une recherche sur le forum ca a déjà du etre évoqué
Dri
Publié : jeu. 27/juil./2006 20:21
par Flype
une solution, ce n'est pas la seule :
un des évenement renvoyé par WaitWindowEvent() est #PB_Event_Repaint
par ex, avec ton exemple de l'autre question, çà donne çà :
Code : Tout sélectionner
Procedure GF_GameScreen()
;Chargement des médias
;Définitions des constantes
;Fenêtres
Enumeration
#fenetre_gamescreen
EndEnumeration
;Gadgets
Enumeration
;menus
#menu_main
#menu_item_save
#menu_item_backtomenu
#menu_item_quit
;frames
#frame_main
;boutons
#bouton_statistiques
EndEnumeration
;Définitions des variables
;Fichiers inclus
;Déclaration des procédures
;===========================
;INTERFACE
;===========================
;Dessin de l'interface (une grande frame 850*740 à droite, un bouton écran à gauche et une frame information en bas)
If OpenWindow(#fenetre_gamescreen,1,1,1024,768,"Galactic Fantasy",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
If CreateMenu(#menu_main,WindowID(#fenetre_gamescreen))
MenuTitle("Fichier")
MenuItem(#menu_item_save,"Sauvegarder la partie")
MenuItem(#menu_item_backtomenu,"Revenir au menu principal")
MenuBar()
MenuItem(#menu_item_quit,"Quitter la partie")
EndIf
If CreateGadgetList(WindowID(#fenetre_gamescreen))
Frame3DGadget(#frame_main,150,15,850,740,"",#PB_Frame3D_Flat)
ButtonGadget(#bouton_statistiques,15,15,40,30,"Statistiques")
EndIf
EndIf
;Mise en place de l'interaction avec l'interface
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #bouton_statistiques
Print("yo")
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #menu_item_quit
Event = #PB_Event_CloseWindow
EndSelect
Case #PB_Event_Repaint
If StartDrawing(WindowOutput(#fenetre_gamescreen))
Box(150,15,850,730,RGB(0,0,0))
For x = 1 To 500
Plot(Random(850) + 150, Random(730) + 15, RGB(200,200,200))
Next
StopDrawing()
EndIf
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndProcedure
GF_GameScreen()
PS :
là encore ce n'est pas un bug de purebasic.
un programmeur doit d'abord se dire que c'est de sa faute plutot que du langage.

Publié : jeu. 27/juil./2006 20:47
par Joubarbe
Le seul problème est qu'il redessine aléatoirement à chaque fois

Publié : jeu. 27/juil./2006 21:24
par Flype
compte du code actuel c'est normal puisque tu utilises random() dans la boucle.
je te laisse chercher un peu pour faire en sorte que çà marche.
si tu bloques, reviens à la charge ici

Publié : jeu. 27/juil./2006 21:35
par Backup
Joubarbe a écrit :Le seul problème est qu'il redessine aléatoirement à chaque fois

tu cree une image avec des points au debut du prg
ensuite tu affiche cette image, au lieu de la redessiner avec des points aleatoires , comme ceci :
Code : Tout sélectionner
Procedure GF_GameScreen()
;Chargement des médias
;Définitions des constantes
;Fenêtres
Enumeration
#fenetre_gamescreen
EndEnumeration
;Gadgets
Enumeration
;menus
#menu_main
#menu_item_save
#menu_item_backtomenu
#menu_item_quit
;frames
#frame_main
;boutons
#bouton_statistiques
#Image
EndEnumeration
CreateImage(#Image, 851, 730, 32) ; on cree une image (Dobro ajout)
If StartDrawing(ImageOutput(#Image)) ; on dessine dedans (Dobro ajout)
Box(150,15,850,730,RGB(0,0,0));
For x = 1 To 500
Plot(Random(850) + 150, Random(730) + 15, RGB(200,200,200))
Next
StopDrawing()
EndIf
; voila on a une image pleine de points !!! :D (Dobro ajout)
;Définitions des variables
;Fichiers inclus
;Déclaration des procédures
;===========================
;INTERFACE
;===========================
;Dessin de l'interface (une grande frame 850*740 à droite, un bouton écran à gauche et une frame information en bas)
If OpenWindow(#fenetre_gamescreen,1,1,1024,768,"Galactic Fantasy",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
If CreateMenu(#menu_main,WindowID(#fenetre_gamescreen))
MenuTitle("Fichier")
MenuItem(#menu_item_save,"Sauvegarder la partie")
MenuItem(#menu_item_backtomenu,"Revenir au menu principal")
MenuBar()
MenuItem(#menu_item_quit,"Quitter la partie")
EndIf
If CreateGadgetList(WindowID(#fenetre_gamescreen))
Frame3DGadget(#frame_main,150,15,850,740,"",#PB_Frame3D_Flat)
ButtonGadget(#bouton_statistiques,15,15,40,30,"Statistiques")
EndIf
EndIf
;Mise en place de l'interaction avec l'interface
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #bouton_statistiques
Print("yo")
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #menu_item_quit
Event = #PB_Event_CloseWindow
EndSelect
Case #PB_Event_Repaint
If StartDrawing(WindowOutput(#fenetre_gamescreen))
DrawImage(ImageID(#Image), 150, 15) ; on dessine notre image dans la fenetre (Dobro ajout)
StopDrawing()
EndIf
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndProcedure
GF_GameScreen()
Publié : jeu. 27/juil./2006 21:44
par Joubarbe
Grrr mon manque de logique m'agace !
J'ai bien intégré les variables PosX, PosY, mais il faut qu'elles changent à chaque boucle pour pouvoir faire un dessin originel mais que par la suite, elles restent constantes. Bon bah c'est un problème jamais rencontré à vrai dire. Je parviens bien à éviter le random à chaque boucle mais seulement avec un point...
Désolé Flype, je dois être navrant.
EDIT : Ah oui je n'aurais vraiment pas pensé à ça, merci Dobro.