OpenConsole() trop basic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

OpenConsole() trop basic

Message par SPH »

Dans mon code present sur cette page (http://purebasic.hmt-forum.com/viewtopi ... 9&start=30), je n'ouvre qu'une openconsole() pour jouer un morceau qui se construit au hazard.
J'ai eu beau cherché comment l'utilisateur pouvait breaké ppour avoir un autre morceau, je n'y suis pas arrivé. En console, pas de mouse, pas de key, rien. Ca oblige l'utilisateur a fermer puis relancer mon programme.
Comment eviter ca ??
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

un thread et un input.
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

mal foutu quand meme ........

Message par SPH »

poshu a écrit :un thread et un input.
Input, non, car ca stop la boucle; donc la zik !
thread : je ne sais pas ce que c'est...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

la solution la plus elegante serai de passer par un ecran graphique en fenetre


 
; *********** initialisation *********
;coord de départ
x.f = 10
Y.f = 110
 
  ;vitesses de départ
vx.f = 10
vy.f = -45
                             
pas.f=0.2
; ******************************


InitMouse ()


  ; ******** ** pour le sprite *****************
InitSprite ()
; ***************************************



OpenWindow (1, 1,1, 800, 600, "test" , #PB_Window_SystemMenu ) ; on ouvre une fenetre
OpenWindowedScreen ( WindowID (1) , 0, 0, 800, 600, 1, 1, 1) ; on met un ecran dedans !!

; *********** on va creer le sprite !! *****************
CreateSprite (1,16,15) ; on cree un sprite de 16*16
StartDrawing ( SpriteOutput (1)) ; on va dessiner dedans un rond jaune !
Circle (8,8, 8, RGB ($F1,$F8,$C)) ; le voila le beau rond jaune
StopDrawing ()
; ********* le sprite est terminer on va jouer avec !! ******

Repeat ; boucle principale
  
  Event= WaitWindowEvent () ; on regarde si quelqu'un a cliqué sur la croix pour quitter
  
   ; ************************** ton prog ici ****************
  
   For i = 1 To 1520
     ExamineMouse ()
     ExamineKeyboard ()
     If MouseButton (2) Or KeyboardPushed ( #PB_Key_All ) ; le bouton de souris droit fait quitter !
       End
     EndIf
    
    vy = vy+10*pas
    x=x+vx*pas
    Y=Y+vy*pas
     StartDrawing ( ScreenOutput ())
     DisplaySprite (1, x+10,Y+150) ; et voila !
     FlipBuffers () ; <---- ceci pour voir le dessin se faire +Lent !!
     ClearScreen ( RGB (0, 0, 0)) ; <--- ceci efface l'ecran !!
    
     If Y>120 ; gestion des rebonds en fonction de la valeur de y
      vy=-vy*0.95 ; chgt de signe de la compo verticale de la vitesse
     EndIf ;+ amortissement de 5% à chaque rebond
    
   Next i
   ; ***************************************************
  
   ;FlipBuffers() <--- c'est la place normale pour le flipbuffer
   ; ClearScreen(0, 0, 0); <--- c'est la place normale pour le clearscreen !!
Until Event= #PB_Event_CloseWindow
Return
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Dobro a écrit :la solution la plus elegante serai de passer par un ecran graphique en fenetre
J'avais essayé figure toi mais alterner console et screen pour testé les key, ca m'a parut absurde tellement c'etait lourd a gerer !!!
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Le multi threading permet de faire des opérations en //. Donc 1 thread pour la ziq, et un pour le input.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

SPH a écrit :
Dobro a écrit :la solution la plus elegante serai de passer par un ecran graphique en fenetre
J'avais essayé figure toi mais alterner console et screen pour testé les key, ca m'a parut absurde tellement c'etait lourd a gerer !!!
t'as pas regardé l'exemple que je t'ai mis !!

il t'aprends, comment gerer les touches de clavier avec un screen window

pourquoi t'embeter avec une console , puisque l'ecran peut tout faire
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Dobro a écrit :pourquoi t'embeter avec une console , puisque l'ecran peut tout faire
Simple : je suis nul.
Je le dis et le repete : je sais coder presque n'importe quoi dans le fond mais pas dans la forme... (HELAAAAAAAAS)
Ok ok, c'est vrai, je devrais me pencher sur les screen !!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

SPH a écrit : Je le dis et le repete : je sais coder presque n'importe quoi dans le fond mais pas dans la forme... (HELAAAAAAAAS)
Ok ok, c'est vrai, je devrais me pencher sur les screen !!
regarde mon exemple il est tres simplifié et commenté !!

ça ouvre une fenetre
ça met un ecran dedans

on dessine dans un sprite un rond jaune

on commence la boucle principale par verifier si la touche droite
de la souris est appuyé !

ensuite on regarde si une touche du clavier (toute les touches)
ont ete appuyé
si c'est le cas , on termine le prg !

on commence une boucle pour simuler le rebond d'une balle (le sprite a rond jaune)

et on recommence temps que l'annimation n'est pas fini

promets moi de bien lire chaque phrase de ce listing
de modifier des choses dedans, afin de mieux comprendre comment ça marche
par exemple change le parametre qui permet de sortir du programme par n'importe quel touche, par le parametre qui permet de sortie en utilisant seulement la touche "E" par exemple :D



 
; *********** initialisation *********
;coord de départ
x.f = 10
Y.f = 110
 
  ;vitesses de départ
vx.f = 10
vy.f = -45
                             
pas.f=0.2
; ******************************


InitMouse ()


  ; ******** ** pour le sprite *****************
InitSprite ()
; ***************************************



OpenWindow (1, 1,1, 800, 600, "test" , #PB_Window_SystemMenu ) ; on ouvre une fenetre
OpenWindowedScreen ( WindowID (1) , 0, 0, 800, 600, 1, 1, 1) ; on met un ecran dedans !!


; *********** on va creer le sprite !! *****************
; on cree le sprite en avance
; il faut bien comprendre qu'un sprite est en fait une cellule vide qui peut se deplacer n'importe ou sur l'ecran
; et meme en dehors !!


CreateSprite (1,16,15) ; on cree un sprite (une cellule vide) de 16*16

StartDrawing ( SpriteOutput (1)) ; on va dessiner dedans un rond jaune !
Circle (8,8, 8, RGB ($F1,$F8,$C)) ; le voila le beau rond jaune
StopDrawing ()
; ********* le sprite est terminé on va jouer avec !! ******



Repeat ; boucle principale
  
  Event= WaitWindowEvent () ; on regarde si quelqu'un a cliqué sur la croix pour quitter
   ExamineMouse () ; on demande a purebasic de surveiller les event de souris !
   ExamineKeyboard () ; on demande a purebasic de surveiller les event de clavier!
  
   ; ************************* ton prog ici ****************
   For i = 1 To 1520
    
     If MouseButton (2) Or KeyboardPushed ( #PB_Key_All ) ; le bouton de souris droit fait quitter ! ou bien n'importe quel touche
       End
     EndIf
    
    
    
    vy = vy+10*pas ; ça va en gros simuler un rebond sur un sol invisible
    x=x+vx*pas
    Y=Y+vy*pas
    
     StartDrawing ( ScreenOutput ()) ; on demande a purebasic d'afficher tout ce qui suis sur l'ecran !!!
     DisplaySprite (1, x+10,Y+150) ; et voila on dessine le sprite (qui contien un rond jaune)!
    
     FlipBuffers () ; <---- ceci pour voir le dessin se faire
     ClearScreen ( RGB (0, 0, 0)) ; <--- ceci efface l'ecran !! sinon le sprite laisse une trace sur le fond !!
    
     If Y>120 ; gestion des rebonds en fonction de la valeur de y
      vy=-vy*0.95 ; chgt de signe de la compo verticale de la vitesse
     EndIf ;+ amortissement de 5% à chaque rebond
    
   Next i
   ; ***************************************************
  
   ;FlipBuffers() <--- c'est la place normale pour le flipbuffer en principe dans une aplication "normale"
   ; ClearScreen(0, 0, 0); <--- c'est la place normale pour le clearscreen !!
Until Event= #PB_Event_CloseWindow ; boucle temps que l'evenement de fenetre n'est pas #PB_Event_CloseWindow (un appuis sur la croix)
; chose qui ne peut pas arrivé sur ce programme !!
Return
Répondre