FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 20:32

» Compilateur FBPano
par jean_debord Aujourd'hui à 11:07

» Documentation de KGF
par Klaus Hier à 22:52

» Zoom sur une portion d'écran
par JL35 Hier à 21:51

» double guillemets "" dans un EDIT
par pascal10000 Hier à 21:08

» Recherche d'une expression dans un source
par Marc 37 Hier à 13:08

» Tracer une grille n'importe où sur l'écran
par JL35 Dim 19 Nov 2017 - 22:14

» TourD Version 2
par Klaus Sam 18 Nov 2017 - 23:58

» La métamatière et le peuple
par JL35 Ven 17 Nov 2017 - 21:18

» Capture d'une zone de l'écran total
par JL35 Ven 17 Nov 2017 - 18:41

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Ven 17 Nov 2017 - 11:49

» qui peut résoudre mon prb
par pascal10000 Jeu 16 Nov 2017 - 17:30

» évènements et objets système : listage automatique
par Jean Claude Jeu 16 Nov 2017 - 11:15

» Panoramic et la reconnaissance vocale.
par papydall Jeu 16 Nov 2017 - 3:45

» Bizzarerie dans Edge
par Marc 37 Mer 15 Nov 2017 - 17:45

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   
CalendrierCalendrier

Partagez | 
 

 défilement des sprites

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35



Nombre de messages : 5991
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: défilement des sprites   Sam 11 Fév 2017 - 20:49

Sur l'idée du jeu de l'ami jjn4 avec son bandit manchot (bien fait entre parenthèses), je voulais voir l'influence de la commande PAUSE dans la vitesse du défilement.
Code:
LABEL Lance
DIM fnt$,w%,h%,e%,x%,y%,i%,j%,k%,nc%,nb%,ne%,a$,fs$,ys%(20),yy%,n%
fs$ = "C:\TEMP\Spr.bmp"

DATA "Arial","0","1","2","3","4","5","6","7","8","9"
DATA "Fin"
TOP 0,SCREEN_Y/2: LEFT 0,SCREEN_X/2: WIDTH 0,80: HEIGHT 0,125: BORDER_SMALL 0
COLOR 0,255,64,64: CAPTION 0,"": FONT_BOLD 0
nc% = 3: ' nombre de roues (ajuster width 0)
w% = 30: h% = 50: e%=2: ' dimensions d'une case, espacement entre roues
ne% = 0: READ a$
READ a$: WHILE a$<>"Fin": ne% = ne%+1: READ a$: END_WHILE: ' nombre d'éléments par roue
PICTURE 1: WIDTH 1,w%: HEIGHT 1,h%*(ne%+1): ' pour dessiner le sprite de base
2D_TARGET_IS 1: 2D_FILL_COLOR 255,255,255
PRINT_TARGET_IS 1: FONT_COLOR 1,5,5,5
RESTORE: READ fnt$: FONT_NAME 1,fnt$: FONT_SIZE 1,32
y% = 0: x% = 0
FOR i% = 0 TO 50
    READ a$: IF a$ = "Fin" THEN EXIT_FOR
    PRINT_LOCATE x%+3,y%+2: PRINT a$
    ys%(i%) = y%: y% = y%+h%
NEXT i%
FILE_SAVE 1,fs$
2D_TARGET_IS 0: PRINT_TARGET_IS 0: DELETE 1
SCENE2D 10: TOP 10,5: LEFT 10,10: WIDTH 10,nc%*w%+(nc%+1)*e%: HEIGHT 10,ne%*h%
HEIGHT 10,h%
FOR i% = 11 TO 11+nc%-1: SPRITE i%: NEXT i%
BUTTON 30: TOP 30,HEIGHT(10)+12: LEFT 30,22: CAPTION 30,"Lancer": ON_CLICK 30,Lance
FOR i% = 11 TO 11+nc%-1
    SPRITE_FILE_LOAD i%,fs$
    x% = e%+(i%-11)*(w%+e%): SPRITE_POSITION i%,x%,0
NEXT i%
FILE_DELETE fs$
END
' ==============================================================================
Lance:
  FOR k% = 11 TO 11+nc%-1
      n% = 1+RND(ne%-1): j% = 0
      FOR y% = 0 TO -1*h%*(ne%-2) STEP -1*h%
          FOR yy% = y% TO y%-h% STEP -2
              SPRITE_Y_POSITION k%,yy%
              ' PAUSE 1
              FOR i% = 1 TO 2000: NEXT i%
          NEXT yy%
          j% = j%+1: IF j% >= n% THEN EXIT_FOR
      NEXT y%
  NEXT k%
RETURN
' ==============================================================================
Et pour cette application, je m'aperçois que cette commande PAUSE ralentit trop, même au minimum (PAUSE 1).
En la remplaçant par une boucle, la vitesse de défilement est beaucoup plus facile à moduler, même si c'est moins élégant.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jjn4

avatar

Nombre de messages : 1605
Date d'inscription : 13/09/2009

MessageSujet: +++   Sam 11 Fév 2017 - 21:12

Oui, c'est exact.
C'est comme pour les midi_play
la durée minimum, c'est 10 (midi_play N,10)
qui fait 125 millisecondes, ce qui est très très long
et ralentit énormément si on veut utiliser des sons
dans un mouvement rapide où il faudrait
de 1 ou 2 millisecondes seulement, voire moins.
Pareil pour les pause qu'il faudrait avoir en
microsecondes.
scratch alien scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
Jicehel

avatar

Nombre de messages : 5859
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: défilement des sprites   Sam 11 Fév 2017 - 21:53

En effet ta démonstration fait tout à fait son office et cette commande n'est en effet pas adapté pour ce type d'usage et devrait permettre plus de précision dans ce cadre
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc 37



Nombre de messages : 514
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: défilement des sprites   Sam 11 Fév 2017 - 22:03

Bonjour à tous !

Chez moi, une pause inférieure à 15ms n'est pas possible. Sad

Code:
dim temps1,temps2,resultat
temps1 = NUMBER_TICKS

pause 1 : ' <= à moduler suivant vos désirs !

temps2 = NUMBER_TICKS
Resultat=(temps2-temps1)/1000
print "Durée : "+str$(resultat)+" seconde(s)"

EDIT : suite dans la rubrique A L'AIDE : http://panoramic.free-boards.net/t5129-number_ticks-et-pause#62836
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

Nombre de messages : 471
Age : 45
Localisation : Picardie
Date d'inscription : 19/03/2015

MessageSujet: Re: défilement des sprites   Dim 12 Fév 2017 - 1:08

@JL35
 si tu en fait un .exe, et que tu le teste sur des pc de vitesse différente, tu auras un affichage plus ou moins rapide en fonction de l'ordinateur. Pour contrer ce phénomène, il existe une technique appelée "mouvement basé sur le temps". J'ai créé une serie de sub qui fait cela ici.(De souvenir, ce n'est pas que pour la 3d)
Voici un basique essai 2d que je me suis fait à l'époque pour voir si ça pouvait fonctionner sous panoramic. C'est un code ancien que j'ai conservé, il n'est pas sans défaut mais la technique est là:
Code:
dim tbm,old_time

dim posx,posy
dim depx,vitX
dim depy,vitY

label souris
dim scan,old_k1,k1,old_k2,k2,temps

' dll pour la mesure du temps
dll_on "kernel32"

' un délai de ralentissement par défaut(pour le lag imposé par l'utilisateur)
temps=50
dim tmp$,current_time

' panoramic est synchonisé en interne à 60 fps, soit 1/60 seconde par image
'
vitX=300   :' 300 pixels horizontaux par seconde
vitY=200   :' 200 pixels verticaux par seconde
repeat
   ' la sub en action : remplir la variable tbm
   SPEED_SYNC()

   cls
   depx=depx+(vitX*tbm)   :' déplacement horizontal modulé en fonction du temps
'   tmp$=str$(vitX*tbm) + " / " + str$(tbm) : caption 0,tmp$
   posx=50+depx   :'
   if (posx>=(width(0)-58)) then vitX=0-256   :' on touche le bord, on change le sens du déplacement(rebond)
   if (posx<=50) then vitX=256   :' on touche le bord, on change le sens du déplacement(rebond)
   '
   depy=depy+(vitY*tbm)   :' déplacement vertical modulé en fonction du temps
   posy=50+depy   :'
   if (posy>=(height(0)-84)) then vitY=0-200   :' on touche le bord, on change le sens du déplacement(rebond)
   if (posy<=50) then vitY=200   :' on touche le bord, on change le sens du déplacement(rebond)

   2d_circle posx,posy,50   :' positionne et affiche le cercle

   ' le délai de ralentissement géré par la souris(lag imposé par l'utilisateur)
   gosub souris
   wait 1+temps

   ' affichage d'infos
   caption 0,"'return'=quitter, souris gauche/droite= ralentir/accelerer le 'lag'(="+str$(temps)+" ms)"

' fin si touche 'return'
until scan=13


TERMINATE
' END
sub SPEED_SYNC()
' dim_local current_time
' "GetTickCount"=mesure en milliseconde, le temps écoulé depuis l'allumage du PC
   if old_time=0
      ' 1er appel, on initialise la variable avec une valeur par défaut
      tbm=0.001 : old_time=dll_call0("GetTickCount")
   else
      current_time=dll_call0("GetTickCount")
      ' seconde/image
      tbm=(current_time-old_time)*0.001
      old_time=current_time
   end_if
end_sub


souris:
   old_k1=k1
   old_k2=k2
   scan=scancode

   select scan
      case 0:k1=0:k2=0
      case 1:k1=1
      case 2:k2=1
   end_select

   ' souris gauche
   if (k1-old_k1)>0 then temps=temps-25
   ' souris droite
   if (k2-old_k2)>0 then temps=temps+25
   if temps>100 then temps=100
   if temps<0 then temps=0
return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5991
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: défilement des sprites   Dim 12 Fév 2017 - 2:20

Je n'ai pas encore fait d'essais, mais je suis bien d'accord que le comportement doit être différent en version compilée, sans doute plus rapide, plutôt qu'en interprété.
Il faudrait peut-être essayer avec des tests de NUMBER_TICKS pour plus de précision...
C'est vrai que le PAUSE de valeurs faibles n'a pas de sens.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5593
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: défilement des sprites   Dim 12 Fév 2017 - 2:31

Changez PAUSE par WAIT et constatez par vous-même


La commande PAUSE N arrête l'exécution du programme pendant N millisecondes. Les actions en attente sont effectuées.
La commande WAIT N gèle l'exécution du programme pendant N millisecondes. Les actions en attente ne sont pas effectuées.


Wait est plus précis(e).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 5991
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: défilement des sprites   Dim 12 Fév 2017 - 2:54

Rapidement, il me semble que j'avais essayé avec WAIT et que ça faisait pareil que PAUSE, mais je n'ai sans doute pas été assez rigoureux dans mon test.
Même s'il semble ne pas y avoir d'action en attente, il doit quand même y avoir dans le cas de Pause la surveillance des actions possibles (clic sur un bouton par exemple) qui ne doit pas se faire avec Wait.

En attendant mieux... Sleep
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: défilement des sprites   

Revenir en haut Aller en bas
 
défilement des sprites
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Les sprites
» Bug sur sprites de gerard
» Gestion de collisions entre sprites en 2D
» (Resolu] Recherche de sprite
» bande verticale avec défilement de couleurs

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Présentation et bavardage-
Sauter vers: