Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: harrymx en Febrero 10, 2014, 01:54:59 AM

Título: Ayuda con codigo para monstrar mensaje
Publicado por: harrymx en Febrero 10, 2014, 01:54:59 AM
Tengo un problema con un codigo obsoleto
como utilizo ahora un mensaje que aparezca como pop up con 3 respuestas

veia muchos tutoriale que se utilizaba show_message_ext (str,but1,but2,but3)

pero este codigo esta obsoleto alguien sabe cual es el nuevo para   :GMS:?
Título: Re:Ayuda con codigo para monstrar mensaje
Publicado por: Iros en Febrero 10, 2014, 02:08:33 AM
Lo único que se me ocurre es que lo programés, tendrías que hacer un objeto que se coloque delante de todo y dibujar el texto con las opciones a elegir y que compruebe si se hizo clic en la posición del 1° botón, 2° botón o 3° botón, otra no hay :S

[EDIT]

No pude resistirme y lo programé, acá te dejo el código.

En un objeto, en el evento draw poné esto:

[gml]
draw_set_color(c_white);
draw_rectangle((room_width/2)-200,(room_height/2)-70,(room_width/2)+200,(room_height/2)+70,0);
draw_set_color(c_black);
draw_rectangle((room_width/2)-200,(room_height/2)-70,(room_width/2)+200,(room_height/2)+70,1);

draw_set_font(font0);
draw_text((room_width/2)-190,(room_height/2)-60,"Esto es un ejemplo básico de sistema de menú.#¿Qué desea hacer?");

draw_rectangle((room_width/2)-190,(room_height/2)+35,(room_width/2)-100,(room_height/2)+60,1);
draw_text((room_width/2)-188,(room_height/2)+37,"Opción 1");

draw_rectangle((room_width/2)-45,(room_height/2)+35,(room_width/2)+45,(room_height/2)+60,1);
draw_text((room_width/2)-42,(room_height/2)+37,"Opción 2");

draw_rectangle((room_width/2)+100,(room_height/2)+35,(room_width/2)+190,(room_height/2)+60,1);
draw_text((room_width/2)+102,(room_height/2)+37,"Opción 3");
[/gml]

Lo que hacemos ahí es dibujar un rectángulo blanco y dibujarle un bordecito negro, luego dibujamos el texto y los tres botones del menú (podes ampliar el tamaño con el segundo room_width/2).

En el evento step:

[gml]
if (mouse_x > (room_width/2)-190 && mouse_x < (room_width/2)-100 && mouse_y > (room_height/2)+35 && mouse_y < (room_height/2)+60) {
    if (mouse_check_button_released(mb_left)) {
        show_message("Opción 1");
    }
}

if (mouse_x > (room_width/2)-45 && mouse_x < (room_width/2)+45 && mouse_y > (room_height/2)+35 && mouse_y < (room_height/2)+60) {
    if (mouse_check_button_released(mb_left)) {
        show_message("Opción 2");
    }
}

if (mouse_x > (room_width/2)+100 && mouse_x < (room_width/2)+190 && mouse_y > (room_height/2)+35 && mouse_y < (room_height/2)+60) {
    if (mouse_check_button_released(mb_left)) {
        show_message("Opción 3");
    }
}
[/gml]

Lo que hacemos ahí es comprobar si la posición del mouse está entre los valores de cada uno de los botones, si ese es el caso y si se presionó y soltó el botón derecho del mouse vamos a hacer una acción, en este caso un show_message.

Algo importante es que si modificás el tamaño de los cuadros de opciones en el evento draw, tenes que modificarlo también en el evento step.

PD: draw_set_font(font0); es una fuente con los 255 caracteres.
Título: Re:Ayuda con codigo para monstrar mensaje
Publicado por: harrymx en Febrero 10, 2014, 07:41:16 AM
Cita de: Iros en Febrero 10, 2014, 02:08:33 AM
Lo único que se me ocurre es que lo programés, tendrías que hacer un objeto que se coloque delante de todo y dibujar el texto con las opciones a elegir y que compruebe si se hizo clic en la posición del 1° botón, 2° botón o 3° botón, otra no hay :S

[EDIT]

No pude resistirme y lo programé, acá te dejo el código.

En un objeto, en el evento draw poné esto:

[gml]
draw_set_color(c_white);
draw_rectangle((room_width/2)-200,(room_height/2)-70,(room_width/2)+200,(room_height/2)+70,0);
draw_set_color(c_black);
draw_rectangle((room_width/2)-200,(room_height/2)-70,(room_width/2)+200,(room_height/2)+70,1);

draw_set_font(font0);
draw_text((room_width/2)-190,(room_height/2)-60,"Esto es un ejemplo básico de sistema de menú.#¿Qué desea hacer?");

draw_rectangle((room_width/2)-190,(room_height/2)+35,(room_width/2)-100,(room_height/2)+60,1);
draw_text((room_width/2)-188,(room_height/2)+37,"Opción 1");

draw_rectangle((room_width/2)-45,(room_height/2)+35,(room_width/2)+45,(room_height/2)+60,1);
draw_text((room_width/2)-42,(room_height/2)+37,"Opción 2");

draw_rectangle((room_width/2)+100,(room_height/2)+35,(room_width/2)+190,(room_height/2)+60,1);
draw_text((room_width/2)+102,(room_height/2)+37,"Opción 3");
[/gml]

Lo que hacemos ahí es dibujar un rectángulo blanco y dibujarle un bordecito negro, luego dibujamos el texto y los tres botones del menú (podes ampliar el tamaño con el segundo room_width/2).

En el evento step:

[gml]
if (mouse_x > (room_width/2)-190 && mouse_x < (room_width/2)-100 && mouse_y > (room_height/2)+35 && mouse_y < (room_height/2)+60) {
    if (mouse_check_button_released(mb_left)) {
        show_message("Opción 1");
    }
}

if (mouse_x > (room_width/2)-45 && mouse_x < (room_width/2)+45 && mouse_y > (room_height/2)+35 && mouse_y < (room_height/2)+60) {
    if (mouse_check_button_released(mb_left)) {
        show_message("Opción 2");
    }
}

if (mouse_x > (room_width/2)+100 && mouse_x < (room_width/2)+190 && mouse_y > (room_height/2)+35 && mouse_y < (room_height/2)+60) {
    if (mouse_check_button_released(mb_left)) {
        show_message("Opción 3");
    }
}
[/gml]

Lo que hacemos ahí es comprobar si la posición del mouse está entre los valores de cada uno de los botones, si ese es el caso y si se presionó y soltó el botón derecho del mouse vamos a hacer una acción, en este caso un show_message.

Algo importante es que si modificás el tamaño de los cuadros de opciones en el evento draw, tenes que modificarlo también en el evento step.

PD: draw_set_font(font0); es una fuente con los 255 caracteres.

Wow!!! muchas gracias :D creo que esto le servirá a muchos  :D
Título: Re:Ayuda con codigo para monstrar mensaje
Publicado por: Iros en Febrero 10, 2014, 04:36:50 PM
Algo que me olvidé de poner es que para activarlo o desactivarlo directamente encierran los dos códigos dentro de un if y ese if que compruebe si una variable es true o false, si es true se muestra, si es false no se muestra.