| 2D/3D: mouvement basé sur le temps | |
|
+3Jean Claude Jicehel silverman 7 participants |
Auteur | Message |
---|
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: 2D/3D: mouvement basé sur le temps Dim 28 Juin 2015 - 13: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
| |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: 2D/3D: mouvement basé sur le temps Dim 28 Juin 2015 - 21: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 ... | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 9: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+ | |
|
| |
jimx78
Nombre de messages : 241 Age : 33 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 11: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 | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 12:05 | |
| C'est le problème Silverman. Tu propose une solution intéressante, maintenant, il faut assurer le SAV car ça interesse du monde | |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 12: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 | |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 12: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"! | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 13: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. | |
|
| |
jimx78
Nombre de messages : 241 Age : 33 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 15: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=0Si 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=0Avec 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. | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 15:53 | |
| Perso j'ai compris l'explication (malgrè le verre à la place du vert ... ) | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 16: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 ! | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 16:07 | |
| - Citation :
- Je sors en courant !
c'est comme ça que Cendrillon a perdu sa pantoufle de vair, en courant vers la sortie. | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 17: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 | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 17: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é !) | |
|
| |
jimx78
Nombre de messages : 241 Age : 33 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 18:31 | |
| | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 19:13 | |
| On s’est donc tous trompé sur le verre, Jicehel le premier. | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: 2D/3D: mouvement basé sur le temps Lun 29 Juin 2015 - 23:02 | |
| woui alors là, le coup du verre perso je ne connaissais pas, mais on en apprend tout les jours ^^ | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: 2D/3D: mouvement basé sur le temps Mar 30 Juin 2015 - 15:39 | |
| Tout à fait Jicehel ! - papydall a écrit:
- On s’est donc tous trompé sur le verre[...]
Non, non ! Pas moi ! Aaaa la votre ! | |
|
| |
jimx78
Nombre de messages : 241 Age : 33 Localisation : Yvelines Date d'inscription : 24/05/2010
| Sujet: Re: 2D/3D: mouvement basé sur le temps Mar 30 Juin 2015 - 17:17 | |
| A la tienne ;D | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: 2D/3D: mouvement basé sur le temps Mar 30 Juin 2015 - 22:07 | |
| | |
|
| |
Contenu sponsorisé
| Sujet: Re: 2D/3D: mouvement basé sur le temps | |
| |
|
| |
| 2D/3D: mouvement basé sur le temps | |
|