Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - CmoiPat

Pages: [1]
1
Bonjour,

En effet Starfighter ce n'est pas une bêtise et Laurent confirme. Au sein de la boucle d'évènement le problème est le même (j'avais déjà essayé) mais en rajoutant une condition tout est bon (ça je ne l'avais pas fait   :-[):
if (Event.Type == sfEvtMouseMoved)
            {
                position_souris_X = Event.MouseMove.X;
                position_souris_Y = Event.MouseMove.Y;
            }
 
Et là, plus de problème  8)

Merci Laurent pour ta réponse, je ne sais pas pourquoi mais au vu de mon besoin, je trouvais que sfInput correspondait à de l'artillerie lourde.

Merci de m'avoir aiguillée.

CmoiPat

2
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  :o

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

Pages: [1]
anything