Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Sleep ; une alternative de PAUSE | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Sleep ; une alternative de PAUSE Mar 21 Fév 2017 - 4:11 | |
| - Code:
-
rem ============================================================================ rem Fonction Sleep de la kernel32.dll rem ============================================================================ rem Une alternative de la commande PAUSE rem La fonction Sleep suspend l exécution du programme pour un temps indiqué en ms. rem rem ============================================================================ dim sleep% ,t1,t2 caption 0, " Veuillez patienter 3 secondes .... Sleep" font_bold 0 dll_on "kernel32" t1 = number_ticks sleep% = dll_call1("Sleep",3000) t2 = number_ticks print "Sleep : Il s'est écoulé : " + str$((t2-t1)/1000) + " s"
caption 0, " Veuillez patienter 3 secondes .... Pause" t1 = number_ticks pause 3000 t2 = number_ticks print "PAUSE : Il s'est écoulé : " + str$((t2-t1)/1000) + " s"
caption 0, " Veuillez patienter 3 secondes .... Wait" t1 = number_ticks wait 3000 t2 = number_ticks print "WAIT : Il s'est écoulé : " + str$((t2-t1)/1000) + " s" rem ============================================================================
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 9:53 | |
| en effet ça peut répondre à un besoin | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 12:26 | |
| Ben oui. Qui ne veut d'un SLEEP ? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 13:13 | |
| Bonjour à tous ! Merci Papydall pour ce SLEEP ! J'ai testé, ta routine marche parfaitement bien mais... je n'arrive pas à générer des temps inférieurs à 15ms, tout comme WAIT et PAUSE. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 13:23 | |
| Il y a un temps minimal en dessous duquel tu ne pourras pas descendre: le temps qu'il y ai un cycle pour appeler la fonction, l'exécuter puis revenir à ton programme. Cela est dû au fonctionnement du langage interprété et au mécanisme d'appel de la fonction d'une DLL par un programme. C'est assez rapide somme toute mais ça prend du temps (un temps qui devrait varier en fonction des performances du PC de surcrois ) Si ton temps minimum est de 15ms, idéalement, prévois une marge de sécurité et essaye de tout concevoir pour une boucle avec un temps de 30ms par exemple. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 13:59 | |
| Salut Jicehel, 15 ms, et a fortiori 30 ms, est beaucoup trop lent pour réguler le déplacement d'une image ou d'un sprite. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 14:11 | |
| - Code:
-
dim sleep% ,t1,t2 dll_on "kernel32" t1 = number_ticks sleep% = dll_call1("Sleep",0) : ' Modifier la durée du sleep (entre 0 et ... beaucoup) t2 = number_ticks message "Sleep : Il s'est écoulé : " + str$(t2-t1) + " ms" end
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 16:18 | |
| Merci Papydall, mais en dessous de 16ms c'est la panique, les résultats sont erronés chez moi. | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 18:26 | |
| - Marc37 a écrit:
- 15 ms, et a fortiori 30 ms, est beaucoup trop lent pour réguler le déplacement d'une image ou d'un sprite.
Je suis curieux de voir comment tu procèdes | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 19:16 | |
| Salut Sylverman, Par exemple, dans le code ci-dessous, la vitesse de déplacement est ajustée, par dépit, par la boucle FOR/NEXT ligne 122. Suivant le PC utilisé, la durée de cette boucle FOR/NEXT n'est pas la même. Il me faudrait pouvoir utiliser PAUSE. Avec PAUSE, peu importe la vitesse du PC, le délai est toujours le même. Il me faut une variation de 1ms à 15ms. Mais de 1ms à 15ms, il n'y a aucune différence de temps, c'est toujours du 15ms ! Délai trop long qui empêche donc d'accélérer le déplacement. La boucle FOR/NEXT permet d'établir des délais très rapides, bien en dessous du milliseconde. Tu peux supprimer la totalité de la boucle et la remplacer par PAUSE x. En dessous de 15, pas moyen d’accélérer. Avec la boucle FOR/NEXT, pas de problème pour accélérer, mais dépendant de la vitesse du PC. Le déplacement est ordonné par la position de la souris. - Code:
-
' ------------------------------------------------------------------------------ ' Essai de déplacement 4 axes avec la souris. ' 4 plans identiques utilisés + vitesse variable ' MARC37 - Février 2017 - Panoramic v0.9.27 ' http://panoramic-language.pagesperso-orange.fr/French/index.html ' ------------------------------------------------------------------------------
WIDTH 0, 400 HEIGHT 0, 400 LEFT 0,(SCREEN_X-WIDTH(0))/2 TOP 0,(SCREEN_Y-HEIGHT(0))/2 LABEL Quitter LABEL Deplace DIM x%,y% : ' offset variable incrémenté par la souris DIM Map%(4,2) : ' offset fixe des Sprites DIM x_souris%, y_souris% DIM i% : ' boucle de vitesse DIM Vitesse% DIM h%,w% w% = WIDTH_CLIENT(0) h% = HEIGHT_CLIENT(0) ON_CLOSE 0, Quitter espace_sideral() WHILE 0=0 x_souris%= MOUSE_X_POSITION(10) y_souris%= MOUSE_Y_POSITION(10) Vitesse% = (ABS(y_souris%-(h%/2))+ABS(x_souris%-(w%/2)))/2 Vitesse% = (vitesse%*(-1*227))+20520 IF y_souris%>(1/2*h%+10) THEN y%=y%+1: ' vers le bas IF y_souris%<(1/2*h%-10) THEN y%=y%-1: ' vers le haut IF x_souris%>(1/2*w%+10) THEN x%=x%+1: ' vers la droite IF x_souris%<(1/2*w%-10) THEN x%=x%-1: ' vers la gauche IF x% = w% THEN x% = 0 IF y% = h% THEN y% = 0 IF x% = (-1*w%) THEN x% = 0 IF y% = (-1*h%) THEN y% = 0 IF x%=>0 AND y%=>0 Map%(1,1)=(-1*w%)+x% Map%(2,1)=0+x% Map%(3,1)=0+x% Map%(4,1)=(-1*w%)+x% Map%(1,2)=0+y% Map%(2,2)=0+y% Map%(3,2)=(-1*h%)+y% Map%(4,2)=(-1*h%)+y% END_IF IF x%=<0 AND y%=<0 Map%(1,1)=w%+x% Map%(2,1)=0+x% Map%(3,1)=0+x% Map%(4,1)=w%+x% Map%(1,2)=0+y% Map%(2,2)=0+y% Map%(3,2)=h%+y% Map%(4,2)=h%+y% END_IF IF x%=>0 AND y%=<0 Map%(1,1)=(-1*w%)+x% Map%(2,1)=0+x% Map%(3,1)=0+x% Map%(4,1)=(-1*w%)+x% Map%(1,2)=0+y% Map%(2,2)=0+y% Map%(3,2)=h%+y% Map%(4,2)=h%+y% END_IF IF x%=<0 AND y%=>0 Map%(1,1)=w%+x% Map%(2,1)=0+x% Map%(3,1)=0+x% Map%(4,1)=w%+x% Map%(1,2)=0+y% Map%(2,2)=0+y% Map%(3,2)=(-1*h%)+y% Map%(4,2)=(-1*h%)+y% END_IF GOSUB Deplace END_WHILE END ' ------------------------------------------------------------------------------ SUB Espace_sideral() DIM_LOCAL i%, j% PICTURE 20 FULL_SPACE 20 COLOR 20,j%*20,j%*20,0 2D_TARGET_IS 20 2D_PEN_COLOR 255,255,255 FOR i%=1 TO 500 2D_POINT INT(RND(w%)),INT(RND(h%)) NEXT i% FOR i%=1 TO 50 2D_CIRCLE INT(RND(w%)),INT(RND(h%)),2 NEXT i% IMAGE 30 2D_IMAGE_COPY 30,0,0,w%,h% CLS SCENE2D 10 FULL_SPACE 10 SPRITE_CREATE_HIDE FOR i% = 1 to 4 SPRITE i% NEXT i% FOR i% = 1 to 4 SPRITE_IMAGE_LOAD i%,30 NEXT i% x%=0 y%=0 SPRITE_POSITION 1,x%,y%-h% SPRITE_POSITION 2,x%,y% SPRITE_POSITION 3,x%,y%+h% SPRITE_POSITION 4,x%-w%,y%-h% FOR i% = 1 to 4 SPRITE_SHOW i% NEXT i% END_SUB ' ------------------------------------------------------------------------------ deplace: SPRITE_POSITION 1,Map%(1,1),Map%(1,2) SPRITE_POSITION 2,Map%(2,1),Map%(2,2) SPRITE_POSITION 3,Map%(3,1),Map%(3,2) SPRITE_POSITION 4,Map%(4,1),Map%(4,2) FOR i% = 0 TO vitesse% NEXT i% DISPLAY RETURN ' ------------------------------------------------------------------------------ Quitter: TERMINATE RETURN ' -------------------------- | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 19:49 | |
| Marc, Pour plus de précision, tu pourrais faire comme ceci: - Code:
-
' pause de ps millisecondes nt = NUMBER_TICKS WHILE NUMBER_TICKS < (nt + ps): END_WHILE mais c'est bloquant (pas plus que la boucle FOR/NEXT) PS ERREUR, pareil, on ne descend pas au-dessous des 16 ms chez moi... | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Sleep ; une alternative de PAUSE Mer 22 Fév 2017 - 20:57 | |
| Salut JL35 ! J'ai déjà exploité ta solution et, comme tu l'as remarqué, tu es bloqué à 16ms. Donc, toujours cette maudite barrière à 15 ou 16 ms... Merci de ton intervention. En attendant, je continue avec FOR/NEXT, mais ce n'est pas la panacée ! | |
| | | Contenu sponsorisé
| Sujet: Re: Sleep ; une alternative de PAUSE | |
| |
| | | | Sleep ; une alternative de PAUSE | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |