| | collision laser (ligne) | |
| | Auteur | Message |
---|
Evilshroom Très bonne participation
Messages : 121 Localisation : .... Projet Actuel : ????????
| Sujet: collision laser (ligne) Mer 7 Mar 2012 - 4:51 | |
| Bonjour a tous,
J'ai un probleme dans le dévelopement de mon ptit jeu d'infiltration
Je suis incapable, malgré mes recherches, de faire un effet avec la collision (du héros) avec une ligne(laser)(la vue du garde). Je sais bien qu'il faut faire quelque chose genre if colision line, mais meme a sa...
anyway, mes objets sont le héros, le garde, et le laser messenger (qui met la distance du laser)
ps: le laser (la vue) se fait déja bloquer par le héros et par les murs. enfaite je travaille pour le fait qu'on recoive un mesage:(Je t'ai vu!) avec le recomencement de la room quand le héros entre en colision avec le laser(vu)
merci d'avance! |
| | | M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: collision laser (ligne) Mer 7 Mar 2012 - 8:18 | |
| un laser, ça peux se gérer comme ça : https://cbna.forumactif.com/t9641-gml-laser_lengthSinon pour ton cas, un simple: - Code:
-
if (collision_line(x,y,x+lengthdir(100,direction),y+lengthdir_y(100,direction),obj_Player) && !colllision_line(x,y,x+lengthdir(100,direction),y+lengthdir_y(100,direction),obj_mur)) { //-> détecté } Là, tu fais la chose suivante: tu tires une ligne depuis l'ennemi (x,y), dans la direction à laquelle il fait face (direction), avec une longueur de 100. Si la ligne entre en collision avec le joueur, et AUCUN mur, tu es sûr que l'ennemi peux voir le joueur. Après pour faire bien, il faudrait balancer plusieurs lignes, avec un décalage d'angle (genre à direction+10, direction-10, etc.) pour simuler un cone de vision. [edit]Il y a pas longtemps, j'ai planché sur un sujet similaire, voilà un bout de code qui peux t'intéresser: - Code:
-
draw_primitive_begin(pr_trianglefan); draw_vertex_color(x,y,draw_get_color(),0.7); for (d=direction-focus/2;d<direction+focus/2;d+=focus/12) { tempLength=maxLength(x,y,d,WALL,1,300); if (collision_line(x,y,x+lengthdir_x(tempLength,d),y+lengthdir_y(tempLength,d),argument0,0,1)) {//if player is found target=obj_player; } draw_vertex_color(x+lengthdir_x(tempLength,d),y+lengthdir_y(tempLength,d),draw_get_color(),0.2); //draw_line(x,y,x+lengthdir_x(tempLength,d),y+lengthdir_y(tempLength,d)); } draw_primitive_end(); l'objet qui 'regarde' a les variables suivantes: direction: direction où il regarde focus: angle du cône de vision tempLength: distance (en pixel) de l'ennemi jusqu'au prochain objet 'WALL', dans la direction d (le script maxLengt(), c'est celui dans mon premier lien, juste renommé) En gros ce script balaye en 12 direction devant le personnage, cherche la longueur des différentes 'lignes', jusqu'au prochain objet mur, puis ce sert de ces lignes pour faire un collision_line, et voir si on trouve le perso dessus. En prime, ça affiche le tout. _________________ Tous les icones de gm utilisables sur le cbna ICI |
| | | Evilshroom Très bonne participation
Messages : 121 Localisation : .... Projet Actuel : ????????
| Sujet: Re: collision laser (ligne) Mer 7 Mar 2012 - 16:10 | |
| Merci, mais je mets ce code la ou? dans le joueur ou l'ennemi? Dans create ou step? - Code:
-
if (collision_line(x,y,x+lengthdir(100,direction),y+lengthdir_y(100,direction),obj_Player) && !colllision_line(x,y,x+lengthdir(100,direction),y+lengthdir_y(100,direction),obj_mur)) { //-> détecté } |
| | | 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: collision laser (ligne) Mer 7 Mar 2012 - 16:37 | |
| à M@d: Je n'ai pas trop réfléchi sur le truc mais pour vérifier une vision, niveau optimisation de calcule tu n'est pas mieux à créer un sprite de cône avec une surface est vérifier une collision, ensuite s'il y a une collision on vérifie la précision avec une collision line?
C'est une idée comme ça j'ai pas était confronté au problème. |
| | | Evilshroom Très bonne participation
Messages : 121 Localisation : .... Projet Actuel : ????????
| Sujet: Re: collision laser (ligne) Mer 7 Mar 2012 - 16:39 | |
| C'est une bonne idée, j'ai déja essayé, mais je prefere mieux le laser, merci quand meme. |
| | | M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: collision laser (ligne) Mer 7 Mar 2012 - 16:41 | |
| - Caly a écrit:
- à M@d:
Je n'ai pas trop réfléchi sur le truc mais pour vérifier une vision, niveau optimisation de calcule tu n'est pas mieux à créer un sprite de cône avec une surface est vérifier une collision, ensuite s'il y a une collision on vérifie la précision avec une collision line?
C'est une idée comme ça j'ai pas était confronté au problème. C'est effectivement une bonne idée d'optimisation: si le cône(sprite) ne rentre pas en collision avec le joueur, il est inutile de faire les autres calculs, c'est une très bonne idée! _________________ Tous les icones de gm utilisables sur le cbna ICI |
| | | Evilshroom Très bonne participation
Messages : 121 Localisation : .... Projet Actuel : ????????
| Sujet: Re: collision laser (ligne) Mer 7 Mar 2012 - 16:46 | |
| En fin de compte, oui. Mais il faudrait juste que le cone soit dévié par les blocks.... |
| | | 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: collision laser (ligne) Mer 7 Mar 2012 - 16:54 | |
| - Citation :
- Mais il faudrait juste que le cone soit dévié par les blocks....
Je n'ai pas compris ce que tu veux dire. |
| | | M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: collision laser (ligne) Mer 7 Mar 2012 - 16:57 | |
| - Evilshroom a écrit:
- En fin de compte, oui. Mais il faudrait juste que le cone soit dévié par les blocks....
Ben justement: si le cône détecte le joueur, tu affines la recherche avec la deuxième technique, en balancant des collision_lines, pour savoir si il y a un bloc entre le joueur et l'ennemi! Il faut utiliser les deux systèmes conjointement! _________________ Tous les icones de gm utilisables sur le cbna ICI |
| | | D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: collision laser (ligne) Mer 7 Mar 2012 - 17:17 | |
| Un sprite ? Une soustraction d'angles est trop simple ? :p _________________ Home is not a place, it's a feeling.
|
| | | M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: collision laser (ligne) Mer 7 Mar 2012 - 17:43 | |
| Effectivement, c'est encore mieux, on arrive à une solution vachement bien à force Pour résumer: -on regarde par différence d'angle si le joueur se trouve dans le cône de vision de l'ennemi -si oui, on regarde s'il y a un mur entre le joueur et l'ennemi (un collision_line() ) et c'est fini. J'étais parti sur de la dichotomie avec des collision_lines, parce qu'on a parlé de laser au début, alors qu'en fait, c'est vraiment pas nécessaire pour simuler la vision! (sauf si on veut dessiner cette fameuse vision) ... Quoi qu'un moteur de lumière 'basique' un peu détourné permet de dessiner un cône de vision plus précisément et facilement... Bref, on peut aller loin _________________ Tous les icones de gm utilisables sur le cbna ICI |
| | | Contenu sponsorisé
| Sujet: Re: collision laser (ligne) | |
| |
| | | | collision laser (ligne) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |