Détection collision et contournement

Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
- - Dernière réponse : pegase31
Messages postés
6161
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)
Afficher la suite 

17 réponses

Messages postés
121
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
19 mai 2012
0
Merci
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
|
|
|
Commenter la réponse de yasdar
Messages postés
121
Date d'inscription
mercredi 12 janvier 2011
Statut
Membre
Dernière intervention
19 mai 2012
0
Merci
en fin mathématiquement c'est ça
Commenter la réponse de yasdar
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
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)
Commenter la réponse de Orange73
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
0
Merci
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... ;-) ;
Commenter la réponse de BBFUNK01
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
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)
Commenter la réponse de Orange73
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
0
Merci
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... ;-) ;
Commenter la réponse de BBFUNK01
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
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)
Commenter la réponse de Orange73
Messages postés
1313
Date d'inscription
jeudi 16 juillet 2009
Statut
Membre
Dernière intervention
20 juin 2014
6
0
Merci
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... ;-) ;
Commenter la réponse de BBFUNK01
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
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)
Commenter la réponse de Orange73
Messages postés
6161
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
6
0
Merci
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'
Commenter la réponse de pegase31
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
Euhhh... j'ai pas compris


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73
Messages postés
6161
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
6
0
Merci
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'
Commenter la réponse de pegase31
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
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)
Commenter la réponse de Orange73
Messages postés
6161
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
6
0
Merci
Par exemple, oui.
Le A* (lire "A Star") reste le plus efficace dans le genre.

Peg'
Commenter la réponse de pegase31
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
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)
Commenter la réponse de Orange73
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
0
Merci
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)
Commenter la réponse de Orange73
Messages postés
6161
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
6
0
Merci
le A* reste utilisé pour les tiles-games, mais il en existe d'autres pour des déplacements "linéaires"

Peg'
Commenter la réponse de pegase31