Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Raiden en Mayo 07, 2017, 12:18:37 AM

Título: Pequeña duda sobre crear un diálogo
Publicado por: Raiden en Mayo 07, 2017, 12:18:37 AM
Estaba pensando en hacer un diálogo de la siguiente manera: creo un objeto que es la caja de diálogo, y después creo un script para añadir un texto a la caja de diálogo. Mi duda es, ¿es recomendable hacerlo de esta manera? ¿me recomiendan otra manera de hacerlo?

Quiero sacarme de dudas de una vez cual sería una manera óptima de hacer un script de diálogos, para no lamentarme luego.
Título: Re:Pequeña duda sobre crear un diálogo
Publicado por: Naitsabes0 en Mayo 07, 2017, 02:47:14 AM
Cita de: Raiden en Mayo 07, 2017, 12:18:37 AM
Estaba pensando en hacer un diálogo de la siguiente manera: creo un objeto que es la caja de diálogo, y después creo un script para añadir un texto a la caja de diálogo. Mi duda es, ¿es recomendable hacerlo de esta manera? ¿me recomiendan otra manera de hacerlo?

Quiero sacarme de dudas de una vez cual sería una manera óptima de hacer un script de diálogos, para no lamentarme luego.
Yo le recomiendo usar sprite y objetos de la siguiente forma:

1.- Crea los sprite (en mi caso esto)
(https://i.gyazo.com/5404f0239d24bcc2b260bfa192fde4cb.gif)
2.- Crea una fuente de letra (en mi caso esto)
(https://i.gyazo.com/92fe34c2c9004bdbbb122e20c6888d58.gif)
3.-Crea al objeto (en mi caso esto)
(https://i.gyazo.com/538443c5d99e30cdce6baa3bb651b5c1.gif)
4.-Programalo (en mi caso esto)
CREATE
/// Variables
event_inherited(); // heredar del padre las colisiones
pagina = 0;       // contador de pagina actual
paginas[0] = "";  // arreglo de páginas
mostrar = false; // mostrar cartel por defecto
pagina = -1;     // página actual, -1 = inactivo
image_speed =0.1;

STEP
/// Detectar si jugador abre el cartel
if (keyboard_check_pressed(ord('Z')) and distance_to_object(objJugador)<3) {
    mostrar = true;
}

// Si se aleja cerramos el cartel y reiniciamos pagina
if (distance_to_object(objJugador)>3) { mostrar = false; pagina = -1; }

/// Detectar si jugador pasa página
if (keyboard_check_pressed(ord('Z')) and mostrar) {
    // Pasar página
    if (pagina+1 < array_length_1d(paginas)) pagina++;
    else {
        // Si nos pasamos del máximo reiniciamos el cartel
        mostrar = false;
        pagina = -1;
    }
}

END STEP: Esto es simplemente luz no ayuda al codigo

DRAW GUI
/// Comprobar si el jugador está cerca
if(mostrar){
    draw_sprite(spr_HUD_Texto,0,0,32);
    draw_set_font(f_Texto);
    draw_set_valign(fa_center);
    draw_set_valign(fa_archive);
    draw_set_color(c_black);
    draw_text(224,48,paginas[pagina]);
    draw_set_color(c_white);
    draw_text(223,47,paginas[pagina]);
}

Vaz a creacion code del personaje o letrero en este caso, y le pones esto:
(https://i.gyazo.com/a255f7c992a7cbec675742191edbb4f5.gif)
Cada pagina
Título: Re:Pequeña duda sobre crear un diálogo
Publicado por: Raiden en Mayo 07, 2017, 03:17:15 PM
Gracias. ¿Es posible hacer un objeto (obj_dialogos) y luego, a los demás objetos, hacerlos parent de este? lo intenté y no me dejaba crearle eventos al otro objeto, me daba error y no sé porqué.
Título: Re:Pequeña duda sobre crear un diálogo
Publicado por: Naitsabes0 en Mayo 07, 2017, 08:12:06 PM
Cita de: Raiden en Mayo 07, 2017, 03:17:15 PM
Gracias. ¿Es posible hacer un objeto (obj_dialogos) y luego, a los demás objetos, hacerlos parent de este? lo intenté y no me dejaba crearle eventos al otro objeto, me daba error y no sé porqué.
Si se fija mi letrero es padre
(https://i.gyazo.com/538443c5d99e30cdce6baa3bb651b5c1.gif)
y este es un hijo
(https://i.gyazo.com/0873afc74d445228d2cb2b93190579c5.gif)
Ignora el  END STEP

DRAW GUI

/// Comprobar si el jugador está cerca
event_inherited();
if(mostrar){
    draw_sprite(spr_HUD_Texto,10,0,32);
    draw_set_font(f_Texto);
    draw_set_valign(fa_center);
    draw_set_valign(fa_archive);
    draw_set_color(c_black);
    draw_text(224,48,paginas[pagina]);
    draw_set_color(c_white);
    draw_text(223,47,paginas[pagina]);
}

No se mucho de esto, pero se lo suficiente para que funcione en el juego  :).