Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: zangetsu en Diciembre 13, 2014, 08:43:53 PM

Título: disparo de láser mas pesiso
Publicado por: zangetsu en Diciembre 13, 2014, 08:43:53 PM
hola a todos, este tema me lleva comiendo la cabeza hace rato y quisiera saber si me podrían ayudar. lo que quiero lograr es que cuando mi personaje dispare el láser solo se detenga la parte del láser que le da al enemigo no importa si esta lejos o cerca y si no le da a nada que siga hasta el extremo de la room. desde ya gracias
Título: Re:disparo de láser mas pesiso
Publicado por: Marth en Diciembre 13, 2014, 09:55:11 PM
Si te explicaras mejor que es lo que quieres... :-X
Título: Re:disparo de láser mas pesiso
Publicado por: zHeMaa en Diciembre 13, 2014, 10:02:31 PM
Creo que te refieres a que el láser solo quieres que desaparezca si llega al extremo de la room y cuando colisiona con el personaje.

Si es asi tienes que hacer esto:
En tu objeto láser:
Outside room:
instance_destroy()

Y con los enemigos igual:
Colision enemigo -> láser
instance_destroy()

No se si es bien bien eso lo que quieres, si es así pruebalo!
Título: Re:disparo de láser mas pesiso
Publicado por: zangetsu en Diciembre 14, 2014, 01:25:44 AM
tienen razón soy un asco explicando jajaja. lo que quería decir es que quiero hacer un objeto bala ( desde ya obj. láser) que al colisionar con un enemigo (no importa la distancia) no desaparezca por su colisión, ni dé efecto de atravesar al enemigo. intente hacer un obj. muy largo de 600p para dar el efecto de láser, pero no funciono, al colisionar desaparecía el láser, luego hice uno corto de 16p, pero mataba a los enemigos muy rápido no importa la vida que le ponga a los enemigos
Título: Re:disparo de láser mas pesiso
Publicado por: Marth en Diciembre 14, 2014, 10:15:12 PM
¿Tu lo que quieres es que la bala solo dañe una vez al oponente, pero que no desaparezca?
Si es así, haz que al golpear a un enemigo, cambien a un objeto que tendría el mismo sprite, pero no puede dañar a más oponentes.
Al usar instance_change, se conserva la velocidad de desplazamiento del objeto original.
Título: Re:disparo de láser mas pesiso
Publicado por: Zela en Diciembre 14, 2014, 11:31:59 PM
Hola,

Tomando Parte De Dos Citas.
Cita de: zangetsu en Diciembre 13, 2014, 08:43:53 PM
... lo que quiero lograr es que cuando mi personaje dispare el láser solo se detenga la parte del láser que le da al enemigo ...
Cita de: zangetsu en Diciembre 14, 2014, 01:25:44 AM
... quiero hacer un objeto bala ( desde ya obj. láser) que al colisionar con un enemigo (no importa la distancia) no desaparezca por su colisión, ni dé efecto de atravesar al enemigo. ...

A Primera Impresión, Pienso Que Se Enreda Sin Querer  :P.

Si Lo Intento Llevar De Forma Gráfica Seria Como:

Pensemos En Un Laser de Líneas Y Un Objeto.
Visto Con Lupa Tendríamos.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------------------------------------|         |
------------------------------------------------|         |
------------------------------------------------|         |
------------------------------------------------|         |
------------------------------------------------|         |
------------------------------------------------|         |   <--- Objeto
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Pues Es Lo Que Dices, Según La Primera Cita.
Según La Segunda Cita, No Entiendo Nada De Nada  :-[.

Básicamente Seria Lograr Un Efecto De Luz Con Conque De Muros, Como Usar Una Linterna Al Iluminar Un Objeto Y Pasa La Luz Que No Choca (contra un muro por ejemplo), Pero En Línea Recta.
Creo Que Es Lo Que Dices  :)

Saludos.
Título: Re:disparo de láser mas pesiso
Publicado por: Clamud en Diciembre 15, 2014, 03:55:14 AM
¿Quieres hacer un laser como el de Metal Slug?
Título: Re:disparo de láser mas pesiso
Publicado por: zangetsu en Diciembre 16, 2014, 03:47:19 AM
Cita de: Clamud en Diciembre 15, 2014, 03:55:14 AM
¿Quieres hacer un laser como el de Metal Slug?
exactamente eso, alguien me entendió :'(, que bien...
Título: Re:disparo de láser mas pesiso
Publicado por: Zenkro en Diciembre 16, 2014, 08:21:50 AM
Cita de: zangetsu en Diciembre 16, 2014, 03:47:19 AM
Cita de: Clamud en Diciembre 15, 2014, 03:55:14 AM
¿Quieres hacer un laser como el de Metal Slug?
exactamente eso, alguien me entendió :'(, que bien...

Yo lo que haría es un sprite del láser bien largo o al menos del tamaño de la view y poner una alarma que se destruya a los X segundos. Y para matar a los enemigos, si usaste una variable estilo vida = 5; le pones de daño algo estilo 100 o algo asi. O si usaste un parent para los enemigos podes usar la funcion other: daño = other.vida y así tendrías algo como lo querés.
Título: Re:disparo de láser mas pesiso
Publicado por: Clamud en Diciembre 16, 2014, 08:02:19 PM
Suponiendo que el laser es completamente horizontal y se dispara hacia la derecha, creamos una instancia del objeto laser, en algún evento del objeto jugador:
[gml]
instance_create( x,y, obLaser );
[/gml]
En el evento Create de obLaser ponemos esto:
[gml]
x0 = x; // punto inicial
y0 = y;

while( collision_point(x,y,all,false,true ) == noone // mientras no impacte con un objeto
and                                                  // y
x <= (view_xview + view_wview) )                     // no se salga de la view
x += 8;                                              // el rayo se sigue extendiendo

if( collision_point( x,y,all,false,true) != noone ) {      // si ha impactado en un objeto
    do x--;                                                // regresar un pixel a la izquierda
    until( collision_point( x,y,all,false,true) == noone ) // hasta quedar en el borde del objeto
}
[/gml]
Para avanzar el rayo he puesto un valor de 8 pero debes ajustarlo al tamaño de la máscara de colisión de tus objetos, para que no los salte sin detectarlos, y no debe ser un valor muy pequeño, para que el ciclo no se repita demasiadas veces. En el tipo de objetos que se detectan he puesto all (todos), pero es probable que no quieras que el laser choque con ciertos objetos, entonces deberás poner varias condiciones para cada tipo de objeto a detectar.

Luego en el evento Draw del laser:
[gml]
draw_circle( x0,y0, 10, false );  // circulo en la boca del arma que dispara
draw_line_width( x0,y0, x,y, 4 ); // el rayo
draw_self();                      // se dibuja el propio sprite, en las posición en la que choca
[/gml]
El sprite del objeto laser se usa para tener una máscara de colisión y para hacer el efecto de una pequeña explosión o un resplandor en el lugar que impacta. Para darle una mejor apariencia puedes hacer que el color cambie en cada step (como en Metal Slug) o usar las funciones para dibujar círculos y líneas con dos colores a la vez, o en vez de usar esas funciones puedes dibujar sprites.

Por último el objeto laser se destruye en algún evento antes de que se dispare otro rayo con posición y forma actualizada:
[gml] instance_destroy(); [/gml]

Ahora tienes que ajustar el código para disparar hacia la izquierda, arriba y abajo. Si el rayo se va a disparar con diferentes inclinaciones, tal vez sea mejor usar otro método.
Título: Re:disparo de láser mas pesiso
Publicado por: zangetsu en Diciembre 17, 2014, 04:29:01 AM
muchas gracias Clamud el código me funciono ahora me resta toquetearlo un poco para que dispare en todas las direcciones porque el personaje se mueve 360º. la view es 1024x600 de que tamaño me recomiendan que sea el sprite del láser?