Forums Développement Multimédia

Aller au contenu

Problème de collision après translation / rotation d'un clip

CODE

6 réponses à ce sujet

#1 wass08

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 24 April 2012 - 13:08 PM

Bonjour,

J'un un problème sur lequel je suis depuis quelques jours et dont je n'arrive rien à y faire.

J'aimerai tester les collisions entre mon joueur et le sol qui est dans un clip background, j'utilise cette classe http://www.tink.ws/blog/as-30-hittest/.

Mon problème est que ça marche très bien sur mon point de départ, mais dès que je déplace le décor quand mon personnage se déplace, j'ai l'impression qu'il check les collisions toujours à partir du point initial.

Si quelqu'un sait ce que je dois/peut faire merci de votre aide, et bonne journée!

#2 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 24 April 2012 - 13:35 PM

Salut et bienvenue,

Je t'invite à te rapprocher de ces sujets :

http://forums.mediab...__fromsearch__1
http://forums.mediab...des-collisions/

D'autre part, peux-tu nous ne dire plus sur la manière dont tu scrolle le fond ?

Quand à ton problème, vérifies la position du joueur et celle du décor, puis pense bien à transposer les coordonnées du joueur en coordonnées du décor : positionNormale = positionJoueur+positionDecor

#3 wass08

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 24 April 2012 - 13:50 PM

Pour scroller le fond je fais monBackground.x -= vitesse_de_deplacement;

Quand je fais du debug et que j'affiche les coordonnees des mes clips ils changent bien avec les deplacements du fond.
Je dois effectuer une translation avant de les envoyer au test de collision?

Merci de l'aide en tout cas.

#4 wass08

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 24 April 2012 - 21:45 PM

J'ai bien regardé tous les liens mais je n'ai pas trouvé de solution, ça en devient rageant haha..

J'ai lu dans un de tes tutoriels qu'il faut tester la collision avant de faire le déplacement (et je suis bien d'accord sur le principe), mais pour tester la collision je dois bien faire monClip.x += vitesse pour le mettre dans la position que je vais envoyer à la fonction qui teste les collision, y'aurait il un autre moyen de faire?

La fonction que j'utilise est
HitTest.complexIntersectionRectangle( target1:DisplayObject, target2:DisplayObject, accuracy:Number );
Bonne soirée

#5 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 24 April 2012 - 21:59 PM

Citation

monClip.x += vitesse pour le mettre dans la position que je vais envoyer

Non justement, tu ne déplace ton clip que lorsque tu sais que tu peux le déplacer.

var nextX:Number = monClip.x+vitesseX;
var nextY:Number = monClip.y+vitesseY;

Là tu utilise deux variables temporaires qui stockent la future position de ton clip.
Avec ces variables tu fais tes calculs et si jamais il n'y a pas collision tu réattribue la valeur des variables à la position de ton clip.

monClip.x = nextX:;
monClip.y = nextY;

Au passage il est préférable d'avoir soit deux vitesses distinctes pour les deux axes, soit d'utiliser plutôt une vitesse générale et un sens pour chaque axe :

vitesse*sensX
vitesse*sensY

Ensuite pour revenir à ton problème, je peux me tromper j'avoue ne pas avoir approfondi sur la fonction que tu file, mais je pense que ton test de collision ne prend pas en compte les positions relatives de tes objets, autrement dit il teste les objets entre eux sans prendre en compte leur positions effective a un moment T.

#6 wass08

    Ceinture Blanche

  • Members
  • Pip
  • 6 messages

Posté 24 April 2012 - 22:27 PM

Je suis bien d'accord avec toi, mais je peux pas stocker les positions dans un nombre puisque les collisions sont calculées à l'aide de deux Display Object?

Et comment puis-je faire pour qu'il prenne en compte les translations éffectués sur mes clips du coup plutôt que leurs positions initiales?

#7 Monsieur Spi

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 7017 messages

Posté 25 April 2012 - 10:25 AM

Citation

mais je peux pas stocker les positions dans un nombre puisque les collisions sont calculées à l'aide de deux Display Object?

C'est le problème d'être parti sur une fonction de collision que (semble t'il) tu ne maîtrise pas ;-)
La fonction se sert des objets mais pour ses calculs elle utilise les bound des objets, donc des coordonnées.

Comme je te le disais dans mon premier message, je t'invite à te rapprocher de ce sujet : http://forums.mediab...__fromsearch__1
La problématique est à peu près la même, sur à première vue la même fonction.

Citation

Et comment puis-je faire pour qu'il prenne en compte les translations éffectués sur mes clips du coup plutôt que leurs positions initiales?

En jouant sur les positions relatives de tes objets, pour moi il faut modifier la fonction de collision pour qu'elle prenne en compte les positions relatives de tes objets, c'est à dire non pas la position du décor sur la scène et la position du joueur sur la scène mais la position du joueur dans le décor. Et pour ça la seule option que je vois c'est d'ajouter les positions relatives (position du joueur dans le décor = position du joueur sur la scène + position du décor sur la scène).



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)