FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
défilement des sprites Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
défilement des sprites Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
défilement des sprites Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
défilement des sprites Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
défilement des sprites Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
défilement des sprites Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
défilement des sprites Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
défilement des sprites Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
défilement des sprites Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
défilement des sprites Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
défilement des sprites Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
défilement des sprites Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
défilement des sprites Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
défilement des sprites Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
défilement des sprites Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -17%
(Black Friday) Apple watch Apple SE GPS + Cellular ...
Voir le deal
249 €

 

 défilement des sprites

Aller en bas 
+2
jjn4
JL35
6 participants
AuteurMessage
JL35




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

défilement des sprites Empty
MessageSujet: défilement des sprites   défilement des sprites EmptySam 11 Fév 2017 - 18: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
jjn4

jjn4


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

défilement des sprites Empty
MessageSujet: +++   défilement des sprites EmptySam 11 Fév 2017 - 19: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
http://jjn4.e-monsite.com
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

défilement des sprites Empty
MessageSujet: Re: défilement des sprites   défilement des sprites EmptySam 11 Fév 2017 - 19: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
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

défilement des sprites Empty
MessageSujet: Re: défilement des sprites   défilement des sprites EmptySam 11 Fév 2017 - 20: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 : https://panoramic.1fr1.net/t5129-number_ticks-et-pause#62836
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

défilement des sprites Empty
MessageSujet: Re: défilement des sprites   défilement des sprites EmptySam 11 Fév 2017 - 23: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
JL35




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

défilement des sprites Empty
MessageSujet: Re: défilement des sprites   défilement des sprites EmptyDim 12 Fév 2017 - 0: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
papydall

papydall


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

défilement des sprites Empty
MessageSujet: Re: défilement des sprites   défilement des sprites EmptyDim 12 Fév 2017 - 0: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
http://papydall-panoramic.forumarabia.com/
JL35




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

défilement des sprites Empty
MessageSujet: Re: défilement des sprites   défilement des sprites EmptyDim 12 Fév 2017 - 0: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
Contenu sponsorisé





défilement des sprites Empty
MessageSujet: Re: défilement des sprites   défilement des sprites Empty

Revenir en haut Aller en bas
 
défilement des sprites
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Sprites
» PICTURE avec barres de défilement...
» Défilement dans une grande image
» Défilement d’images dans tous les sens
» un peu sur les sprites

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: