Bonjours a tous,
Je souhaite faire un système de "map" sur laquelle les joueurs pourront zoomer et dé-zoomer à leur guise, ainsi j'utilise une view prenant tout mon écran dans laquelle une sf::RectangularShape sert de map.
Pour zoomer j'utilise la fonction sf::View::zoom sur cette vue avec par exemple un coefficient de 1.25 et pour dé-zoomer j'inverse la tendance avec un coefficient de 0.8.
Les valeurs de zoom max et min sont gérées via une autre variable que j'incrémente moi même pour chaque zoom et dé-zoom étant donné qu'il n'est pas possible de récupérer le zoom actuel d'une view via par exemple une méthode sf::View::getView...
Mon problème est qu'en exécutant une suite de zoom puis une suite de dé-zoom plusieurs fois, ma carte devient de plus en plus petite ...
Ainsi en exécutant cette manip un nombre de fois tendant vers l'infinie ma map tend à disparaître due au fait qu'elle soit de plus en plus petite.
Si quelqu'un à une idée voilà mon code ^^ :
void World::zoomWorld(bool flag_direction)
{
if (flag_direction == true && zoom >= MIN_ZOOM) {
this->world_view.zoom(0.8);
zoom *= 1-ZOOM_RATIO;
}
if (flag_direction == false && zoom <= MAX_ZOOM) {
this->world_view.zoom(1/0.8);
zoom *= 1+ZOOM_RATIO;
}
}
avec ::
#define MAX_ZOOM 1.40
#define MIN_ZOOM 0.60
#define ZOOM_RATIO 0.05