Bonjour,
Je fais mes débuts sur la SFML 1.6 et je rencontre un problème sur le retour de position de la souris avec les fonctions MouseMove.X et MouseMove.Y
Mon objectif est simple, je veux juste remplacer le curseur de la souris par une image.
Lorsque je clic dans la fenêtre windows, je n'affiche plus le curseur et j'utilise un sprite pour afficher mon image aux coordonnées de la souris. Lorsque je reclic, le curseur revient. Jusque là tout va bien
sauf que
Je ne sais pas pourquoi mais les coordonnées retournées par MouseMove.X et MouseMove.Y partent dans les choux au moment d'un clic sur n'importe quel bouton de la souris ou même lors de l'utilisation de la molette. Il suffit de bouger d'un poil la souris pour que les coordonnées redeviennent bonnes
J'ai extrait le code qui met en évidence le phénomène :
#include <stdio.h>
#include <stdlib.h>
#include <SFML/Config.h>
#include <SFML/Graphics.h>
int main()
{
int activation_deplacement = 0;
//Création d'une fenêtre windows
sfWindowSettings Settings = {24, 8, 0};
sfVideoMode Mode = {1000, 1000, 32};
sfRenderWindow* Fenetre;
Fenetre = sfRenderWindow_Create(Mode, "Papier&Crayon", sfResize | sfClose, Settings);
if (!Fenetre) return EXIT_FAILURE;
//Création des images de la souris "mainOuverte" & "mainFermee"
sfImage* mainOuverte;
mainOuverte = sfImage_CreateFromFile("Images/Main_ouverte.png");
if (!mainOuverte) return EXIT_FAILURE;
sfImage_SetSmooth(mainOuverte,0);
sfImage_CreateMaskFromColor(mainOuverte, sfColor_FromRGB(255, 255, 255), 0);
sfSprite* Sprite_mainOuverte;
Sprite_mainOuverte = sfSprite_Create();
sfSprite_SetImage(Sprite_mainOuverte, mainOuverte);
sfImage* mainFermee;
mainFermee = sfImage_CreateFromFile("Images/Main_fermee.png");
if (!mainFermee) return EXIT_FAILURE;
sfImage_SetSmooth(mainFermee,0);
sfImage_CreateMaskFromColor(mainFermee, sfColor_FromRGB(255, 255, 255), 0);
sfSprite* Sprite_mainFermee;
Sprite_mainFermee = sfSprite_Create();
sfSprite_SetImage(Sprite_mainFermee, mainFermee);
//Boucle pour les évènements de la fenêtre
sfEvent Event;
while (sfRenderWindow_IsOpened(Fenetre))
{
while (sfRenderWindow_GetEvent(Fenetre, &Event))
{
if (Event.Type == sfEvtClosed) sfRenderWindow_Close(Fenetre);
if (Event.Type == sfEvtMouseButtonReleased)
{
if (Event.MouseButton.Button == sfButtonLeft)
{
if (activation_deplacement == 1)
{
activation_deplacement = 0;
sfWindow_ShowMouseCursor(Fenetre, 1);
}
else activation_deplacement = 1;
}
}
}
/* Efface le contenu de la fenêtre */
sfRenderWindow_Clear(Fenetre, sfColor_FromRGB(100, 100, 100));
//Modifie le curseur de la souris
if (activation_deplacement == 1)
{
//colle le sprite de la main ouverte
sfWindow_ShowMouseCursor(Fenetre, 0);
sfSprite_SetPosition(Sprite_mainOuverte, Event.MouseMove.X, Event.MouseMove.Y);
sfRenderWindow_DrawSprite(Fenetre, Sprite_mainOuverte);
}
// Met à jour le contenu de la fenêtre (affichage)
sfRenderWindow_Display(Fenetre);
}
sfSprite_Destroy(Sprite_mainOuverte);
sfImage_Destroy(mainOuverte);
sfSprite_Destroy(Sprite_mainFermee);
sfImage_Destroy(mainFermee);
sfRenderWindow_Destroy(Fenetre);
return EXIT_SUCCESS;
}
Si vous avez des commentaires, des idées, un marteau... Je suis preneur.
Merci beaucoup
CmoiPat