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

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.

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:

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:

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:

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"

Cita de: 3dgeminis 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.


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

Cita de: juantrix666 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:

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:

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:

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