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

 C++ Discussion :

Conseil & Piste - Gestion des mouvement et collision


Sujet :

C++

  1. #1
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut Conseil & Piste - Gestion des mouvement et collision
    Bonjour,

    Dans le but d'acquérir de l'expérience et des notions je me suis lancer dans la programmation d'un jeu en C++ avec la librairie graphique SDL.

    Je bute actuellement sur la notion des collision.

    En réalité, mon jeu comporte un vaisseau spatial (capable de se mouvoir à l'infinie sur 360°) et des astéroïdes. Le but est de détruire les astéroïde (rien de bien révolutionnaire).

    Le probleme qui se pose est de savoir comment gérer les collision entre les différents acteur ?
    En l'occurrence, je cherche juste a traiter le cas de la collision entre le vaisseau et les astéroïdes.

    J'ai dabord penser a ceci.

    Lorsque le vaisseau bouge, je met a jour ses coordonné.
    Puis je met a jour les coordonné des astéroïde et j'utilise une détection au pixel-perfect (grâce a la librairie SGE) afin de savoir si oui ou non il y a collision.

    De prime abord, cette solution me paraissait satisfaisante.
    Mais imaginons le cas suivant :

    Le vaisseau se situe en un point quelconque. A 30 pixel a droite, il y a un astéroïde. Si mon vaisseau se déplace de 60 pixel vers la droite d'un coup, il va littéralement traverser l'astéroïde sans pour autant qu'une collision soit détecté.

    J'ai imaginé plusieurs procédés, mais aucun ne me satisfait vraiment, et me parait trop complexe a mettre en œuvre.

    C'est ici que je m'en remet a vous

    Dans le cas d'un jeu en temps reel ou les vitesse son suffisamment élever pour que le cas cité dessus se produise, quel algorithme mettriez vous en place ?

    Merci de votre lecture.

  2. #2
    Membre actif
    Étudiant
    Inscrit en
    octobre 2007
    Messages
    189
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2007
    Messages : 189
    Points : 211
    Points
    211
    Par défaut
    Perso je tracerais un segment entre le point de départ et le supposé point d'arrivée. S'il ce segment coupe un objet alors une certaine action doit être exécutée ( exploser, immobiliser en ce point, ... ) . Mais je ne sais pas du tout si c'est une bonne solution au niveau de l'implémentation et des performances.

  3. #3
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Merci,

    J'y avais deja pensé, mais je me demande comment je gérerai le cas ou le segment coupe plusieurs astéroïdes ?

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 480
    Points : 29 761
    Points
    29 761
    Par défaut
    Salut,
    Citation Envoyé par SofEvans Voir le message
    Merci,

    J'y avais deja pensé, mais je me demande comment je gérerai le cas ou le segment coupe plusieurs astéroïdes ?
    En t'arrêtant au premier

    A moins que le "pouvoir de destruction" des astéroïdes ne soit variable, auquel cas, tu applique les dégâts respectifs de chaque astéroïde jusqu'à les avoir tous passés en revue ou jusqu'à destruction du vaisseau
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Hum, tout cela est encore flou pour moi, je ne vois pas bien comment proceder.

    Est ce que je dois tracer tout les segment puis je les compare ?
    Est ce que je dois faire autrement ?

    Je vais essayer de coder tout cela.

  6. #6
    Membre actif
    Étudiant
    Inscrit en
    octobre 2007
    Messages
    189
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2007
    Messages : 189
    Points : 211
    Points
    211
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    Hum, tout cela est encore flou pour moi, je ne vois pas bien comment proceder.

    Est ce que je dois tracer tout les segment puis je les compare ?
    Est ce que je dois faire autrement ?

    Je vais essayer de coder tout cela.
    Tu ne peux pas te lancer dans le code tant que tu ne sais pas exactement ce que tu veux/dois faire. C'est le truc à ce casser les dents.

    Tu peux observer ton monde de la façon suivante : aucun évènement ( ie un déplacement ) n'est simultané ; ils se déroulent tous à la suite. Ainsi tu n'as qu'à t'occuper d'un seul déplacement à la fois et donc d'un seul segment à la fois.

    Prends une feuille de papier et dessine toi quelques situations pour mieux comprendre ce que tu cherches à coder.

  7. #7
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Ce que je voudrait faire, c'est gerer les collision entre plusieurs acteur (projectile/vaisseau et asteroid/vaisseau et projectile/asteroid).

    Si je m'en tiens a ton idée, il risque d'y avoir des probleme. En effet, considerons un carré : sur le milieu du cote gauche, il y a un vaisseau et sur le milieu du cote bas, il y a un asteroid.
    Si on suppose que le vaisseau se deplace vers la droite et l'asteroid vers le haut, on arrive a ceci : On deplace dabord le vaisseau : aucune collision. On deplace ensuite l'asteroid : aucun collision. Le probleme viens du fait que si les deux avaient bougé simultanement, il y aurait eu collision !

    C'est parce que les vitesse de mes asteroid sont grande que je suis reticent a coder ceci.
    C'est pour cela que je demande votre avis.

  8. #8
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : juin 2009
    Messages : 646
    Points : 838
    Points
    838
    Par défaut
    Il existe des libs pour sdl chargées de traiter les collisions.
    http://www.libsdl.org/libraries.php

    Celle-ci à l'air d'être référencé souvent:
    http://en.wikipedia.org/wiki/SDL_Collide

  9. #9
    Membre chevronné Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    mars 2009
    Messages
    1 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : mars 2009
    Messages : 1 021
    Points : 2 053
    Points
    2 053
    Par défaut
    Citation Envoyé par metagoto Voir le message
    Il existe des libs pour sdl chargées de traiter les collisions.
    http://www.libsdl.org/libraries.php

    Celle-ci à l'air d'être référencé souvent:
    http://en.wikipedia.org/wiki/SDL_Collide
    Merci de ta contribution, mais ce n'est pas ce que je demande.
    J'ai deja une librairie pour les collision qui me permet de faire du pixel-perfect (il s'agit de la SGE).

    Ma question porte sur l'algorithme.
    J'ai 10 asteroid qui vont a des vitesse variable mais rapide, j'ai un vaisseau qui peut tirer des projectile (qui eux aussi vont rapidement).
    Je sais deja comment savoir s'il y a une collision, mais je me pose des questions quand a la mise en oeuvre de l'animation de tout ce beau monde.

  10. #10
    Membre actif
    Étudiant
    Inscrit en
    octobre 2007
    Messages
    189
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2007
    Messages : 189
    Points : 211
    Points
    211
    Par défaut
    Alors au lieu de faire un seul segment, tu peux en faire plusieurs : les deux extrêmes par exemple.

    Au fait, Box2D ne conviendrait-elle pas à ta situation ? ( Je ne l'ai jamais utilisée. )

  11. #11
    Candidat au Club
    Homme Profil pro
    reconversion
    Inscrit en
    juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : reconversion
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : juin 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Cherche tuto sur SDL_sge !
    Bonjour, j'ai absolument besoin d'utiliser la bibliothèque sge pour gérer les collisions. Mais je ne trouve aucun tuto qui explique comment utiliser les fonctions. Auriez-vous un lien svp ? Merci

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    5 153
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : juin 2007
    Messages : 5 153
    Points : 16 965
    Points
    16 965
    Par défaut
    Pour commencer, crée ton propre sujet, plutot que de déterrer un vieux de plus de 5 ans, ensuite, si tu prolonge une discussion mieux vaut l'avoir lue. Tu as déjà tes réponses.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  13. #13
    Candidat au Club
    Homme Profil pro
    reconversion
    Inscrit en
    juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : reconversion
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : juin 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Mrci du conseil.....
    Salut. Evidemment que j'ai lu la discussion. Le fait est que sge contient une bonne demi-douzaine de fonctions pour gérer les collisions, et que celle que je voudrais utiliser n'est pas celle dont vous parlez, celle de la gestion des pixels. Je sais qu'elle existe mais je n'ai pas trouvé de tuto. Donc si je pose la question, tu peux peut être me laisser le bénéfice du doute ?

Discussions similaires

  1. [2.x] Petit conseil sur la gestion des Entity
    Par grinder59 dans le forum Symfony
    Réponses: 4
    Dernier message: 26/03/2014, 10h25
  2. Réponses: 2
    Dernier message: 31/10/2012, 16h48
  3. application windows pour gestion des mouvements d'un stock
    Par Yousraao dans le forum Mon programme
    Réponses: 1
    Dernier message: 16/08/2012, 02h30
  4. [MCD] Gestion des mouvements des climatiseurs
    Par rec82 dans le forum Schéma
    Réponses: 9
    Dernier message: 14/07/2010, 18h54
  5. Conseils sur la gestions des erreurs en Java
    Par Clorish dans le forum Général Java
    Réponses: 8
    Dernier message: 26/03/2008, 16h03

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