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 :

Bug d'un Event SDL (clic de souris) [SDL 1.2]


Sujet :

SDL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Bug d'un Event SDL (clic de souris)
    Salut à tous (ou resalut!)
    Je réalise un projet SDL et je gère différents événements de touches...
    J'avais pour idée de gérer une de mes fonctions avec un clic gauche sur une case du tableau 2D...
    Hors les conditions compliquées de cette fonction, j'ai l'impression que je n'arrive pas à récupérer les coordonnées de x et y via event.button.x et event.button.y (dès que je selectionne une case censée répondre aux conditions, segfault)...

    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
     
    int event(info_pecheur *pecheur, int continu){
       if (pecheur==NULL) exit(EXIT_FAILURE);
       int x=pecheur->x;
       int y=pecheur->y;
       int tmp;
       SDL_Event event;
       SDL_WaitEvent(&event);
          switch(event.type){
     
    (...)
     
             case SDL_MOUSEBUTTONUP:
                if (event.button.button == SDL_BUTTON_LEFT) {
                   int coordx=event.button.x;
                   int coordy=event.button.y;
                   continu=peche_alternative(pecheur, coordx, coordy);
                }
                return continu;
                break;
     
    (...)
     
    int peche_alternative(info_pecheur *pecheur, int coordx, int coordy){
       if (pecheur==NULL) return 1;
                     switch(pecheur->orientation){
                         int diffx = abs(coordx-pecheur->x);
                         int diffy = abs(coordy-pecheur->y);
     
     
                         case 0:
     
                            if(coordy<pecheur->y && diffx<=0.5*diffy && (diffx+diffy)<=RANGECANNE && pecheurtab[coordx][coordy].food==1) {
    //On se place dans l'angle (3pi/8,5pi/8) (schéma d'un cercle trigo!)
     
                               pecheur->sac+=tab[coordx][coordy].taille;
                               tab[coordx][coordy]=espece(0);
                            }
                          break;
     
    (...)
    J'hésitais entre passer les coordonnées en paramètre ou passer l'event, mais il me semble que ça ne change rien... Quelqu'un a une idée de la provenance de l'erreur?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    [code]pecheur->sac+=tab[coordx][coordy].taille;
    tab[coordx][coordy]=espece(0);

    Cela veut dire que vous avez un tableau de la taille en pixel de la fenêtre ? Car coordx/coordy, ce sont les coordonnées de la souris, en pixels.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(coordy<pecheur->y && diffx<=0.5*diffy && (diffx+diffy)<=RANGECANNE && pecheurtab[coordx][coordy].food==1)
    Pourquoi une condition si compliquée ? Vous êtes certains de ce que vous faites. Je déboguerais bien cette condition si j'étais vous. Ou du moins, je décomposerai le test sur plusieurs lignes.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Vous avez raison, en effet l'erreur venait du fait que la taille est en pixel (je pensais naivement que c'était en case), ce qui fait que j'effectue les opérations dans une case qui est non allouée, segfault. Il suffisait de diviser par la taille en pixel d'une case.
    Quant aux conditions elles marchent après quelques modifications, là n'était pas le problème!
    Merci.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/02/2012, 16h34
  2. Réponses: 8
    Dernier message: 14/03/2005, 21h43
  3. Emuler et detecter un clic de souris (G, D, mollette)
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/02/2005, 17h25
  4. Réponses: 2
    Dernier message: 12/07/2004, 11h43
  5. Selection par clic de souris
    Par bilbonec dans le forum OpenGL
    Réponses: 7
    Dernier message: 16/04/2004, 00h25

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