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 :

Utiliser les coordonnées d'un objet en zone


Sujet :

SDL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut Utiliser les coordonnées d'un objet en zone
    Bonsoir,
    j'aimerai qu'il y ait une zone où lorsque l'utilisateur clique dessus, il se passe quelque chose.
    Par exemple la zone où est "Nouvelle Partie" si l'utilisateur met la souris dessus, et qu'il clique, la nouvelle partie est lancée.

    Je pensais l'écrire comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((positionSouris.x <= 500) && (positionSouris.x >= 400)) && ((positionSouris.y <= 150) && (positionSouris.y >= 100)))
    Mais apparemment non?

  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
    Pour l'instant, la seul erreur que je voit avec ton code c'est qu'il manque la première parenthèse qui englobe ton if .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if  ( ((positionSouris.x <= 500) && (positionSouris.x >= 400)) && ((positionSouris.y <= 150) && (positionSouris.y >= 100)))
    Sinon, tu peux réduire ton code a ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if  ( (positionSouris.x <= 500) && (positionSouris.x >= 400) && (positionSouris.y <= 150) && (positionSouris.y >= 100))
    ou même ceci : ( Je sais pas si ca marche, je confond peut être avec le pascal ... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if  ( positionSouris.x <= 500 && positionSouris.x >= 400 && positionSouris.y <= 150 && positionSouris.y >= 100)
    Voila

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Merci pour ta réponse, mais ça n'a pas l'air de marcher. J'ai essayé comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                case SDL_MOUSEBUTTONDOWN:
                    if (event.button.button == SDL_BUTTON_LEFT)
                        clicGauche = 1;
                break;
     
                case SDL_MOUSEMOTION:
                    if (( (positionSouris.x <= 407) && (positionSouris.x >= 223) && (positionSouris.y <= 173) && (positionSouris.y >= 141)) && (clicGauche == 1))
                    {
     
                       ok = IMG_Load("ok.png");
                        positionOK.x = 420;
                        positionOK.y = 140;
                    }
            }
    Pour faire mon test, j'ai décidé qu'une fois qu'on clique dans cette zone, l'image "ok" apparaît

  4. #4
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                       ok = IMG_Load("ok.png");
                        positionOK.x = 420;
                        positionOK.y = 140;
    Il faut aussi blitter l'image sur l'écran.

    Regarde le tuto du morpion de fearyourself, au début, ou les tutos de loka pour voir comment détecter qu'on clique dans une zone.

  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
    Salut,

    A quelle type correspond exactement positionSouris ?
    Si c'est un SDL_Rect, c'est normal que ce ne marche pas.

    Pour récupérer la position de la souris, il y a deux manières .

    Celle que tu connais et que tu as utilisé :
    Tu utilise la "sous-variable" event.button.x et event.button.y

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    case SDL_MOUSEBUTTONDOWN:
        if ((event.button.button == SDL_BUTTON_LEFT)&&(event.button.x <= 407)&&(event.button.x >= 223)&&(event.button.y <= 173)&&(event.button.y >= 141))
                       ok = IMG_Load("ok.png");
                        positionOK.x = 420;
                        positionOK.y = 140;                   
                break;

    La deuxième, tu la connais peut etre pas :
    Si tu regarde la doc, tu trouveras cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SDL_GetMouseState -- Retrieve the current state of the mouse
    Synopsis
     
    #include "SDL.h"
     
    Uint8 SDL_GetMouseState(int *x, int *y);
     
    Description
     
    The current button state is returned as a button bitmask, which can be tested using the SDL_BUTTON(X) macros, and x and y are set to the current mouse cursor position. You can pass NULL for either x or y.

    par exemple tu peux faire ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        // Pour savoir quel bouton a ete pressé, il suffit de remplacer le terme de droite par le bouton voulu    
        if (SDL_BUTTON(SDL_GetMouseState(NULL, NULL)) == SDL_BUTTON_LEFT )
     
        // Recupere les coordonné de la souris
        int souris_x, souris_y;
        SDL_GetMouseState(&souris_x, &souris_y);
     
        // Pour avoir les deux precedent
        int souris_x, souris_y;
        if (SDL_BUTTON(SDL_GetMouseState(&souris_x,&souris_y)) == SDL_BUTTON_LEFT )
    Ces morceaux de code ne se mettent pas dans la boucle de traitement des evenements !


    Voila, avec ca, tu devrais pouvoir t'en sortir

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Points : 48
    Points
    48
    Par défaut
    Merci SofEvans tu m'as bien expliqué les différentes manières et ça a marché

    et merci aussi aux autres pour avoir tenté de m'aider!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 12/12/2014, 15h51
  2. [Graphics View] Récupérer les coordonnées d'un objet
    Par sepiropht dans le forum Débuter
    Réponses: 0
    Dernier message: 06/07/2012, 08h57
  3. Faire un rollover sur une image en utilisant les coordonnées X & Y
    Par reman dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/04/2010, 11h16
  4. Comment générer les coordonnées d'un objet 3D ?
    Par rhb.ch dans le forum API graphiques
    Réponses: 1
    Dernier message: 14/04/2010, 17h33
  5. Réponses: 9
    Dernier message: 28/05/2008, 02h06

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