1
Fenêtrage / Re: Problème avec la méthode sf::View::zoom
« le: Mai 02, 2018, 12:25:18 am »
Alors si j'ai bien compris, la méthode sf::View::zoom nous permet de zoomer en étant dans le référentiel actuel sur le zoom et non basé sur un " zoom de départ de 1" ainsi je dois forcement avoir une valeur fixe > 1 pour zoomer et son inverse soit 1/(cette même valeur) pour revenir au niveau de zoom de départ donc je ne peut pas utiliser ma variable "zoom" qui me permet de savoir quand j'atteins un certain niveau de zoom ou de dézoom défini par mes constante "MAX_ZOOM" et "MIN_ZOOM".
Mais j'ai trouvé mon erreur, en gros elle venait de ces deux lignes :
zoom *= 1-ZOOM_RATIO;
..
zoom *= 1+ZOOM_RATIO;
Et oui ! mon niveau en math est tel que pour moi : 1 * (1+a) * (1-a) = 1, sauf que non !
d'ou le décalage que j'obtenais au fur et à mesure de zoom et de dézooms successifs.
les nouvelles lignes sont donc :
void World::zoomWorld(bool flag_direction)
{
if (flag_direction == true && zoom >= MIN_ZOOM) {
this->world_view.zoom(0.9);
zoom -= ZOOM_RATIO;
}
if (flag_direction == false && zoom <= MAX_ZOOM) {
this->world_view.zoom(1/0.9);
zoom += ZOOM_RATIO;
}
}
Et là ça marche beaucoup mieux.
(Je m'excuse d'avance je ne trouve pas la balise pour mettre le code sous format "code c++" .. ^^' )
Mais j'ai trouvé mon erreur, en gros elle venait de ces deux lignes :
zoom *= 1-ZOOM_RATIO;
..
zoom *= 1+ZOOM_RATIO;
Et oui ! mon niveau en math est tel que pour moi : 1 * (1+a) * (1-a) = 1, sauf que non !
d'ou le décalage que j'obtenais au fur et à mesure de zoom et de dézooms successifs.
les nouvelles lignes sont donc :
void World::zoomWorld(bool flag_direction)
{
if (flag_direction == true && zoom >= MIN_ZOOM) {
this->world_view.zoom(0.9);
zoom -= ZOOM_RATIO;
}
if (flag_direction == false && zoom <= MAX_ZOOM) {
this->world_view.zoom(1/0.9);
zoom += ZOOM_RATIO;
}
}
Et là ça marche beaucoup mieux.
(Je m'excuse d'avance je ne trouve pas la balise pour mettre le code sous format "code c++" .. ^^' )