Un peu de récréation :
Ce qui suit n'a rien à voir avec QStateMachine, mais il permet d'utiliser la méthode ensureVisible de la classe QGraphicsView qui permet un effet visuel dans le déplacement du joueur, et s'intègre facilement dans la structure du programme déjà réalisé.
Pour réaliser cela, j'ai ajouté l'étape 11 au git QStateMachine, téléchargeable dans le document cité plus haut.
Actuellement, dans une scène de dimensions plus importantes que la zone graphique, le joueur disparaîtrait dès qu'il aurait atteint la limite de la zone, puisque les frontières de son déplacement sont définies par la dimension de la scène, donc de l'image.
L'effet assumé par ensureVisible est que la scène reste immobile, tant que le joueur se déplace dans un espace rectangulaire paramétré à l'intérieur de la zone graphique. Dès que ce joueur atteint une des limites de cet espace, il semble se fixer et déclenche le défilement de la scène, jusqu'à ce que un bord de cette scène arrive à la limite de la zone graphique et, alors, le joueur reprend son déplacement jusque la fin de la zone, où il se fixe.
Comme vous pourrez le constater dans le git téléchargé, j'ai ajouté une image plus grande : motif/fond2.png et modifié quelques fichiers. Ces modifications sont commentées dans les fichiers
Le plus stupéfiant c'est le peu de modifications nécessaires pour obtenir cet effet :
Dans la classe Joueur :
connect(animationdelobjet,SIGNAL(valueChanged(QVariant)), this, SLOT(LeJoueurBouge(QVariant)));
et la fonction :
void Joueur::LeJoueurBouge(const QVariant &){ pvue->ensureVisible(this,200,200);}
Bonne détente
Daniel Génon
Partager