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 :

Collision entre souris et objet


Sujet :

SDL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut Collision entre souris et objet
    bonjour,

    est-il possible d'effectuer un test de collision entre le pointeur de la souris (quand l'utilisateur clique) et un objet ?
    ce sera pour réaliser un jeu de type click and play an C avec la SDL

    merci

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Il faudra le faire à la main, la difficulté dépendra du type de jeu... Dans un jeu en 3D cela est plus difficile à gérer que dans un jeu en 2D...

    Si tu utilises que des surfaces 2D à ce moment là, je ne pense pas que ce soit très difficile...

    Donc quel est le type de jeu ?
    Jc

  3. #3
    Membre éprouvé

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Points : 1 205
    Points
    1 205
    Par défaut
    Oui c'est tout a fait possible, mais la question est un peu vague là... Il suffit de gérer les événements souris, et de tester sur tes objets. Sur quoi tu butes exactement ? Si tu n'as aucune idée commence par éplucher la FAQ et les tutoriels sur SDL de Développez .
    Fiquet
    - FAQ SDL
    - FAQ C++

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par fearyourself
    Donc quel est le type de jeu ?
    un jeu en 2d type monkey island.


    Citation Envoyé par Fiquet
    Sur quoi tu butes exactement ?
    Comment s'y prendre pour savoir comment gérer les collisions entre souris et un objet et surtout quand les formes de l'objet ne sont pas du tout classiques (pas de rectangle ou carré ou cercle...).

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par youp_db
    Comment s'y prendre pour savoir comment gérer les collisions entre souris et un objet et surtout quand les formes de l'objet ne sont pas du tout classiques (pas de rectangle ou carré ou cercle...).
    Si ton jeu est en 2D, tu dessines en carré ou triangle utilisant la valeur Alpha pour une transparence.

    En gardant ce concept de carré, tu peux facilement connaître la liste des objets dans lequel la souris se trouve. En les ordonnant du plus proche au plus loin, tu regarde quel pixel tu touches sur chaque image et la première image dont le pixel n'est pas transparent est l'objet que tu touches...

    Jc

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    pourquoi ce code ne fonctionne pas ?

    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
     
    int verif_collision(SDL_Rect obj, SDL_Event event)
    {
         int i=0;
         int k=0;
         int verif_x=0;
         int verif_y=0;
     
         for(i=obj.y;i<obj.h;i=i+0.000001)
         {
                        if(i==event.button.y) verif_y=1;
                        for(k=obj.x;k<obj.w;k=k+0.000001)
                        {
                                                    if(k==event.button.x) verif_x=1;
     
                        }
         }
     
         if(verif_x==1 && verif_y==1) return 0;
     
         return 1;
     
    }

  7. #7
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,

    Oula, ton code est euh spéciale, j'aurai pas du tout fait comme ça. Pour tester si un click se fait sur une surface, tu teste si le point où tu click se trouve dans une surface rectangulaire.

    donc voici comme tu pourrai modifier ton code :

    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
     
    int verif_collision(SDL_Rect obj)
    {  
      int x, y;
      Uint8 MouseState;
      //On récupère l'état de la souris
      MouseState = SDL_GetMouseState(&x, &y);
     
      /* Code à exécuter si l'on a appuyé sur le bouton gauche */
      if (MouseState & SDL_BUTTON(SDL_BUTTON_LEFT)) {
     
        //On test si le click se fait sur une surface
          if ( (obj.x < x) && ( ((obj.x) + (obj.w)) > x) &&
               (obj.y < y) && ( ((obj.y) + (obj.h)) > y)) {
     
             return 1; //Click sur la zone
          }
        }
      }
         return 0; //en dehors de la zone
     
    }
    j'ai pas testé, mais ça devrai pas être loin de ça ;-)
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je suis d'accord avec MrDuChnok...

    Ta solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      for(i=obj.y;i<obj.h;i=i+0.000001)
    ajoute un flottant à un entier... C'est déjà un mauvais début
    (surtout ajouter un flottant qui est plus petit que 1)

    Jc

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par fearyourself
    Je suis d'accord avec MrDuChnok...

    Ta solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      for(i=obj.y;i<obj.h;i=i+0.000001)
    ajoute un flottant à un entier... C'est déjà un mauvais début
    (surtout ajouter un flottant qui est plus petit que 1)

    Jc
    oups effectivement, pas fait attention

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

Discussions similaires

  1. collision entre 2 objets à déterminer
    Par AnozerOne dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 31/07/2012, 21h11
  2. Gestion de collisions entre objets mobiles?
    Par Benjilabu dans le forum Caml
    Réponses: 3
    Dernier message: 10/01/2011, 21h32
  3. Fonction pour tester la collision entre deux objets
    Par izissie dans le forum Newton
    Réponses: 1
    Dernier message: 22/09/2010, 20h56
  4. GLScene et les collisions entre les objets
    Par HopeLeaves dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 13/06/2005, 19h45
  5. Réponses: 4
    Dernier message: 25/09/2004, 09h58

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