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. :wink:

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 :wink:

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 : :D

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.