OpenConsole() trop basic
OpenConsole() trop basic
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 ??
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 ??
mal foutu quand meme ........
Input, non, car ca stop la boucle; donc la zik !poshu a écrit :un thread et un input.
thread : je ne sais pas ce que c'est...
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
t'as pas regardé l'exemple que je t'ai mis !!SPH a écrit :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 !!!Dobro a écrit :la solution la plus elegante serai de passer par un ecran graphique en fenetre
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
regarde mon exemple il est tres simplifié et commenté !!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 !!
ç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

; *********** 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