Détection collision et contournement

Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011 - 16 mars 2011 à 09:32
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 16 mars 2011 à 15:15
Bonjour à tous,

Je suis confronté à un problème que j'arrive pas à résoudre.

Un Point nommé "p1" doit rejoindre un point nommé "p2", entre ces 2 points se trouve un obstacle.
Donc détection de la collision via hitTest() mais comment dire au "p1" de contourner cet obstacle ?

Merci par avance de votre aide.

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)

17 réponses

yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
16 mars 2011 à 10:54
c'est fou pourquoi tu veux que p1 rejoint p2 si un obstacle se trouve entre les deux points

bon ya deux cas qu'ils faut préciser :
- est ce que la distance p1-p2> obstacle.height et là c'est un mouvement de demi cercle

|
.p1 | .p2
|


- est ce que la distance p1-p2< obstacle.height et là cet un mouvement de translation avec 3 matrix de translations pour que p1 rejoint p2
|
|
.p1 | .p2
|
|
|
0
yasdar Messages postés 121 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 19 mai 2012
16 mars 2011 à 10:56
en fin mathématiquement c'est ça
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
16 mars 2011 à 11:01
Merci de ta réponse.

Les 2 cas peuvent se présenter.


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
16 mars 2011 à 11:12
Hello,

et pourquoi ne pas anticiper la collision plutôt que d'attendre la collision pour que p1 commence à éviter p2 ?
Par exemple en se basant sur les coordonnées de chacun des 2 points, tu peux essayer en définissant une zone de tolérance à partir de laquelle p1 commencerait à modifier sa trajectoire pour éviter p2.

A plus ,

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
16 mars 2011 à 11:17
Hello BBFUNK01,

J'y ai déjà pensé mais c'est plus compliqué que cela.

Voir schéma à cette adresse : http://img52.imageshack.us/i/schemas.jpg/



-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
16 mars 2011 à 11:34
Re,

en fait il faut également éviter le second obstacle si je comprend bien, à savoir les 2 "piliers".
Par contre l'idée c'est que le bateau suive les contours d'un pilier s'il y a collision ou le mieux serait d'éviter la collision ?
Autrement je présume que le bateau aura x obstacles à éviter ?
Comment gères-tu le déplacement du bateau, par un enterFrame ?

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
16 mars 2011 à 12:06
Déplacement du bateau géré par Tween. Et oui le bateau peut avoir plusieurs obstacle d'où l'utilité de trouver un moyen d'automatiser cela.


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
BBFUNK01 Messages postés 1310 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 20 juin 2014 6
16 mars 2011 à 12:33
Au 1er abord ça peut paraître plutôt simple mais en y réfléchissant je m'aperçois que ça l'est moins...
L'idée du hitTest() était logique mais le problème c'est que tu ne disposes pas des coordonnées de l'obstacle à l'instant T
pour organiser le contournement.
Peut-être qu'en stockant les coordonnées et la taille de chacun des obstacles dans un array il y aurait possibilité ensuite de gérer le contournement lors du hitTest() ? Le problème qui se pose alors c'est le "type" de déplacement qu'il faudra lancer tel que le disait Yasdar.

BBFUNK01

//C'est en forgeant qu'on devient forgeron... ;-) ;
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
16 mars 2011 à 14:18
Et surtant comment dans quelle direction faire ce déplacement, afin de trouver le bon chemin.

J'avais pensé à implémenter des "rescue point" au niveau des entrées ainsi si le bateau touche un obstacle, il est redirigé vers ce point de sauvetage.

Voir schéma "rescue point" à cette adresse : http://img836.imageshack.us/i/schemas.jpg/

Le truc c'est que du coup, il faudra gérer ces points manuellement map par map vu que la detection collision n'est pas possible.



-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
16 mars 2011 à 14:38
Ce que tu essaies de faire s'appelle un "pathfinder", c'est trés compliqué et il faut pour celà maîtriser les arbres, ainsi que les fonctions récursives ... perso j'ai laissé tomber.

Peg'
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
16 mars 2011 à 14:47
Euhhh... j'ai pas compris


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
16 mars 2011 à 14:54
oui, c'est un peu ce que je voulais te dire...

Renseigne-toi sur les moteurs de calcul de chemin, appellés "pathfinder".
Ces principes permettent de calculer le chemin le plus cours et le moins "coûteux" en terme de trajet d'un point à un autre en prenant en compte les obstacles et autres terrains peu praticables.

Peg'
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
16 mars 2011 à 14:56
Tu parle de cela ?
> http://www.sephiroth.it/weblog/archives/2003/09/a_pathfinder_for_flash.php
> http://www.gotoandplay.it/_articles/2007/03/pathFinder.php


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
16 mars 2011 à 14:57
Par exemple, oui.
Le A* (lire "A Star") reste le plus efficace dans le genre.

Peg'
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
16 mars 2011 à 15:06
Effectivement c'est assez complexe !

D'ou l'utilisation d'un rescur point perso, qui pourrait bien marcher je penses.


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
16 mars 2011 à 15:12
Le A* nécessite également la quadrillage de la scene et de définir les zone ayant un obstacle, Alors que le positionement de "rescue point" à des endroits stratégique permettrai d'être moins complexe et pénible a mettre en place


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
16 mars 2011 à 15:15
le A* reste utilisé pour les tiles-games, mais il en existe d'autres pour des déplacements "linéaires"

Peg'
0
Rejoignez-nous