Effacer l'ecran

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Effacer l'ecran

Message par drfloyd »

Bonjour, debutant a 100% sur PURE BASIC (j'ai un gro proget dessus !) j'ai commencé ce week end, je vais avoir quelques questions "cons" :

j'ai commencé a ouvrir un fenetre windows ou je dessine differents trucs... mais comment l'effacer entierement ?

J'utilise a chaque fois CreateImage(0, 800, 600) pour l'effacer, il doit y avoir un autre moyen LOL (y a pas CLS ?)

Merci
Dr Floyd
ATHOW
Messages : 226
Inscription : mer. 29/déc./2004 16:54

Message par ATHOW »

C'est une fenêtre (Window) ou un écran (Screen ou WindowedScreen) ?

Si c'est un écran, ClearScreen(RGB(0,0,0)) est ce que tu recherches.
Je te conseille de lire les tutos (dans cette section du forum) + la doc (et les exemples livrés avec PureBasic), tu auras tout de suite beaucoup moins de questions !

Edit : si tu utilises CreateImage, tu dois être dans une Window. Donc, tu peux n'utiliser qu'une seule image et la repeindre tout simplement (je te montre un code ce soir si tu as besoin, j'ai pas Pure sous la main, là).
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Message par drfloyd »

c'est une fenetre, je vais la repeindre en noir avec un rectangle dans ce cas !

En mode plein ecran on peut garder les gadgets styles boutons a cliquer ??????
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

drfloyd a écrit :c'est une fenetre, je vais la repeindre en noir avec un rectangle dans ce cas !

En mode plein ecran on peut garder les gadgets styles boutons a cliquer ??????
il y a un mode pour ça !!

le mode OpenWindowedScreen()

un petit exemple :D



; Codé par Dobro
; en purebasic 4.02



;- Window Constants
;
Declare Open_Window_0()
Enumeration
     #Window_0 ; numero de la fenetre
     #sprite ; numero du sprite
     #Button_0 ; numero du bouton
EndEnumeration

Structure sprite
    num.l ; numero du sprite
    x.l ; la coordonée x du sprites
    Y.l ; la coordonée y du sprites
    sensx.l ; le sens du deplacement x du sprite
    sensy.l ; le sens du deplacement y du sprite
    coul.l ; la couleur du sprite
EndStructure

nombre_de_Sprite=8
Dim sprite.sprite(nombre_de_Sprite)


For i=1 To nombre_de_Sprite
    CallDebugger
    sprite(i)\x= Random (200) +32 ; on donne une coordonée de depart au sprite
    sprite(i)\Y= Random (200)+32
    de= Random (1)
     If de=1
        sprite(i)\sensx=4 ; on donne un sens de deplacement par defaut au sprite
        sprite(i)\sensy=4 ; ce chiffre correspond a la vitesse de deplacement du sprite
     Else
        sprite(i)\sensx=-4 ; on donne un sens de deplacement par defaut au sprite
        sprite(i)\sensy=4 ; ce chiffre correspond a la vitesse de deplacement du sprite
     EndIf
    sprite(i)\coul = RGB ( Random (200)+50, Random (200)+50, Random (200)+50) ; attribut une couleur
Next i
;


InitSprite ()
Open_Window_0() ; appel de la procedure qui ouvre la fenetre



; ****** creation des sprites *********
For i=1 To nombre_de_Sprite
     CreateSprite (i,16,16) ; creation d'une cellule vide (un sprite)
     StartDrawing ( SpriteOutput (i)) ; on va dessiner dans notre sprite un carre coloré
     Box (1,1,16,16,sprite(i)\coul) ; voila le dessin du carre vert dans notre sprite
     StopDrawing ()
Next i
;**************************************


Repeat ; boucle principale , qui gere les affichages dans l'ecran graphique et les evenement de la fenetre
    
    Event = WindowEvent () ; attends de recevoir un evenements de la fenetre
     Delay (1)
     WindowID = EventWindow () ; The Window where the event is generated, can be used in the gadget procedures
    
     GadgetID = EventGadget () ; Is it a gadget event?
    
     EventType = EventType () ; The event type
    
     ;You can place code here, and use the result as parameters for the procedures
    
     If Event = #PB_Event_Gadget
         If GadgetID = #Button_0
             Debug "appuis sur le bouton ok"
             End
         EndIf
     EndIf
    
     For i=1 To nombre_de_Sprite
        sprite(i)\x= sprite(i)\x+sprite(i)\sensx ; on lance le sprite
        sprite(i)\Y=sprite(i)\Y+sprite(i)\sensy
        
         ; on va tester les sortie de l'ecran pour creer des rebonds
        
         ; les verticales
         If sprite(i)\Y<0 ; sort par le haut !!
            sprite(i)\sensy=-sprite(i)\sensy ; on inverse le deplacement vertical
         EndIf
         If sprite(i)\Y>350-16 ; sort par le bas !!
            sprite(i)\sensy=-sprite(i)\sensy ; on inverse le deplacement vertical
         EndIf
        
         ; les horizontales
         If sprite(i)\x<0 ; sort par la gauche
            sprite(i)\sensx=-sprite(1)\sensx ;on inverse le deplacement horizontal
         EndIf
         If sprite(i)\x>400-16 ; sort par la droite
            sprite(i)\sensx=-sprite(i)\sensx ;on inverse le deplacement horizontal
         EndIf
         ; ********** fin des test de sorti d'ecran *****************
        
         ; **************Affichage du sprite ***********
         DisplaySprite (i,sprite(i)\x,sprite(i)\Y)
     Next i
    
    
    
     FlipBuffers ()
     ClearScreen ( RGB (0,0,0)) ; on nettoie l'ecran pour le prochain affichage
    
     ; *****************************************
    
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
;


Procedure Open_Window_0()
     If OpenWindow ( #Window_0 , 363, 117, 472, 423, "test" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) ; on ouvre une fenetre
         OpenWindowedScreen ( WindowID ( #Window_0 ), 50, 10, 400, 350, 0, 1, 1) ; on creer un ecran graphique dedans
         If CreateGadgetList ( WindowID ( #Window_0 )) ; la liste gadget pour la gestion des gadgets (ici un bouton)
             ButtonGadget ( #Button_0 , 30, 370, 70, 30, "ok" ) ; voila le bouton
         EndIf
     EndIf
EndProcedure
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Message par drfloyd »

Ok, genial

Et si je veux mettre des instruction DRAWTEXT, BOX ou CIRCLE????

C'est a dire mettre du texte ou tracer des lignes...

Comment initialiser ? en creant un "startdrawing" ???
Dernière modification par drfloyd le mar. 21/août/2007 19:53, modifié 1 fois.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@dobro

Je viens d'essayer ton code. T'y as mis "CallDebugger". J'ai regardé l'aide. J'ai cliqué sur Continue. J'ai cherché si mon prog était dans la barre des tâches mais rien de tout ça ne me fait avancer! (je te rassure, je l'ai enlevé pour voir les petites balles carrées!)

Comment tu t'en sert?
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Message par drfloyd »

sinon j'ai reussi mettre du texte et des dessins avec

StartDrawing(ScreenOutput())

Merci pour votre grande aide !!!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ollivier a écrit :@dobro

Je viens d'essayer ton code. T'y as mis "CallDebugger". J'ai regardé l'aide. J'ai cliqué sur Continue. J'ai cherché si mon prog était dans la barre des tâches mais rien de tout ça ne me fait avancer! (je te rassure, je l'ai enlevé pour voir les petites balles carrées!)

Comment tu t'en sert?
Calldebugger sert a arreter le prg a un endroit precis et appel le debugger
j'ai oublie de le retirer ...

j'utilise JAPBE l'autre editeur pour PureBasic (mieux foutu, et plus performant pour plein de raisons)
avec la touche F5 on peut lancer le prg sans qu'il tienne compte des commandes de debugage
c'est ce qui explique pourquoi tu peux encore trouver des calldebugger dans les listings

car avec F5 on passe par dessus sans s'en rendre compte....
F6 permet de lancer avec le debugger actif par contre...

je ne me suis pas servi de l'editeur officiel depuis tres longtemps
je ne sait plus si il y a une correspondance ..

:?
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

C'est juste la flemme qui me porte pour télécharger l'autre éditeur... Un jour il va m'arriver une thuile fatale. Je serai mort et enterré.
Je vais rencontrer un vieux à longue barbe là-haut pour être jugé. Il aura son portable Macintosh à 25 patates écran 28 pouces au beau milieu des nuages et il va me dire : "C'est déjà le bordel dans votre système, mais alors si j'avais pas jaPBe pour le déboguer et y mettre un peu d'ordre, je serai dans la merde totale! En Enfer! ça t'apprendra, bon à rien!"
drfloyd
Messages : 220
Inscription : mar. 21/août/2007 13:30
Contact :

Message par drfloyd »

sinon je voulais savoir si PUREBASIC etait un projet serieux et bien suivi ?

Car je me susi fait avoir avec DARK BASIC... Ils ont soudainement abandonné, et aujourd'hui il ne tourne plus sur XP...
ATHOW
Messages : 226
Inscription : mer. 29/déc./2004 16:54

Message par ATHOW »

Les mises à jour sont assez fréquentes, l'auteur est sérieux est impliqué (plus dans le forum anglais que dans celui-là, ceci dit).
Le langage a beaucoup évolué depuis que je l'ai découvert (avec la 3.81 il me semble).

Le seul point noir (qui devrait disparaître dans peu de temps si j'en crois les nouveautés au sujet de DirectX 9 et des mises à jour d'Ogre) était le retard des fonctionalités 3D sur certains autres outils. Encore que, étant un gros nul en 3D, j'ai pas pu vérifier ce dit retard.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ATHOW a écrit :et des mises à jour d'Ogre) était le retard des fonctionalités 3D sur certains autres outils. Encore que, étant un gros nul en 3D, j'ai pas pu vérifier ce dit retard.
cela dit en attendant, en 3D on dispose d'un moteur convenable "Dreamotion3D" (voir topic en rubrique 3D de ce forum )
aussi facile a programmer que le Dark ! :D
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@DrFloyd

Même chemin que toi à quelques semaines près.
Résultat : il n'y a pas photo. Je dirais même que si le projet PB s'arrêtait net, tu serais encore dans le bon pendant quelques années. Vu qu'on peut créer nos propres fonctions, ça évoluerait quand même... :D
Répondre