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

Physique Discussion :

[Box2D] Détecter un passage, sans body


Sujet :

Physique

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut [Box2D] Détecter un passage, sans body
    Bonjour, je souhaite détecter une espèce de collision, mais sans réel collision.
    En fait, j'ai un panier de basket composé de 2 body pour l'anneau et je souhaite détecter si le ballon passe entre les 2.
    Il me faudrait donc une espèce de corps traversable, mais qui gère quant même la collision.
    une idée ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par dawadam Voir le message
    Bonjour, je souhaite détecter une espèce de collision, mais sans réel collision.
    En fait, j'ai un panier de basket composé de 2 body pour l'anneau et je souhaite détecter si le ballon passe entre les 2.
    Il me faudrait donc une espèce de corps traversable, mais qui gère quant même la collision.
    une idée ?
    La collision entre deux formes est un concept tout ce qu'il y a de plus logique. Rien ne dit que les formes en questions sont non-traversables.

    Fort logiquement, tu fais ta collision normalement. Tu te sers du résultat pour savoir si le panier est marqué ou non.

    Personnellement, je choisirai une sphere, située entre les deux formes. Si le ballon est entièrement compris dans cette sphère et si son centre est situé sous le plan défini par le cerceau, alors il y aura panier. La différence de diamètre entre le ballon et le cerceau devrait laisser une marge d'erreur suffisante au cas où.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Bon, je croie avoir compris que c'est fort simple en fait.

    Il me manque seulement une information :

    Comment rendre un corps traversable ?

    Pour la collision, je pensai prévoir deux formes, de manière à détecter si le ballon vient du haut ou du bas...

    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par dawadam Voir le message
    Bon, je croie avoir compris que c'est fort simple en fait.

    Il me manque seulement une information :

    Comment rendre un corps traversable ?

    Pour la collision, je pensai prévoir deux formes, de manière à détecter si le ballon vient du haut ou du bas...

    Merci
    Tout corps logique est traversable par défaut. C'est toi qui lui dit qu'il ne l'est pas, en lui interdisant l'intersection
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Tout corps logique est traversable par défaut. C'est toi qui lui dit qu'il ne l'est pas, en lui interdisant l'intersection
    Je travaille sur le portage Java et il me semble que par défaut, les objets sont solides !

    Voilà comment je crée ma balle :
    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
     
            // le world est créé, avec le AABB et la gravité
            //
            // cercle
            CircleDef circle = new CircleDef();
            circle.radius = 20;
            circle.density = 1;
            circle.friction = 0.3f;
            circle.restitution = 0.8f;
            // définition du corps
            BodyDef bodyDef = new BodyDef();
            bodyDef.position.x = 100;
            bodyDef.position.y = 200;
            // corps
            Body body = world.createBody(bodyDef);
            body.createShape(circle);
            body.setMassFromShapes();
    À partir de là, le corps est solide.
    Comment le rendre non-solide du-coup ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par dawadam Voir le message
    Je travaille sur le portage Java et il me semble que par défaut, les objets sont solides !

    Voilà comment je crée ma balle :
    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
     
            // le world est créé, avec le AABB et la gravité
            //
            // cercle
            CircleDef circle = new CircleDef();
            circle.radius = 20;
            circle.density = 1;
            circle.friction = 0.3f;
            circle.restitution = 0.8f;
            // définition du corps
            BodyDef bodyDef = new BodyDef();
            bodyDef.position.x = 100;
            bodyDef.position.y = 200;
            // corps
            Body body = world.createBody(bodyDef);
            body.createShape(circle);
            body.setMassFromShapes();
    À partir de là, le corps est solide.
    Comment le rendre non-solide du-coup ?
    Il me manque une information importante : le nom de la librairie utilisée
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Il me manque une information importante : le nom de la librairie utilisée
    C'est dans le titre !
    Box2D

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par dawadam Voir le message
    C'est dans le titre !
    Box2D
    Arf. Désolé

    Utilise les capteurs (le lien pointe vers le chapitre 7 de la doc utilisateur, mais c'est le 6.3 (juste au dessus) qu'il faut lire).

    Au niveau du code : lorsque tu définis le fixture attaché à ton corps solide, tu lui dit que ce fixture est en fait le fixture d'un capteur (SetSensor(true)). Celà effectué, le corps solide est en fait un corps capteur (attacher un listener (voir 9.4) pour vérifier le contact me semble être une solution acceptable).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Au niveau du code : lorsque tu définis le fixture attaché à ton corps solide, tu lui dit que ce fixture est en fait le fixture d'un capteur (SetSensor(true)). Celà effectué, le corps solide est en fait un corps capteur (attacher un listener (voir 9.4) pour vérifier le contact me semble être une solution acceptable).
    Je croie bien avoir trouvé comment utiliser les capteurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            body.isSensor = true;
    Ensuite on met un listener, ça, pas de soucis.
    Par contre, je ne trouve toujours pas comment rendre le body traversable.
    Par ailleurs, je ne trouve pas les fixtures, nul par...

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par dawadam Voir le message
    Je croie bien avoir trouvé comment utiliser les capteurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            body.isSensor = true;
    Ensuite on met un listener, ça, pas de soucis.
    Par contre, je ne trouve toujours pas comment rendre le body traversable.
    Par ailleurs, je ne trouve pas les fixtures, nul par...
    Si tu peux mettre le body en sensor, alors il doit agir sur les fixtures sous-jacentes - et tu n'as pas à t'en occuper. Du moment qu'il est en sensor, il devrait (logiquement) ne pas être pris en compte pour ce qui est de la réponse aux impulsions - donc il est essentiellement traversable. Si ça ne marche pas, c'est qu'il y a un autre soucis (auquel cas il faudrait voir avec la communauté Box2D, car ça devient nettement plus spécifique).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par Emmanuel Deloget Voir le message
    Si tu peux mettre le body en sensor, alors il doit agir sur les fixtures sous-jacentes - et tu n'as pas à t'en occuper. Du moment qu'il est en sensor, il devrait (logiquement) ne pas être pris en compte pour ce qui est de la réponse aux impulsions - donc il est essentiellement traversable. Si ça ne marche pas, c'est qu'il y a un autre soucis (auquel cas il faudrait voir avec la communauté Box2D, car ça devient nettement plus spécifique).
    Effectivement ça marche en fait.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            bodyDef.isSensor = true;
            body.createShape(bodyDef);
    Thanks

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

Discussions similaires

  1. curseur sans body
    Par jadey dans le forum SQL
    Réponses: 6
    Dernier message: 13/08/2007, 18h41
  2. Mail via Excel sans body
    Par pascal58 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2006, 16h30
  3. Réponses: 15
    Dernier message: 29/09/2006, 11h52
  4. Réponses: 5
    Dernier message: 26/07/2006, 23h45
  5. Réponses: 2
    Dernier message: 23/10/2005, 19h00

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