Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Membre actif
    Inscrit en
    septembre 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 328
    Points : 165
    Points
    165

    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é Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Deloget
    Âge : 38
    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 894
    Points : 4 140
    Points
    4 140

    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
    Inscrit en
    septembre 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 328
    Points : 165
    Points
    165

    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é Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Deloget
    Âge : 38
    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 894
    Points : 4 140
    Points
    4 140

    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
    Inscrit en
    septembre 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 328
    Points : 165
    Points
    165

    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 :
    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é Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Deloget
    Âge : 38
    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 894
    Points : 4 140
    Points
    4 140

    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 :
    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
    Inscrit en
    septembre 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 328
    Points : 165
    Points
    165

    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é Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Deloget
    Âge : 38
    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 894
    Points : 4 140
    Points
    4 140

    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
    Inscrit en
    septembre 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 328
    Points : 165
    Points
    165

    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 :
    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é Sénior

    Homme Profil pro Emmanuel Deloget
    Développeur informatique
    Inscrit en
    septembre 2007
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Deloget
    Âge : 38
    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 894
    Points : 4 140
    Points
    4 140

    Par défaut

    Citation Envoyé par dawadam Voir le message
    Je croie bien avoir trouvé comment utiliser les capteurs :
    Code :
    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
    Inscrit en
    septembre 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 328
    Points : 165
    Points
    165

    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 :
    1
    2
    3
     
            bodyDef.isSensor = true;
            body.createShape(bodyDef);
    Thanks

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •