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
» Une calculatrice en une ligne de programme
défilement des sprites Emptypar jean_debord Aujourd'hui à 8:01

» Gestion d'un système client-serveur.
défilement des sprites Emptypar Pedro Hier à 19:31

» Les maths du crocodile
défilement des sprites Emptypar jean_debord Hier à 10:37

» Naissance de Crocodile Basic
défilement des sprites Emptypar jean_debord Hier à 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
défilement des sprites Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
défilement des sprites Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
défilement des sprites Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
défilement des sprites Emptypar papydall Dim 21 Avr 2024 - 23:30

» Form
défilement des sprites Emptypar leclode Dim 21 Avr 2024 - 18:09

» trop de fichiers en cours
défilement des sprites Emptypar Marc Dim 21 Avr 2024 - 2:41

» 2D_fill_color(résolu)
défilement des sprites Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
défilement des sprites Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
défilement des sprites Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
défilement des sprites Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

» Bataille-navale
défilement des sprites Emptypar jjn4 Mer 3 Avr 2024 - 14:08

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
-29%
Le deal à ne pas rater :
PC portable – MEDION 15,6″ FHD Intel i7 – 16 Go / 512Go (CDAV : ...
499.99 € 699.99 €
Voir le deal

 

 défilement des sprites

Aller en bas 
+2
jjn4
JL35
6 participants
AuteurMessage
JL35




Nombre de messages : 7095
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 : 2689
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 : 51
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 : 2379
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 : 968
Age : 51
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 : 7095
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 : 6996
Age : 73
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 : 7095
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: