Actions utilisant TimeDelta

Salut 4ian, j’espère que tu as passé de bonnes vacances :slight_smile:
Je viens donc t’embêter avec un nouveau problème pour fêter ça !
J’ai fait différentes vidéos de mon jeu avec FRAPS; le logiciel limite automatiquement le jeu
à 30 images/secondes pour l’enregistrement. Je vois donc un gros problème : les déplacements
utilisant TimeDelta sont totalement modifiés : les enemis se dirigent à toute vitesse sur le joueur,
les divers débris quasi invisibles tellement ils sont rapides, etc…
J’avais à l’origine limité mon jeu à 80 images/secondes afin de voir si il était fluide en toute condition
et c’est là-dessus que j’ai calibré tous les mouvements. Mais si jamais le jeu rame sur l’ordinateur
de quelqu’un d’autre et qu’il y a donc moins d’images/secondes, tous les mouvements seront donc
imprécis ? Apparemment, je ne sais pas comment procéder pour résoudre ce souci…

Il ne faut surtout [size=150]pas utiliser TimeDelta() avec les forces[/size], ça entraînerait des problèmes de vitesse. Mais on peux l’utiliser avec les actions de positionnement.

T’a en effet dû faire une erreur quelque part, ce qui peut être majoritairement :

-Utiliser TimeDelta() avec les forces. Les forces prennent déjà compte du temps écoulé depuis la dernière image.
-Ne pas utiliser TimeDelta sur des actions qui le nécessiterait ( genre des actions qui modifient de façon continue une variable ).

Si des éléments du jeu accélerent quand les fps baisse, il est probable que ce soit le premier point qui cloche.

Oooooh… j’ai dû vraiment mal interpréter un de tes conseils… Ah, quel petit débutant !
Bon, je crois que je vais devoir refaire pas mal d’actions :cry:

Une autre question à peu près dans le même sujet :
Mon jeu rame un peu quand il y a trop de vaisseaux ennemis : j’essaie donc entre autres
de simplifier (optimiser) leurs déplacements. Le fait que je leur attribue des déplacements
avec un multiplicateur 0 plutôt que 0.5 (j’adapterai la force bien sûr) aidera-t-il à avoir plus de fps ?
J’espère m’être correctement exprimé…

D’un autre coté, ce serait idiot d’imposer le fait de devoir moduler la longueur d’une force suivant le temps. :slight_smile:
Je recolle la réponse que j’avais fait à Cross à propos de la même chose :

J’avoue que comprendre et bien utiliser TimeDelta() n’est pas simple, mais en fait, il s’agit juste de bien faire attention à l’utiliser quand on a quelque chose qui est en fonction du temps, et que ce n’est pas géré pas déjà géré par GD.

Ok, je me suis donc mal exprimé.
Non, je te parlais juste du multiplicateur d’une force. J’ai bien compris à propos de TimeDelta.
Si je met le multiplicateur d’une force à 0 ou à 0.5 (par exemple), cela influe-t-il sur la quantité de mémoire
que l’action va utiliser ?

Je voulais imposer une force constante à un objet, afin que sa trajectoire soit fluide mais aussi dynamique
(ennemi qui suit le vaisseau du joueur où qu’il soit).
J’admets que ma méthode puisse en effet paraître idiote maintenant.

Question mémoire, non, il y a toujours une variable pour la dissipation :

[code]class GD_API Force
{

//…
float clearing;

//…
};[/code]

Question performance, une force avec une dissipation de 0 dès la fin des évènements. Mais pour conserver le même effet qu’une force à dissipation de 0.5, tu va devoir utiliser une longueur modulée par une variable ou ce genre de truc. Et dans ce cas, la dissipation directement codée en C++ et déjà intégrée aux calculs sera surement plus efficace.

En tout cas, je suis sûr qu’utiliser timeDelta dans la longueur d’une force est une mauvaise idée. ( On peut néanmoins faire varier la longueur d’une force avec une variable, mais il n’y a pas à faire intervenir TimeDelta() ).

Je n’aurais peut-être pas dû formuler ma seconde question dans le même sujet, ça a prêté à confusion…
Oui, oui, j’ai bien compris, ne t’inquiètes pas !

Ok, il faut donc que je trouve d’autres moyens d’optimiser leur comportements (en dehors des déplacement)s.

Merci :slight_smile: