Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

* 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: [Resuelto] Trato de armar una linterna pero me sale mal  (Leído 1039 veces)

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

Desconectado Naitsabes0

Perdí información que cree hace meses, entre ellas la programación de la linterna, busque en la sección "Buscas" para ver si tenia una respuesta a esta pregunta, pero al parecer fueron borradas por una caída que tuvo el servidor, por lo que decidí empezar y retomar siguiendo unos tutoriales, sin embargo no logre armarlo de la forma que se debe, esto es lo que tengo después de muchas horas de intentos, se que el tema es muy viejo, pero es un elemento importante que forma parte del juego que estoy creando.
 
El sprite


obj_Jugador
evento draw:
///Creacion de la linterna
//para la apariencia de la linterna
draw_set_blend_mode(bm_add)
draw_sprite_ext(spr_Luz,0,x,y,5,5,45,c_white,0.2)
draw_sprite_ext(spr_Luz,0,x,y,1,1,0,c_white,1)
draw_set_blend_mode(bm_normal)

//para que se vea el personaje.
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle
,image_blend,image_alpha)

obj_Oscuridad
evento draw:
 ///Dibuja la oscuridad
depth = 1; //ajusto la profundidad
draw_set_color(c_black)
draw_set_alpha(1) // 1 oscuro total 0.5 poco oscuro
draw_rectangle(view_xview[0]-2,view_yview[0]-
2,view_xview[0]+view_wview,view_yview[0]+view_hview,0)
draw_set_color(c_white)
draw_set_alpha(1)
//Esto es para hacer un rectángulo negro en la view.

Lo que espero lograr:  :)
GIF de Zelda: A Link to the Past

-La oscuridad sea absoluta y nada se vea hasta ser alumbrado.
-La luz se mueva con el personaje centrado.
-La luz debe mostrar al personaje y lo que le rodea.
Básicamente se resume en el gif de arriba.

Lo que logre:  :(
GIF de una habitación del juego

Pues logre armar la linterna técnicamente, sin embargo la luz no deja ver lo que hay en su interior, se aleja del jugador, la oscuridad no oculta nada, creo que estoy muy lejos de que el código logre crear el sistema de linterna que se ve en el GIF de Zelda, o al menos el comportamiento típico de una linterna circular.   :-\

Si has llegado hasta este punto gracias por leer.  :D
« Última modificación: Agosto 15, 2017, 03:20:59 am por Naitsabes0 »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2848
  • Mensajes: 1.715
  • Agradecido: 152 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Respuesta #1 en: Agosto 14, 2017, 03:26:37 am
Creo que el GameMaker: Studio viene con un tutorial de ello, ahí hay un código completo de eso. Puede que te sirva.

alaberga regué el café.

BA:STFW&RTFM
 
Los siguientes usuarios dieron las gracias a este tema: Johann, Yuzo, Naitsabes0


Desconectado Naitsabes0

Respuesta #2 en: Agosto 14, 2017, 05:02:50 am
Creo que el GameMaker: Studio viene con un tutorial de ello, ahí hay un código completo de eso. Puede que te sirva.

:o Vaya GM:S tenia esta función todo el tiempo? realmente interesante, el código es grande y esta en ingles, se ve algo complicado de lo que espere desde un principio, veré como me resulta.  :), pero todavía lo tendré como pendiente.

 


Desconectado Naitsabes0

Respuesta #3 en: Agosto 14, 2017, 11:18:02 am
Creo que el GameMaker: Studio viene con un tutorial de ello, ahí hay un código completo de eso. Puede que te sirva.

No logre armar la linterna en la forma circular para el personaje.  :(

 


Desconectado Zapdos43

Respuesta #4 en: Agosto 14, 2017, 12:38:46 pm
Los siguientes videotutoriales te podrían ayudar:
Video 1:
Video 2:

Espero te sirvan.

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo, Naitsabes0


Desconectado Naitsabes0

Respuesta #5 en: Agosto 15, 2017, 12:26:38 am
Los siguientes videotutoriales te podrían ayudar:
Video 1:
Video 2:

Espero te sirvan.

Después de estar interpretando el código de los tutoriales de ingles, llegue a armar lo que buscaba, sin embargo la linterna oculta al personaje y no he visto la razón de porque esta ocurriendo, le he cambiado las "depth" en el acceso rápido al jugador para que tenga -1000, ya que el sprite invisible de la luz tiene -999.

Esto es lo que logre armar durante muchas horas de prueba y error.

obj_Luz "sin sprite"
depth -999
create:
///Crear la superficie

superficie = surface_create(room_width, room_height);

surface_set_target(superficie);
draw_clear_alpha(c_black, 0);

//Reinicia la superficie
surface_reset_target();

step:
///Control de la oscuridad
if (surface_exists(superficie)){
    surface_set_target(superficie);
   
    //conjunto oscuridad
    draw_set_colour(c_black);
    draw_set_alpha(1); //intencidad de la oscuridad 0 nada 1 absoluta
    draw_rectangle(0, 0, room_width, room_height, false);
   
    //conjunto circulos
    draw_set_blend_mode(bm_subtract);
   
   
    draw_set_colour(c_black);
    draw_set_alpha(0.2);
   
   
    // dibuja circulos
    with (obj_Jugador) {
        draw_circle(x + random_range(-1,1), y + random_range(-1,1), 80 + random_range(-1, 1), false);
       
        }
       
        draw_set_colour(c_white);
        draw_set_alpha(1);
       
        with (obj_Jugador) {
        draw_circle(x + random_range(-1,1), y + random_range(-1,1), 45 + random_range(-1, 1), false);
       
        }
       
       
       
    //Reinicia todo el conjunto dibujo
    draw_set_blend_mode(bm_normal);
    draw_set_alpha(1);
    surface_reset_target();
} else {
    superficie = surface_create(room_width, room_height);
    surface_set_target(superficie);
    draw_clear_alpha(c_black, 0);
    surface_reset_target();
}

room end:
/// destruir la superficie
if (surface_exists(superficie)) {
    surface_free(superficie);
}

draw:
///Dibuja la superficie

if (!surface_exists(superficie)) {
    superficie = surface_create(room_width, room_height);
} else {
    if (view_current == 0) {
        draw_surface(superficie, 0, 0);
    }
}

 


Desconectado Zapdos43

Respuesta #6 en: Agosto 15, 2017, 01:05:50 am
Enhorabuena por tu esfuerzo.

En cuanto al problema del personaje invisible prueba a crear un evento Draw en el personaje con el código:
draw_self();

En caso de que funcione (que no sé si funcionará) es porque habías declarado dibujar círculos dentro del objeto del personaje. Como esta parte de tu código:
 // dibuja circulos
    with (obj_Jugador) {
        draw_circle(x + random_range(-1,1), y + random_range(-1,1), 80 + random_range(-1, 1), false);
       
        }

 
Los siguientes usuarios dieron las gracias a este tema: Yuzo