Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

* Sponsor

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Como hacer lasers que rebotan en las paredes  (Leído 782 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado somnus

en: Marzo 19, 2019, 09:44:38 pm
Hola, alguien tiene la idea, codigo o ejemplo de como hacer esos lasers que cuando te dispara el enemigo rebotan en las paredes?
para que entiendan a que me refiero serian algo asi como el laser del gemini man del megaman 3

Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado 3dgeminis

Respuesta #1 en: Marzo 20, 2019, 07:54:06 pm
Vi un video y parece que se crea otro laser al momento de la colision con nuevo angulo de movimiento y desaparece el otro.
Podrias hacer que sean varios objetos, uno detras de otro para que parezca que sea una linea.

 


Desconectado juantrix666

Respuesta #2 en: Marzo 21, 2019, 06:39:27 am
Primero, perdonen las faltas de ortografia  :-[

Te muestro como lo hice :
Cree un objeto laser, con un sprite de un circulo (en mi codigo es sprite11) y se crea a partir del player, de ahi toma la direccion inicial segun el sprite si mira para un lado u otro.

Create:
Código: [Seleccionar]
largo = 10//largo del laser (cantidad de sprites)
vsp = 0 //velocidad vertical
hps = 0 //velocidad horizontal
laser[largo,1] = 0// array para almacenar las posiciones de cada sprite

for (i=0;i<largo;i++){//setea el array en 0's
    laser[i,0] = 0
    laser[i,1] = 0
}


if obj_player.image_xscale > 0{//la direccion depende de hacia donde mira el pj en mi caso

    hsp = 8

}else{

    hsp = -8

}

Step:
Código: [Seleccionar]
x += hsp
y += vsp

//la primer posicion del array siempre son las cordenadas actuales
laser[0,0]= x
laser[0,1]= y

//aca muevo todo los valores hacia la drecha y el ultimo es descartado
for (i=0;i<largo;i++){

    laser[largo-i,0] = laser[largo-i-1,0]
    laser[largo-i,1] = laser[largo-i-1,1]
}

//si detecta una colicion arriba o abajo y la velocidad vertical es no es 0 invierte la velocidad y si vps es 0 sale hacia arriba (esto porque al inicio el laser sale derecho y al primer rebote toma una direccion)
 if collision_line(x,y-sprite_yoffset-5,x,y+sprite_yoffset+5,obj_piso,1,1) && vsp != 0{
   
        vsp*= -1
   }else if vsp = 0{
   
       vsp = -8
   
   }
   //Si coliciona con un lateral se invierte la velocidad horizontal
   if collision_line(x-sprite_xoffset-5,y,x+sprite_xoffset+5,y,obj_piso,1,1){
   
        hsp *= -1
   
   }

Draw:
Código: [Seleccionar]
draw_sprite(sprite11,0,x,y)//dibujo el primer sprite

for (i=1;i<largo;i++){//Dibujo los demas sprites

    draw_sprite(sprite11,0,laser[i,0],laser[i,1])

}

Espero te sirva de algo.

"haz lo que te haga feliz pero tendras que afrontar las consecuencias"
 
Los siguientes usuarios dieron las gracias a este tema: somnus


Desconectado somnus

Respuesta #3 en: Marzo 21, 2019, 06:10:18 pm
Vi un video y parece que se crea otro laser al momento de la colision con nuevo angulo de movimiento y desaparece el otro.
Podrias hacer que sean varios objetos, uno detras de otro para que parezca que sea una linea.


ya habia pensado en eso pero supuse que era muy lioso, esperaba encontrar una major solucion y mas simple, gracias 3dgeminis

Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala
 


Desconectado somnus

Respuesta #4 en: Marzo 21, 2019, 06:12:02 pm
Primero, perdonen las faltas de ortografia  :-[

Te muestro como lo hice :
Cree un objeto laser, con un sprite de un circulo (en mi codigo es sprite11) y se crea a partir del player, de ahi toma la direccion inicial segun el sprite si mira para un lado u otro.

Create:
Código: [Seleccionar]
largo = 10//largo del laser (cantidad de sprites)
vsp = 0 //velocidad vertical
hps = 0 //velocidad horizontal
laser[largo,1] = 0// array para almacenar las posiciones de cada sprite

for (i=0;i<largo;i++){//setea el array en 0's
    laser[i,0] = 0
    laser[i,1] = 0
}


if obj_player.image_xscale > 0{//la direccion depende de hacia donde mira el pj en mi caso

    hsp = 8

}else{

    hsp = -8

}

Step:
Código: [Seleccionar]
x += hsp
y += vsp

//la primer posicion del array siempre son las cordenadas actuales
laser[0,0]= x
laser[0,1]= y

//aca muevo todo los valores hacia la drecha y el ultimo es descartado
for (i=0;i<largo;i++){

    laser[largo-i,0] = laser[largo-i-1,0]
    laser[largo-i,1] = laser[largo-i-1,1]
}

//si detecta una colicion arriba o abajo y la velocidad vertical es no es 0 invierte la velocidad y si vps es 0 sale hacia arriba (esto porque al inicio el laser sale derecho y al primer rebote toma una direccion)
 if collision_line(x,y-sprite_yoffset-5,x,y+sprite_yoffset+5,obj_piso,1,1) && vsp != 0{
   
        vsp*= -1
   }else if vsp = 0{
   
       vsp = -8
   
   }
   //Si coliciona con un lateral se invierte la velocidad horizontal
   if collision_line(x-sprite_xoffset-5,y,x+sprite_xoffset+5,y,obj_piso,1,1){
   
        hsp *= -1
   
   }

Draw:
Código: [Seleccionar]
draw_sprite(sprite11,0,x,y)//dibujo el primer sprite

for (i=1;i<largo;i++){//Dibujo los demas sprites

    draw_sprite(sprite11,0,laser[i,0],laser[i,1])

}

Espero te sirva de algo.

Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala