AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
Réassort du coffret Pokémon 151 ...
Voir le deal
-21%
Le deal à ne pas rater :
LEGO® Icons 10329 Les Plantes Miniatures, Collection Botanique
39.59 € 49.99 €
Voir le deal

 

 [résolu] Determiner le point de collision sur un sprite

Aller en bas 
+2
Caly
narcibrook
6 participants
AuteurMessage
narcibrook
Pas mal



Messages : 32

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyMar 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 rire2 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 triste2

Merci pour vos réponses ^^



Dernière édition par narcibrook le Ven 13 Avr 2012 - 9:43, édité 1 fois
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


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.

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyMar 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.
Revenir en haut Aller en bas
narcibrook
Pas mal



Messages : 32

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyMar 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][résolu] Determiner le point de collision sur un sprite Schema10[/img]

Chaque couleur est un point de collision qui déclanche une action differente.
Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
-Coco-


Messages : 545
Localisation : Grenoble - Montpellier
Projet Actuel : Orion VII - 0%

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyMar 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.
Revenir en haut Aller en bas
narcibrook
Pas mal



Messages : 32

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyMar 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 cool

Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


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.

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyMer 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 >.

Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyMer 11 Avr 2012 - 11:56


_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
narcibrook
Pas mal



Messages : 32

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyMer 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 clinoeuil
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 !!! clinoeuil
Revenir en haut Aller en bas
narcibrook
Pas mal



Messages : 32

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyJeu 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 triste2 quelqu'un aurait un petit exemples awesome En plus je suis sur que c'est pas si dur mais je loupe quelque chose quelque part gha
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyJeu 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.
Revenir en haut Aller en bas
Johny Wessmuller
Utilisateur confirmé: Rang *



Messages : 233

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: yes im back   [résolu] Determiner le point de collision sur un sprite EmptyJeu 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
Revenir en haut Aller en bas
narcibrook
Pas mal



Messages : 32

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 13 Avr 2012 - 9:42

Merci Johny Wessmuller, c'est exactement ce que je voulais super je viens de le tester ça marche pile comme je voulais.

Merci également a Caly, D-z, et -Coco- pour leur réponses clinoeuil
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 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.
Revenir en haut Aller en bas
Johny Wessmuller
Utilisateur confirmé: Rang *



Messages : 233

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 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à Smile

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
Revenir en haut Aller en bas
Johny Wessmuller
Utilisateur confirmé: Rang *



Messages : 233

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 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 gnii

_________________
C'est bon je suis passé tu peux mettre résolu
Revenir en haut Aller en bas
Caly
Utilisateur confirmé: Rang ****
Caly


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.

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 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.
Revenir en haut Aller en bas
Johny Wessmuller
Utilisateur confirmé: Rang *



Messages : 233

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 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
Revenir en haut Aller en bas
M@d_Doc
Modérateur
M@d_Doc


Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 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

_________________
[résolu] Determiner le point de collision sur un sprite Control-commentTous les icones de gm utilisables sur le cbna ICI  [résolu] Determiner le point de collision sur un sprite Main1-change-sprite
Revenir en haut Aller en bas
http://www.lecbna.org
Caly
Utilisateur confirmé: Rang ****
Caly


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.

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 13 Avr 2012 - 16:20

Ça explique le fait que je ne comprenais plus rien awesome
Revenir en haut Aller en bas
Johny Wessmuller
Utilisateur confirmé: Rang *



Messages : 233

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 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
Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
-Coco-


Messages : 545
Localisation : Grenoble - Montpellier
Projet Actuel : Orion VII - 0%

[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite EmptyVen 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.
Revenir en haut Aller en bas
Contenu sponsorisé





[résolu] Determiner le point de collision sur un sprite Empty
MessageSujet: Re: [résolu] Determiner le point de collision sur un sprite   [résolu] Determiner le point de collision sur un sprite Empty

Revenir en haut Aller en bas
 
[résolu] Determiner le point de collision sur un sprite
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Collision entre un point et un rectangle incliné
» Script qui renvoit le premier point d'une collision
» [Help] Avoir une collision sur ce sprite
» Transparence d'un sprite et Collision ...
» [Résolu] Ne pas tirer d'un point fixe

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide confirmés-
Sauter vers: