| [résolu] Determiner le point de collision sur un sprite | |
|
|
Auteur | Message |
---|
narcibrook Pas mal
Messages : 32
| Sujet: [résolu] Determiner le point de collision sur un sprite Mar 10 Avr 2012 - 19:22 | |
| Bonjour à tous ! j'ai un object "rectangle". j'ai un object "sphere" qui suit la souris. Jusque là tout va bien Ce que je veux, c'est effectuer une action différente en fonction du point de collision entre "rectangle" et "sphere", genre déplacer ou faire pivoter "rectangle". Mais ce que je n'arrive pas a trouver c'est comment retourner le point de collision, et l'utiliser sous forme de variable. je pense que pour ça il faut utiliser "sprite_height" et "sprite_width" mais je ne sais pas comment Merci pour vos réponses ^^
Dernière édition par narcibrook le Ven 13 Avr 2012 - 9:43, édité 1 fois |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Mar 10 Avr 2012 - 19:28 | |
| Recherche "bbox" -> http://gamemaker.info/fr/manual(ça reste le plus performant mais pas le plus simple.) Sinon tu peut jouer avec des sprite_height/width et point_distance mais plus de chance d'avoir des beugs et pas sur du résultat. |
|
| |
narcibrook Pas mal
Messages : 32
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Mar 10 Avr 2012 - 20:26 | |
| Merci pour ta réponse si rapide ^^ j'ai jeté un coup d'oeil au lien que tu m'a donné, mais c'est pas exactement ça que je cherche, ou alors j'ai pas compris comment l'utiliser.... je te fait un schema rapide qui sera peut être plus clair que mes explication laborieuses lol[img] [/img] Chaque couleur est un point de collision qui déclanche une action differente. |
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Mar 10 Avr 2012 - 21:17 | |
| Eh bien si ton rectangle ne tourne pas (pas de rotation) du peux le découper en autant de petits rectangles. De ce fait tu peux faire (simple mais long et onilink me taperait sur les doigts tant l'optimisation est mauvaise) - Code:
-
if (collision_line(rectanglevert_x1,rectanglevert_y1,rectanglevert_x2,rectanglevert_y2,objet)) { Action associée à la collision au rectangle vert }
pareil pour chaque rectangle x1,y1,x2,y2 sont les coordonnées des points extrémités des rectangles (par exemple ça semble 0,0,16,0 pour le premier rectangle vert). Voilà, je vois pas trop comment faire autrement, c'est affreux mais ça marchera (puis un processeur d'ordi tourne à plusieurs GHz maintenant donc tu peux te le permettre). _________________ Oh, snap.
|
|
| |
narcibrook Pas mal
Messages : 32
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Mar 10 Avr 2012 - 21:27 | |
| j'avais deja pense (en utilisant lengthdir_x et lengthdir_y) a créer des object "capteurs" qui détecteraient mes 8 differentes collisions tout autour de mon rectangle , ce qui ne l'empecherait pas de tourner, mais j'espérait trouver une solution plus "propre" sinon tant pis mais je laisse ce sujet en non-resolus au cas ou une idée viendrait a quelqu'un |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Mer 11 Avr 2012 - 10:53 | |
| - Citation :
- mais c'est pas exactement ça que je cherche, ou alors j'ai pas compris comment l'utiliser
Tu n'as pas compris (et j’avoue que c'est pas simple à expliquer). En fait 'bbox_left' est la bordure de gauche de ton rectangle. donc bbox_left+10 c'est 10px de plus vers la droite à partir de ta bordure de gauche. Donc ensuite plus qu'à mettre deux condition une avec < et une avec >. |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Mer 11 Avr 2012 - 11:56 | |
| _________________ Home is not a place, it's a feeling.
|
|
| |
narcibrook Pas mal
Messages : 32
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Mer 11 Avr 2012 - 17:23 | |
| - Citation :
- En fait 'bbox_left' est la bordure de gauche de ton rectangle.
donc bbox_left+10 c'est 10px de plus vers la droite à partir de ta bordure de gauche. Donc ensuite plus qu'à mettre deux condition une avec < et une avec >. ah ok effectivement j'avais mal compris mais là c'est limpide ( enfin je crois ) Je dois allez au boulot là j'ai pas le temps de tester mais je te tiend au courant merci !! - Citation :
- Par ici : http://www.siteduzero.com/tutoriel-3-254492-theorie-des-collisions.html?all=1#ss_part_254501
Tu trouveras ton bonheur o/ Idem j'irais jeter un oeil merci a toi !!! |
|
| |
narcibrook Pas mal
Messages : 32
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Jeu 12 Avr 2012 - 17:03 | |
| Je suis largué avec les "bbox" je n'arrive pas a les utiliser... je voudrais faire : "si collision avec bbox_left alors x+=1", si collision avec bbox_right alors x-=1, etc... mais je n'y arrive pas quelqu'un aurait un petit exemples En plus je suis sur que c'est pas si dur mais je loupe quelque chose quelque part |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Jeu 12 Avr 2012 - 17:51 | |
| Dans ton cas, il ne s'agit pas d'intersecter la BBox, mais bien une série de segments ;) _________________ Home is not a place, it's a feeling.
|
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: yes im back Jeu 12 Avr 2012 - 21:46 | |
| Salut.
Je pense que tu peux le faire avec des collision_line.
Pour récapituler, bbox_left, c'est simplement l'abscisse du côté gauche de la bbox, bbox_right, celle du côté droit, bbox_top l'ordonnée du haut, et bbox_bottom celle du bas.
Pour tester s'il y a une collision avec l'objet "object0" et le côté gauche de la bbox, il suffit de regarder s'il y a une collision avec la ligne qui part du point en haut à gauche de la bbox et qui va en bas à gauche. Le point en haut à gauche a pour coordonnées (bbox_left,bbox_top) et le point en bas à gauche (bbox_left,bbotx_bottom). Donc pour regarder s'il y a collision avec cette ligne tu fais if collision_line(bbox_left,bbox_top,bbox_left,bbox_bottom,object0,false,true) par exemple. A noter que la fonction collision_line renvoie si je me souviens bien (je viens de reprendre la prog) l'ID de l'instance avec laquele il y a collision.
Tu peux également diviser par exemple (si je suis ton schémas) la partie haute en 3 lignes différentes qui sont données par les points suivants : (bbox_left,bbox_up) et (bbox_left+k,bbox_up) (bbox_left+k+1,bbox_up) et (bbox_left+2k,bbox_up) (bbox_left+2k+1,bbox_up) et (bbox_right,bbox-up)
avec k=(bbox_right-bbox_left)/3 par exemple. Et pour la ligne du bas du remplace l'ordonnée de chaque point par bbox_bottom.
De rien _________________ C'est bon je suis passé tu peux mettre résolu
|
|
| |
narcibrook Pas mal
Messages : 32
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 9:42 | |
| Merci Johny Wessmuller, c'est exactement ce que je voulais je viens de le tester ça marche pile comme je voulais. Merci également a Caly, D-z, et -Coco- pour leur réponses |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 10:27 | |
| collision_line()... Tellement con que je n'y avais pas pensé +_+
Faudrait que je me remette à GM si je veux garder mon niveau d'helper o/ _________________ Home is not a place, it's a feeling.
|
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 11:07 | |
| - Citation :
- Au fait Mad_Doc si tu passes par là, il faudrait que tu modifies ce tuto car collision_line renvoie déjà l'ID donc pas besoin de boucle. http://www.lecbna.org/pages/base.php?subaction=showfull&id=1202494125&archive=&start_from=&ucat=12&
Je passe toujours par là Tu as effectivement raison, collision_line() retourne l'id de l'objet en collision. Je en sais pas si c'est une erreur de ma part ou si 'dans le temps', la fonction ne retournait effectivement que l'id. Je vais mettre une note au début du tuto pour préciser ça. Cela dit (et tu l'as précisé toi même), il reste le problème suivant: ça retourne une id, mais pas forcément celle du premier objet rencontré. L'exemple typique, c'est lorsqu'on tire sur un petit ennemi accolé à un mur: que faire si la balle détecte le mur? D'après moi il y a 2 solutions simples à mettre en place:
- Faire des collision_line() par dichotomie, pour trouver quel est le premier objet touché (voir ça)
- Une fois une id trouvée, refaire un collision_line entre la balle et le côté de l'id le plus proche, pour voir s'il y avait déjà une collision avant, et répéter jusqu'à avoir un collision_line qui retourne noone ou l'id de la balle.
_________________ C'est bon je suis passé tu peux mettre résolu
Dernière édition par Johny Wessmuller le Ven 13 Avr 2012 - 11:23, édité 1 fois |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 11:09 | |
| Vous avez posté pendant que j'écrivais lol du coup je me suis dit mince déja résolu et comme j'avais beaucoup écrit et ben je le met quand même _________________ C'est bon je suis passé tu peux mettre résolu
|
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 13:58 | |
| J’avoue que je n'avez pas du tout pensé à une collision_line et que c'est vachement bien pensé. Moi je me serai pris la tête avec des conditions foireuses celons mes bbox. |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 15:02 | |
| M..m..m..mon message !!!! Mad_doc je crois que tu m'as cité en écrivant avec mon nom à la place de mon message qui développait un code qui détectait de manière optimisée (enfin à mon avis) pile le point de collision (le premier point qui entrerait en collision si la sphere occupait toutes les positions de sa trajectoire) sur le rectangle et en même temps qui détectait les collisions où la sphère ne rentre pas directrement en contact mais ou entre les 2 positions successives de la sphère il y a un point du rectangle et l'explication à partir d'arguments géometriques (mais par contre ça ne marchait que si le rectangle ne bougeait pas).
Enfin bon, si c'est résolu, tant pis.
Pour le collision_line, flemme de faire le test, mais pour avoir une idée,on peut faire une line AB bien grande et de mettre l'objet à détecter pres d'une extremité, de regarder le temps de détection en mettant le point A en premier dans le collision_line, puis de le comparer avec celui qui met B en premier. [edit] Non, je veux dire, mettre plusieurs instance du m^me objet à détecter sur la ligne et regarder l'Id que renvoie le colision_line si on le fait en mettant A en premier et si on le fait en mettant B en premier _________________ C'est bon je suis passé tu peux mettre résolu
|
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 16:13 | |
| oh bordel oui, j'ai écris dans ton message?!? Je pense que forumactif avait un bug: après avoir écris mon message, il est apparu... juste avant le tient (ce qui est difficilement possible normalement) et maintenant, à la place du tiens?!? wtf _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
Caly Utilisateur confirmé: Rang ****
Messages : 1285 Localisation : Haute Normandie Projet Actuel : Capturer, apprivoiser et dresser des Pokémons sauvages pour faire des spectacles de rue et en faire mon métier.
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 16:20 | |
| Ça explique le fait que je ne comprenais plus rien |
|
| |
Johny Wessmuller Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 17:07 | |
| lol oui ça fait un peu schyzophrène. Mais sinon pour le message, pas de problèmes, de toutes façons c'est résolu, et d'ailleurs à la relecture du topic, c'est coco qui avait donné en premier la solution sauf qu'il avait cru que le schémas était à taille réelle, et que chaque couleur était un rectangle d'où les collision_rectangle.[edit] ah non en fait il n'avait pas cru ça. _________________ C'est bon je suis passé tu peux mettre résolu
|
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite Ven 13 Avr 2012 - 19:26 | |
| Peut être bien, je sais pas trop, en tout cas ravi d'avoir pu t'aider (les coordonnées que j'avais mises étaient là à titre d'exemple). _________________ Oh, snap.
|
|
| |
Contenu sponsorisé
| Sujet: Re: [résolu] Determiner le point de collision sur un sprite | |
| |
|
| |
| [résolu] Determiner le point de collision sur un sprite | |
|