| [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj | |
|
+4Linky439 onilink_ albisse johnwilliamp 8 participants |
Auteur | Message |
---|
johnwilliamp Débutant
Messages : 11 Localisation : Canada Projet Actuel : Road to liberty
| Sujet: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 0:50 | |
| J'ai établi une zone de détection autour(360 degrés) de mes obj_ennemy de 100 pixel. Mais j'aimerais faire en sorte que lorsque mon obj_player appui sur SHIFT, il ne se fasse pas détecter A MOINS d'être devant l'obj_enemy, c'est a dire qu'il se ferait détecter si il était dans la moitié supérieur de la zone de détection de 360 degrés MERCI D'AVENCE! Voila une photo qui va peut-être mieux vous faire comprendre: SOLUTION DONNER PAR: Craki - Code:
-
if dot_product(legthdir_x(1,direction),lengthdir_y(1,direction),obj_joueur.x - obj_ennemi.x,obj_joueur.y - obj_ennemi.y) > 0 // le joueur est devant else // le joueur est derrière
Dernière édition par johnwilliamp le Dim 9 Mar 2014 - 20:43, édité 3 fois |
|
| |
albisse Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 17:04 | |
| Le truc que tu pourrai faire c'est de changer les 100 pixel par une variable et dès que le mec appuis sur Shift la variable passe de 100 a genre 10 , au moin la zone de detection serra assez petite pour que l'énemie te voie juste quand tes a ses pieds ^^
Je te dit sa car je vais faire pareil sans doute , je voudrai faire un jeu genre spintercell ^^ Bonne chance a toi ^^ |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 17:12 | |
| Faut utiliser un simple produit vectoriel. |
|
| |
johnwilliamp Débutant
Messages : 11 Localisation : Canada Projet Actuel : Road to liberty
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 18:33 | |
| merci pour laide...mais ZUUUUUUUUUUUT cetait mon ider de faire un splintercell --' |
|
| |
albisse Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 18:39 | |
| Tkt je t'ai pas piquer l'idée en voyant sa , j'ai commencer hier rassure toi je ne te copie pas ^^ Je voulais même poster un problème que j'ai eu mais j'ai finalement trouver . |
|
| |
johnwilliamp Débutant
Messages : 11 Localisation : Canada Projet Actuel : Road to liberty
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 18:42 | |
| toutefois, si on change la variable a 10, le joueur se fera voir que a 10 pixel meme si il est devant. onilink_, comment on fait? ou tu peut me donner quelque codes ou example svp? |
|
| |
albisse Utilisateur confirmé: Rang *
Messages : 233
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 19:25 | |
| Dans ce cas la il te faut une collision line , ( ne me demande pas pour les colision line car je ne connai pas trop trop ^^ ) Faudrait que tu mette collision circle && collision line Perso j'ai fait sa pour que l'énnemie ne me voie pas si je suis derrière un object : - Code:
-
if collision_circle(self.x,self.y,500,obj_player,false,true) && !collision_line(self.x,self.y,obj_player.x,obj_player.y,obj_solid,false,true) { //code } |
|
| |
Linky439 Utilisateur confirmé: Rang *****
Messages : 2643 Localisation : Sur le forum du CBNA...ou pas Projet Actuel : La Galaxie Scellée
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 19:33 | |
| Perso je regarderai un angle entre l'une de tes frontières de ton demi-cercle dans lequel on est repéré et la droite qui passe par la position de ton ennemi et de la tienne, et si c'est compris entre 0 et pi, t'es devant, sinon t'es derrière.
Fin j'ai pas trop regardé comment on choppe l'angle, de mémoire faut donner 2 droites et il te le calcule direct mais bon... |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 20:45 | |
| En gros tu regarde la direction vers laquelle regarde ton ennemi et l'angle entre les deux points, puis tu fais la différence. Faut utiliser image_angle, point_direction() et pour calculer la différence correctement, faut utiliser la formuile la (de sachem, ca fait 20min que je la cherche ><) : ((((angle1 - angle2) % 360) + 540) % 360) - 180 Et si c'est inférieur à 90° c'est qu'il est devant. |
|
| |
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 22:44 | |
| - onilink_ a écrit:
- Faut utiliser un simple produit vectoriel.
Tu fais ça comment ? Je sais le faire avec des vecteurs mais en progra |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 23:34 | |
| - onilink_ a écrit:
- Faut utiliser un simple produit vectoriel.
Hé hé hé. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Jeu 27 Fév 2014 - 23:39 | |
| Bah avec un produit vectoriel tu peux savoir si un point est a droite ou a gauche d'un vecteur, du coup suffit de faire le test avec les deux vecteurs du cône de vision pour savoir s'il est entre les deux. Le soucis c'est qu'il te faut donc connaitre les vecteurs du cône. Du coup tu peux utiliser un produit scalaire qui te donne l'angle qui sépare le point et le vecteur (le cosinus plus exactement). Par contre faut des vecteurs normalisés. Ça donnerait: d = pos - mouse // vecteur direction p = enemiPos - pos // vecteur ennemi/joueur d.normalize() p.normalize() visible = dot(d, p) > cos( angleCone * pi/180 ) - D-z a écrit:
- onilink_ a écrit:
- Faut utiliser un simple produit vectoriel.
Hé hé hé. Y a moyen de faire plus simple avec le dot product a ton avis? Car bon normaliser les vecteurs ça demande quand même de faire 2 racines carrées... |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Ven 28 Fév 2014 - 0:08 | |
| Puisque notre ami ici présent veut un champ de vision à 180°, la simplification est drastique : Si D est le vecteur direction de l'ennemi et P le vecteur ennemi->joueur, alors D.P est positif ssi le joueur est devant l'ennemi. Vu qu'on compare à zéro, on se fiche des normes, pas besoin de les calculer. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Ven 28 Fév 2014 - 0:10 | |
| Yep pour celui la je le savait, je l'avais utilisé pour faire un minecraft like :p (ne pas afficher les cubes derrière la caméra) Impossible pour les autres angles en revanche?
|
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Ven 28 Fév 2014 - 0:16 | |
| Ben, je vois pas mieux que ce que tu as exposé. À voir ce qui est mieux entre se trimballer les deux vecteurs qui bordent le cône ou faire les racines carrées (peut-être qu'on peut n'en faire qu'une d'ailleurs). Mais inutile d'optimiser plus loin je pense :p |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Ven 28 Fév 2014 - 0:29 | |
| Héhé ok :p Par contre je profite que t'es la. J'ai plus ou moins réussi a dompter le produit vectoriel depuis que tu m'as montré quelques trucs, par contre j'ai un peu du mal a voir a quoi ça correspond exactement. Genre le dot product c'est un angle, mais le cross product ça reviens toujours a des coordonnées 3d (vecteur normal a deux autres vecteurs). Du coup en 2d ça correspond a quoi? Tu m'avais dit angle relatif a deux vecteurs, mais y a pas quelque chose de plus 'rigoureux'? |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Ven 28 Fév 2014 - 0:48 | |
| Le produit scalaire (dot product) c'est pas tant un angle qu'un projeté. A.B te donne la coordonnée du projeté de A sur B, avec B pour vecteur unité (et vice versa). Si les vecteurs sont normalisés, ça donne bien le cosinus (projection d'un point du cercle unité sur l'axe x)
Le produit vectoriel est bien une opération se faisant uniquement entre deux vecteurs 3D. Soient A et B deux vecteurs et C = A^B, alors C est orthogonal à A et B, |C| = |A| × |B| × |sin(AB)|, et le sens du repère (A,B,C) dépend du sens de l'angle AB. En 2D, si on considère deux vecteurs du plan, leur troisième coordonnée est 0, et leur produit vectoriel est de la forme (0,0,z). Sa norme et le sens du repère sont respectivement la valeur absolue et le signe de z, ce qui suffit pour ces calculs. Donc le cousin 2D du produit vectoriel est assimilable à un scalaire.
Edit : pour l'anecdote, |A^B| est l'aire du parallélogramme comptant A et B comme arêtes adjacentes. Je laisse à l'assistance le soin de déterminer pourquoi. |
|
| |
Linky439 Utilisateur confirmé: Rang *****
Messages : 2643 Localisation : Sur le forum du CBNA...ou pas Projet Actuel : La Galaxie Scellée
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Ven 28 Fév 2014 - 10:04 | |
| C'est assez fou de voir onilink demander des conseils et tout :') |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Ven 28 Fév 2014 - 10:18 | |
| Ah merci pour les infos, c'est déjà plus clair pour moi :p - Linky439 a écrit:
- C'est assez fou de voir onilink demander des conseils et tout :')
Y a que les imbéciles qui ne demandent pas de conseils |
|
| |
Mobi Utilisateur confirmé: Rang ****
Messages : 1256 Localisation : Dijon
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Ven 28 Fév 2014 - 16:36 | |
| À Ba c'est bon alors, je m'en sors bien |
|
| |
Linky439 Utilisateur confirmé: Rang *****
Messages : 2643 Localisation : Sur le forum du CBNA...ou pas Projet Actuel : La Galaxie Scellée
| |
| |
johnwilliamp Débutant
Messages : 11 Localisation : Canada Projet Actuel : Road to liberty
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj Ven 7 Mar 2014 - 19:56 | |
| bonjour tout le monde!, je reviens d'une longue semaine de vacance en forêt donc pas d'ordinateur...je suis nouveau sur GM et je comprend pas toute les réponse a ma question( MERCI A TOUS CEUX QUI ONT PRIS LE TEMPS DE RÉPONDRE)...donc j'aimerais si possible avoir un résumer de la meilleur solution a mon problème parmi celle proposer, Merci!!! |
|
| |
Contenu sponsorisé
| Sujet: Re: [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj | |
| |
|
| |
| [RESOLU]Faire une action SEULEMENT quandun obj est devant un autre obj | |
|