Oscuridad y Lampara [Solucionado]

Publicado por T789, Mayo 01, 2020, 07:59:08 PM

Tema anterior - Siguiente tema

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

T789

Hola a todos, hace tiempo cree un tema para saber como hacer juegos de Survival Horror, pues ahora que estaba preparando la tematica para el Juego me estaba preguntando como hacer las Sombras y la Iluminacion

Pues ahi la pregunta como hacerlo, estaba usando un truco sencillo para lograrlo, cree un objeto lampara y en el una variable para determinar si estaba encendida

///Evento Create
global.lampara = false; depth = -100;


///Evento Draw
if (global.lampara) draw_sprite(spr_lampara, 1, obj_player.x, obj_player.y) else draw_sprite(spr_lampara, 0, obj_player.x, obj_player.y)


El truco esta en las subimagenes, la subimagen 0 es un rectangulo negro de 640×480, y la subimagen 1 es exactamente igual excepto que en el centro voy reduciendo la opacidad para crear ese efecto de que esta iluminando

Parece funcionar bastante bien pero el problema es que tendria que empezar el Juego con la lampara activada pero lo que yo quiero es entrar en un cuarto ya iluminado y ahi agarrar la lampara, como haria para lograr esa iluminacion pues si lo hago con sprite tendria que usar multiples Sprites y modificar manualmente cada uno y eso seria tarduoso y molesto

Conocen algun metodo mas eficiente para conseguir ese efecto

TomasYSara

amigo el otro dia encontre un ejemplo para hacer luces con colores pero seguro te sirve https://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=2360

T789

Eso me serviria para una lampara de advertencia

Mi pregunta va mas alla, sobre la profundidad en la oscuridad y las lamparas encima de esa oscuridad, si sin duda va mucho mas alla

3dgeminis

No necesitas crear un sprite de ese tamaño, sino crear una surface de ese tamaño, pintarla de negro, y con sprites que representes las luces "borrar" la surface en donde esten las luces.

Clamud

El recorte se puede hacer de varias formas. Este es un ejemplo en GMLive.
Lo difícil es entender cómo funcionan los blend modes.

T789

Bueno nunca he trabajado con surfaces, pero si con eso logro crear una iluminacion pues vere cuanto me toma aprender a usarlas

no se como funcionan las surfaces pero con borrarlas no desaparecerian o es que estas persisten ???

elviskelley

usa un teñido
[gml]draw_set_blend_mode(bm_add)
draw_sprite_ext(spr_Luz,0,x,y,5,5,45,c_white,0.5)
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha);
draw_set_blend_mode(bm_normal)[/gml]

el spr_Luz Logico es la lampara y debe ser blanco con tonos grises claros.
Atentamente.-
Elvis Kelley
Mi Manual.
Mi canal de Youtube Youtube click aqui

T789

Ya se como funcionan las Surfaces, no tomo mas de 1 dia aprender a usarlas, y el metodo para la Iluminacion es mucho mas optimo que usar varios Sprites

[gml]
/// Event Create del obj_controlador
glovalvar LightOn;
LightOn = false; //Para prender la iluminacion

/// Evento KeyPress "L"
LightOn = !LightOn;
[/gml]

[gml]
/// Event Create del obj_iluminacion
Surf = surface_create(room_width, room_height)

// Limpiar alpha
surface_set_target(Surf)
draw_clear_alpha(c_black, 0)
surface_reset_target()
[/gml]

[gml]
/// Event Room_start del obj_iluminacion
fuerzaS = 0;
fd = 1;
[/gml]

[gml]
/// Event BeginStep
switch(fd) //Gestionar fuerza a la que se expandera y reducira el radio de iluminacion continuamente
{
case 1:
if (fuerzaS < 2) fuerzaS += 0.1; else fd = -1;
break;

case -1:
if (fuerzaS > -2) fuerzaS -= 0.1; else fd = 1;
break;
}
[/gml]

[gml]
/// Event Step del obj_iluminacion
if surface_exists(Surf) {
    surface_set_target(Surf) //Iniciar Surface

    // Iniciar Oscuridad en la surface
    draw_set_alpha(0.9)
    draw_set_color(c_black)
    draw_rectangle(0, 0, room_width, room_height, false)

    // Si esta activa la iluminacion
    if (LightOn)
    {
      draw_set_blend_mode(bm_subtract)
      draw_set_color(c_white)
     
      // Iluminacion en el Jugador
      with(obj_player) {
          //Segunda radio de iluminacion
          draw_set_alpha(0.2)
          draw_circle(x, y, 38 + other.fuerzaS, false)
          //Primer radio de iluminacion
          draw_set_alpha(1)
          draw_circle(x, y, 20 + other.fuerzaS, false)
      }
      //Pequeña iluminacion sobre la mira
      with(obj_mira) {
          draw_set_alpha(0.4)
          draw_circle(x-1, y-1, 16 + other.fuerzaS, false)
      }
      draw_set_blend_mode(bm_normal)
    }

    //Resetear la surface
    draw_set_alpha(1)
    surface_reset_target()
}
else
{
event_perform(ev_create, 0)
}
[/gml]

[gml]
/// Event Room End
if surface_exists(Surf)
   surface_free(Surf)
[/gml]

[gml]
/// Event Draw del obj_iluminacion
if surface_exists(Surf) //Solo dibujara la surface si existe
draw_surface(Surf, 0, 0)
else
event_perform(ev_create, 0)
[/gml]

Bueno aun no se como funcionan los "Blend Modes" pues me confundio un poco el bm_subtract, de todas formas logre aprender a usar las Surfaces  :-[

Por cierto ese codigo es un poco largo, nose si deberia subir la editable en la seccion de Descargas  ???

Powered by EzPortal
SMF spam blocked by CleanTalk