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
» Une autre façon de terminer une application.
par Francis-mr Aujourd'hui à 12:07

» Compilateur FBPano
par jean_debord Aujourd'hui à 10:09

» Copier / coller du texte à partir de la fenêtre de commandes
par jean_debord Aujourd'hui à 9:46

» COMPILATEUR V 0.9 beta 8 du 18 aout 2017
par papydall Aujourd'hui à 5:01

» Mettre en windows en veille
par papydall Aujourd'hui à 4:15

» Stretch_on ne stretch plus...
par papydall Hier à 15:22

» Pb 18 (en analyse): RESTORE_LABEL avec DATA à la fin
par Jack Hier à 13:21

» Problème de traitement des opérateurs avec le compilateur.
par Pedro Alvarez Sam 19 Aoû 2017 - 20:01

» Pb 17 (résolu): ITEM_SELECT ne fonctionne pas
par Jack Jeu 17 Aoû 2017 - 19:26

» un nouveau editeur panobasic
par Jean Claude Jeu 17 Aoû 2017 - 10:18

» Le compilateur.
par Pedro Alvarez Jeu 17 Aoû 2017 - 8:36

» Pb 16 (résolu): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

» Pb 15 (résolu): TIMER_ON plante à l'exécution
par Jack Mer 16 Aoû 2017 - 19:58

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 2D/3D: mouvement basé sur le temps

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

avatar

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

MessageSujet: 2D/3D: mouvement basé sur le temps   Dim 28 Juin 2015 - 14:58

Bonjour à tous!

Voici un exemple simple de code pour découvrir comment on peut obtenir une vitesse d'animation constante quelquesoit la vitesse de l'ordinateur.
Il existe d'autre façon pour faire ça(soyez inventif!), mais celle que je propose est très simple et bien adapté à panoramic.
Code:


' Panoramic 0.9.25

'   ==============================================================
'   =  Title  : Time Based Movement
'   =
'   =  Author : Silverman
'   =
'   =  Date   : Juin 2015
'   =
'   =  Version: 1.0
'   ==============================================================
'   Comments  : Exemple d'animation en 2D ou en 3D qui conserve
'             : sa vitesse quelquesoit l'ordinateur sur lequel
'             : le programmeest éxécuté. Cela implique qu'elle
'             : sera saccadée sur un PC lent.
'   ==============================================================

dim tbm,old_time
dim tpm,dps,ups
dim rot,dep

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

' dll pour la mesure du temps
dll_on "kernel32"

' la scène
scene3d 10
full_space 10
cam_position 0,1,5

' cube bleu en rotation
3d_cube 1,1
3d_color 1,0,0,255

' cube noir en déplacement linéaire
3d_cube 2,1
3d_position 2,2,0,0

' un délai de ralentissement par défaut
temps=100

' en 2D, on pourrait choisir des : pixels/seconde par exemple
' le choix dépend de ce que l'on veux faire, il n'y a pas de
' règle imposée, excepté le format de l' unité: qqchose/seconde


' rotation:
' tmp=Tour Par Minute
tpm=6
'
' Degré Par Seconde(c'est l'unité que je choisis)
dps=(tpm*360)/60


' déplacement linéaire:
' Unité Par Seconde(c'est l'unité que je choisis)
ups=0-10


' La sub va écrire une valeur dans la variable 'tbm'. 'tbm' correspond au
' temps d'affichage d'1 image. L'image qui va être affichée est fonction du
' temps entre 2 appels à la sub.
'
' Suposons que l'on déplace un objet de 10 unité/sec; 1sec=1000 millisecondes.
' Par image, l'objet se deplace de 10/1000 unité.
' Mon ordinateur n'est pas très rapide, il mesure un temps de 20 ms entre
' 2 appels à la sub;
' Mon objet se sera déplacé de 20*(10/1000), soit 0.2 unité, dans l'image qui
' vient de s'afficher.
' Puisque mon ordinateur met 20 ms entre 2 appels à la sub, cela veut dire qu'il
' peut calculer 50 images/sec, et 50 image/sec * 0.2 unité = 10 unité/sec. C'est
' bien ce que j'ai choisis au départ.
repeat
   ' la sub en action
   SPEED_SYNC()
  
   ' la rotation du cube bleu
   rot=rot+(tbm*dps)
   3d_y_rotate 1,rot
  
   ' le déplacement linéaire du cube noir
   dep=dep+(tbm*ups)
   if dep<=-10 then dep=dep+10
   3d_position 2,2,0,dep
  
   ' le délai de ralentissement géré par la souris
   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


END
sub SPEED_SYNC()
dim_local current_time
' 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>200 then temps=200
   if temps<0 then temps=0
return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Dim 28 Juin 2015 - 22:31

Super Silverman. Tu te sens de faire une petite démo pour la version 2D.
Tu a l'air doué un moteur. L'idée serait d'avoir x ennemis quelconques, une saisie de touches et l'animation d'un sprite en fonction de ses touches et de tirs. Le tout avec une vitesse fixe. Ce n'est pas si évident à faire. Si tu arrive à faire un moteur à vitesse constantes avec ces contraints, ce serait très intéressant. C'est assez dure car il y a plusieurs paramètres qui jouent sur la vitesse, mais tu semble assez doué pour pouvoir y arriver ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4989
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 10:02

Oui ça m'intéresse,

1) une question: PAUSE, WAIT sont paramétrables en milisecondes (Ex: PAUSE 1000 = 1 seconde), j'espère que c'est valable quelque soit les performances de l'ordinateur.
Idem pour SCENE2D_INTERVAL (dans PANGINE2D)

2) Quand on parle d'animation en 2D, il serait bon de préciser si c'est un déplacement de sprite, ou une animation à partir d'une planche. Car on risque la confusion.

Ceci dit, je suis intéressé de voir un exemple en 2D pour un déplacement de sprite.
Pour l'animation il y a les commandes citées plus haut.

Grâce à ce sujet, je me rend compte que le jeu asterV4 n'est peut-être pas jouable sur certain PC. Mais comme je n'ai eu aucuns retour à ce sujet.....

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jimx78

avatar

Nombre de messages : 240
Age : 25
Localisation : Yvelines
Date d'inscription : 24/05/2010

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 12:21

Ceci est tres intéressant.
J'ai déjà eu le problème :

J'avais cree un system d'anticolision pas optimiser, qui laguer a partire de 30 objets 3D à verifier la collision, mais si je lancer l'application 3D d'un pc puissant, cela laguer qu'a partire de 200. Bref, la puissance du pc modifie le nombre de fps, et cela peu drastiquement modifier le gameplay si c'est un gros pc ou non.

Je regarderai ton code plus tard mais j'utilise deja la dll de klaus, je sais pas si je peux rajouter la dll kernel32 facilement dans mon code.

Pourrai tu expliquer théoriquement la logique à avoir pour permettre de regler le probleme stp, merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 13:05

C'est le problème Silverman.

Tu propose une solution intéressante, maintenant, il faut assurer le SAV car ça interesse du monde Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 13:52

@Jicehel
Le sprite n'est pas qqchose que je maitrise, car je ne l'utilise pas. Sur le forum de DarkBasic, certains utilisaient cet algorithme pour la 2D, mais DarkBasic étant spécialisé dans la 3D, ils ne devait pas être si nombreux que ça je pense. J'essayerai de faire un truc tt simple avec des cercles et des lignes, je regarde pour ça déja.


@Jean Claude
1) aucun pb, la sub mesure un écart de temps, donc ça ne change rien pour pause ou wait. Je ne peux pas te donner de reponse pour PANGINE2D vu que je n'ai pas mis le nez dans sa syntaxe.

2)exact, c'est clair pour moi puisque c'est moi qui propose le code. Je parle d'animation 2D dans le sens de déplacement, cad sprite, ligne, cercle, rectangle, ...
Citation :
...je me rend compte que le jeu asterV4 n'est peut-être pas jouable sur certain PC.
Si tu uses des timers, ça ne devrait pas poser de pb sur un ordi rapide, mais sur un lent, c'est une autre histoire.
Dès que je maitriserai un peu les sprites, j'essayerai de poster une demo.


@jimx78
ton pb n'a pas de rapport avec le code que j'ai proposé. Mon code fait en sorte que par exemple un perso 3D se deplace à la même vitesse d'un pc à un autre, indépendemment de la puissance de l'ordinateur.
Imagine ce que donnerais conter-strike sans ça:
sur un pc de 'gamer' ton perso traverserais la map en un rien de temps, tandis que sur pc lent il mettrait qq minutes!
Ton pb c'est l'optimisation, les collisions sont très gourmandes en temps de calcul. Il faut opter pour un langage qui supporte un moteur BSP par exemple, ou bien t'initier au monde des octrees(très efficace pour les collisions 3D, simple à comprendre mais complexe à coder. Perso j'y suis pas encore arrivé, mais je persiste!)
La dll de Klaus intègre déjà un fonction pour mesurer le temps, tu n' a pas besoin de kernel32. Il te faut juste adapter la sub.

nb: BSP= Binary space partitioning, explication ICI
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
silverman

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 13:59

Jicehel a écrit:
maintenant, il faut assurer le SAV car ça interesse du monde
je comprend, c'est sûr qu'un programme semble tourner à la même vitesse qqsoit l'ordi, ça fait plus "pro"! Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 14:48

Merci Silverman. J'espère que tu t'initiera au mondes des sprites dans Panoramic car ton approche "théorique" (je mets thérorique entre guillemets car tu donne le code pour mettre cette théorie en pratique, mais je veux dir que tu apporte des aspects théoriques, en espérant que l'explication de ce que je souhaite exprimer soit un peu près claire ... (pas sûr...)) amènera certainement une augmentation des produits finis notamment dans tout ce qui concerne les jeux qui demandent beaucoup au niveau ressources et dont la jouabilité doit être garantie malgrè des variations de performances (on pourrait même prévoir un test en début de jeu mesurant les performance en dessous desquelles le jeu mettrais juste un message indiquant que les performances de la machine ne permettent pas l'utilisation correcte du jeu ...).
Le truc par rapport au code que tu fournis c'est que l'adaptation est faisable mais qu'elle n'est pas évidente car il faut jouer sur plusieurs paramètres pour obtenir un résultat jouable et régulier dans le temps (typiquement dans asteroid_v4, il y a des variations de vitesse en fonction du nombre de tirs ou du déplacement du vaisseau, ce qui n'est pas normal mais pas si simple à éviter et qui mériterait certainement l'utilisation d'une ou de plusieurs procédure(s) similaire(s) à celle que tu nous a donné mais dont les règles doivent être correctement pensées. Après si tu trouve un bon système, je pense qu'il pourra être adapté à pas mal de jeux d'actions basés sur les sprites.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jimx78

avatar

Nombre de messages : 240
Age : 25
Localisation : Yvelines
Date d'inscription : 24/05/2010

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 16:03

Le joueur est au millieu des 6 cubes

Pour les collisions, voici un exemple d'anticolision pas optimiser :

Les 6 cubes teste une collisions avec chaque objet de la scène3D tout le temps.

https://www.dropbox.com/s/feb08f26myogdwm/fichier%2029-06-2015%2014%2046%2049.png?dl=0

Si j'ai 1 objet 3D ( la map au sol par exemple) cela fait 6x1 vérification de collision.

Si j'ai 30 objet 3D par exemple, cela fait 6x30 = 180 vérification de collision (sa fait beaucoup de code pour l'ordinateur)

==============

https://www.dropbox.com/s/xmdl0541gobr2f3/fichier%2029-06-2015%2014%2048%2028.png?dl=0

Avec mon System optimiser, j'ai un cube qui engobe les 6 autres (le verre sur l'image) et la vérification est si le cube de verre avec tout les autres, alors tu testera l'objet qui a eu la collision avec les 6 une seul fois. Donc si il y a 30 collision à verififier il va faire 1x30 verification de collision, et si il y a eu une collision, il va faire 6 verification avec l'objet en question, plus les 30 autres habituel sois 36 verification.

Ceci n'est peut être pas très claire mais un exemple serai mieu.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 16:53

Perso j'ai compris l'explication (malgrè le verre à la place du vert ... Wink )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 17:02

Moi également j'ai compris l'explication.
Merci jimx78

@jicehel

Tu t’es dirigé vers le verre pour voir s’il est vert et tu as rencontré un ver vert dans un verre.
Je sors en courant ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 17:07

Citation :
Je sors en courant !
c'est comme ça que Cendrillon a perdu sa pantoufle de vair, en courant vers la sortie.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 18:00

Pauvre jimx78 ... tu vas avoir mal à la tête avec tous ces verres... Bon bref, je ne voulais pas insister sur la faute car je sais que tu n'est pas à l'aise avec l'orthographe et ce n'est pas moi qui te jetterais la pierre car je fais pas mal de fautes aussi. Je voulais juste dire que malgrè cette faute qui change un peu le sens de la phrase, l'explication avait été très claire. En tout cas avec les 2 compères qui ont répondu depuis, tu as eu le droit à une panoplie d'homonymes et j'espère que tu t'y retrouveras Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 18:21

@jimx70

Et surtout, surtout que nos (mauvaises) blagues ne te font pas hésiter à poster pour partager tes idées, tes trucs, tes astuces.
On est sur un forum de programmation, pas de littérature.
Je ne dirai même pas faute, mais orthographe incorrecte. Qu'importe!
On en fait tous et sans exception, alors n’écoute pas ce que dit jicehel (c’est bien lui qui a commencé !)


Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
jimx78

avatar

Nombre de messages : 240
Age : 25
Localisation : Yvelines
Date d'inscription : 24/05/2010

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 19:31

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Lun 29 Juin 2015 - 20:13

On s’est donc tous trompé sur le verre, Jicehel le premier. Embarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Mar 30 Juin 2015 - 0:02

woui alors là, le coup du verre perso je ne connaissais pas, mais on en apprend tout les jours ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Nardo26

avatar

Nombre de messages : 2294
Age : 49
Localisation : Valence
Date d'inscription : 02/07/2010

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Mar 30 Juin 2015 - 16:39

Tout à fait Jicehel !

papydall a écrit:
On s’est donc tous trompé sur le verre[...]
Non, non ! Pas moi !
Aaaa la votre !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nardo26.lescigales.org
jimx78

avatar

Nombre de messages : 240
Age : 25
Localisation : Yvelines
Date d'inscription : 24/05/2010

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Mar 30 Juin 2015 - 18:17

A la tienne ;D

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

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

MessageSujet: Re: 2D/3D: mouvement basé sur le temps   Mar 30 Juin 2015 - 23:07

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: 2D/3D: mouvement basé sur le temps   

Revenir en haut Aller en bas
 
2D/3D: mouvement basé sur le temps
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» 2D/3D: mouvement basé sur le temps
» temps de chargement d'un swf sur l'appel d'un bouton ?
» [résolu] Départ d'une animation sur un temps suivant l'heure
» [Résolu] reglez le temps de l'animation sur un swf ?
» Temps de réponse au démarrage des locos

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Vos sources, vos utilitaires à partager-
Sauter vers: