-
Bonjour .
J'aimerais gérer la vue en utilisant un delta sf::Time qui calcule le temps de chaque frame en microseconds, afin d'avoir un mouvement de caméra le plus fluide possible...
Je prend donc le parti de créer une variable "_viewValue" , qui va calculer le ratio des déplacements en fonction, donc, du deltaTime, et également de la taille du zoom . ( le but étant de bouger plus ou moins vite en fonction du zoom qui est oppéré sur la scène : plus on est proche, plus c'est lent et inversement ).
Je me retrouve alors avec une interrogation ( de débutant ) : comment bien gérer cette équation pour que la vitesse soit la même quelque soit la machine qui fait tourner le programme? Car je me retrouve a "bricoler" des mathématiques de façon un peu hasardeuse...ce qui donne :
_zoomRation = _viewMaximumZoom / _view.getSize().x ;
_viewValue = 10 / _deltaTime * _zoomRation ;
puis enssuite, j'ai, bien sur :
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
_view.move(-_viewValue,0);
}
etc...
( maximumZoom étant une constante de la taille.x de la fenêtre minimum que le zoom puisse atteindre, soit le plus proche )
Ma question :
Selon vous, ce code vous parait-il fiable/correct ? et ce quelque soit la puissance de la machine qui fait tourner le programme ?
Merci si vous pouvez m'aider
ps: je me suis finalement mi a l'anglais...Je suis grand, maintenant ;D
-
La formule est très simple :
deplacement = vitesse * temps
Ensuite tu n'as plus qu'à faire varier la vitesse en fonction du niveau de zoom.
ps: je me suis finalement mi a l'anglais...Je suis grand, maintenant
;D
-
ok, merci ;)
Maintenant, je ne sais pas si cela vient de mon code, mais quand je place un sf::time en référence dans une class pour l'utiliser, pour par ex le déplacement de la view, depuis une autre class, il fait n'importe quoi, ou plante ( sans m'éclairer particulièrement dans le débug ).
_data.setDeltaTime( 1 ) ;
_view.move ( _data.getDeltaTime() , 0 ) ;
( sachant que _data contient une référence sur le deltaTime crée depuis le main et qui est censé être à une seconde.
or si je fais ceci :
sf::Time bidul;
bidul = sf::seconds ( 0.1 ) ;
_view.move ( bidul.asSeconds() , 0 ) ;
ca marche.
Voilà, donc je voudrais savoir si un sf::Time a des conditions d'utilisation particulières ?
Merci si vous pouvez m'aider.
-
je voudrais savoir si un sf::Time a des conditions d'utilisation particulières ?
Non.
-
ok, merci pour ta réponse ;)
Je note cependant que quand j'utilise une référence d'un sf::Time, cela ne fonctionne pas, alors que la même chose avec un pointeur fonctionne...
J'utilise exactement le même procédé avec une sf::RenderWindow et cela fonctionne en référence...
Cela ne peut-il venir que de mon code, selon vous ?
-
Ouai, y'a sûrement quelque chose que tu fais mal.
-
ok...je vais voir ca. Merci ;)