Disparition magique d'un dessin de fenêtre

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Disparition magique d'un dessin de fenêtre

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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:
Image
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Message par Joubarbe »

Le seul problème est qu'il redessine aléatoirement à chaque fois :(
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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:
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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()
Joubarbe
Messages : 93
Inscription : sam. 01/juil./2006 16:40

Message 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.
Répondre