Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > Physique
Physique Forum d'entraide sur les algorithmes et moteurs physiques (ODE, Newton...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/12/2010, 12h29   #1
dawadam
Membre actif
 
Inscription : septembre 2007
Messages : 306
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 306
Points : 163
Points : 163
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 ?
dawadam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 09h19   #2
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 826
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 826
Points : 4 381
Points : 4 381
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.
Emmanuel Deloget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 10h52   #3
dawadam
Membre actif
 
Inscription : septembre 2007
Messages : 306
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 306
Points : 163
Points : 163
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
dawadam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 11h10   #4
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 826
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 826
Points : 4 381
Points : 4 381
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.
Emmanuel Deloget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 12h01   #5
dawadam
Membre actif
 
Inscription : septembre 2007
Messages : 306
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 306
Points : 163
Points : 163
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 ?
dawadam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 12h30   #6
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 826
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 826
Points : 4 381
Points : 4 381
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.
Emmanuel Deloget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 12h41   #7
dawadam
Membre actif
 
Inscription : septembre 2007
Messages : 306
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 306
Points : 163
Points : 163
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
dawadam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 13h23   #8
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 826
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 826
Points : 4 381
Points : 4 381
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.
Emmanuel Deloget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 14h14   #9
dawadam
Membre actif
 
Inscription : septembre 2007
Messages : 306
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 306
Points : 163
Points : 163
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...
dawadam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 14h25   #10
Emmanuel Deloget
Expert Confirmé Sénior
 
Homme Emmanuel Deloget
Développeur informatique
Inscription : septembre 2007
Messages : 1 826
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel Deloget
Âge : 37
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 826
Points : 4 381
Points : 4 381
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.
Emmanuel Deloget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 14h46   #11
dawadam
Membre actif
 
Inscription : septembre 2007
Messages : 306
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 306
Points : 163
Points : 163
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
dawadam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h01.


 
 
 
 
Partenaires

Hébergement Web