IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

[SDL] Cliquer sur une image


Sujet :

SDL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [SDL] Cliquer sur une image
    Existe t'il une méthode qui permet de cliquer sur une image ?

  2. #2
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    non, tu dois toi meme coder cette fonction.
    Le mieux serait de faire une structure retenant la position et les dimension de l'image, et lors d'un click de comparer les coordonné du click avec celle de l'image afin de savoir si oui ou non le click a été fait sur l'image.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Ok merci

  4. #4
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Le SDL_Rect est une structure qui contient déjà tout ça
    Tu as les paramètres x, y, w, h pour la position x, la position y, la largeur, et la hauteur
    Plus tu pédales moins fort, moins t'avances plus vite.

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par Jocker34 Voir le message
    Existe t'il une méthode qui permet de cliquer sur une image ?


    Le SDL_Rect est une structure qui contient déjà tout ça
    Tu as les paramètres x, y, w, h pour la position x, la position y, la largeur, et la hauteur
    Oui, mais c'est pas tres pratique ...
    A chaque fois, il va falloir coder en dur les dimension. De plus le PO veux cliquer sur une image. Imagine qu'ils la positionne en (0,0). Avec juste un SDL_Rect, tu va devoir mettre les 4 parametre en dur. Apres, s'il veut bouger son bouton image, il va devoir changer les 4 parametre en dur, et je te raconte meme pas la galere s'il est pas organiser. C'est pour cela qu'une simple structure avec un SDL_Rect et un SDL_Surface* suffirai a faire ce qu'il de maniere relativement souple.

    Une methode "Button* CreateButton (int x, int y, char* pathImage)"
    Une methode "DestroyButton(Button* Abutton)"
    Une methode "void MoveButton(Button *Abutton, int newX, int newY)"
    ...


    sachant que dans chaque fonction il y est ce qu'il faut : Par exemple, convertir l'image chargé au meme BPP, verifier l'integrité de la position de l'image ....

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    C'est pour cela qu'une simple structure avec un SDL_Rect et un SDL_Surface* suffirai a faire ce qu'il de maniere relativement souple.
    je ne comprends pas ou tu veux en venir ; tu dis "non il ne faut pas utiliser de SDL_Rect" et ensuite "oui il suffit de prendre un SDL_Rect".
    A part cette solution d'utiliser SDL_Rect je ne vois pas autrement ; pour les mémoriser il suffit de faire un tableau dynamique ou bien un conteneur std :: list par exemple.
    Ensuite un simple parcours sur la liste pour savoir si les coordonnées de la souris sont comprises dans le rectangle qui délimite l'image..

  7. #7
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Je n'ai pas dit qu'il ne fallait pas utiliser de SDL_Rect, j'ai dit qu'utiliser un simple SDL_Rect en dehors d'une structure pouvait etre penible pour la flexibilité.

    La structure que je propose contient un SDL_Rect et un SDL_Surface*

    Si la personne qui post utilise le C++ (ou l'orienté objet), alors autant faire une mini classe, ca allegerai tout, puis un std::list effectivement pour gerer tout les bouton dynamiquement.

    Sinon, si c'est du C, implementation d'une structure, des methode et d'une liste chainé (mais ca depend de l'utilisation et cela me semble plutot "utiliser un marteau piqueur pour ecraser une mouche")

  8. #8
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    En fait, on a meme pas besoins de SDL_Rect :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    typedef struct Bouton Bouton;
    struct Bouton
    {
        int m_positionX;
        int m_positionY;
     
        SDL_Surface *m_image;
    };
     
     
    Bouton* CreerBouton (int positionX, int positionY, char *pathImage)
    {
        SDL_Surface *Temporaire = SDL_LoadBMP(pathImage);
        if (Temporaire == NULL)
        {
            fprintf(stderr, "Erreur lors de la creation d'un bouton : %s.\n", SDL_GetError());
            return NULL;
        }
     
        if (x<0 || LARGEUR_ECRAN<x || y<0 || HAUTEUR_ECRAN<y)
        {
            if (x<0 || LARGEUR_ECRAN<x)
                fprintf(stderr, "Erreur lors de la creation d'un bouton : Dimension x non valide\n");
     
            if (y<0 || HAUTEUR_ECRAN<y)
                fprintf(stderr, "Erreur lors de la creation d'un bouton : Dimension x non valide\n");
     
            return NULL;
        }
     
        if (LARGEUR_ECRAN < (x + Temporaire->w) || HAUTEUR_ECRAN < (y + Temporaire->h))
        {
            /* Le bouton ne sera pas entièrement visible, action a déterminer */
        }
     
        /* Ici, tout est bon, on peut creer le bouton */
        Bouton *UnBouton = (Bouton*) malloc (sizeof(Bouton));
     
        UnBouton->m_image = SDL_DisplayFormat(Temporaire);
        SDL_FreeSurface(Temporaire);
     
        UnBouton->m_positionX = positionX;
        UnBouton->m_positionY = positionY;
     
        return UnBouton;
    }
     
     
     
    void DetruireBouton (Bouton *UnBouton)
    {
        SDL_FreeSurface(UnBouton->m_image);
        free(UnBouton);
    }
     
    /* Fonction permettant de savoir si on a cliquer sur le Bouton
        renvoi le resultat sous forme de booleen */
    int Check (Bouton *UnBouton, int sourisX, int sourisY)
    {
        if (sourisX <= UnBouton->m_positionX && UnBouton->m_positionX+UnBouton->m_image->w <= sourisX && sourisY <= UnBouton->m_positionY && UnBouton->m_positionY+UnBouton->m_image->h <= sourisY)
            return 1;
        return 0;
    }
    Voila, j'ai fait le code de tete, donc il devrai y avoir des erreur mineure. En poussant un peu plus, on pourrait rajouter un pointeur de fonction dans la structure Bouton. Il suffirait alors de modifier legerement les trois methode ci dessus.

Discussions similaires

  1. [WD14] Liste image : double cliquer sur une image pour l'agrandir
    Par pixel016 dans le forum WinDev
    Réponses: 20
    Dernier message: 13/01/2013, 19h45
  2. Cliquer sur une image
    Par jackRackham dans le forum jQuery
    Réponses: 1
    Dernier message: 19/12/2011, 17h29
  3. Réponses: 6
    Dernier message: 15/11/2007, 12h31
  4. cliquer sur une image pour l'agrandir sur la meme page ?
    Par willynelle dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 16/04/2007, 22h50
  5. Réponses: 5
    Dernier message: 29/07/2006, 00h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo