Noticias

¡Ayuda a la Comunidad GM, haz una donación!

* 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: Preguntas Personalisadas y Fullscrean  (Leído 276 veces)

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

Desconectado Marcusmaniacus

en: Agosto 08, 2018, 01:07:05 am
Tengo un pequeño problema con las preguntas, dado que quiero  una  pregunta  con respuestas personalizadas,   y aparte tengo un problema con el fullscrean del juego, cunado sale el cartel de las preguntas....
1  El problema es como crear una pregunta con respuestas personalizadas.
Vi en intenet un caso que decía lo siguiente 

switch (show_message_ext("Texto1","Respuesta1","respuesta2",etc....))
case 1 : { show_message("Respuesta ala respuesta1 ");} break
case 1 : { show_message("Respuesta ala respuesta 3");} break

este es el video  (No se si este proibuido poner links de videos si lo esta perdonenme)


El problema del video es que   "show_message_ext" No existe en game maker  Studio  T_T 

2 el problema del full screan es de que   cada vez que  me sale un cartel me saca del full screan
 




 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado BssString

Respuesta #1 en: Agosto 08, 2018, 03:23:50 am
Hola Marcusmaniacus

La función show_message_ext existió hasta GM8, en GMS1.4 pasó a ser obsoleta.

Y no hay manera de evitar que desaparezca el full screen cuando creas un pop-up message, por eso el "show_message" sólo debería usarse para debug.

Mi sugerencia es que crees tus propios cuadros de preguntas, utilizando objetos

Saludos Cordiales

 


Desconectado Clamud

Respuesta #2 en: Agosto 08, 2018, 04:45:20 am
También debes utilizar "flags" o estados para evitar que otros objetos del juego realicen acciones cuando se muestra la pregunta.

 


Desconectado BssString

Respuesta #3 en: Agosto 08, 2018, 06:11:00 am
Hola Marcusmaniacus

Te he escrito un código sencillo que puede reemplazar el sistema de preguntas de los popup messages, aunque pienso que mi método es un poco arcaico.
Tu puedes modificar lo que quieras para adaptarlo a tus necesidades.

Para ello necesitamos un objeto visible y sin sprite, yo lo he llamado "obj_msg_box", es el encargado de pausar el juego y mostrar las preguntas.

CREATE EVENT
Código: [Seleccionar]
surface = surface_create(view_wview[0],view_hview[0]) //Crea una surface momentanea del tamaño de la view
surface_copy(surface,0,0,application_surface) //Copia el frame anterior a la nueva surface
instance_deactivate_all(true) //Desactiva todos los objetos (menos el cuadro de texto) como falso efecto de pausa
question = "" //Es la pregunta (la recibe desde el script)
choises = ds_list_create() //Son las respuestas (las recibe desde el script)
answer = 0 //Es la línea que estás eligiendo como respuesta, 0 es la primera
width = 0 //Es el ancho que tomará el cuadro (lo calcula en el script)
height = 0 //Es el alto que tomará el cuadro (lo calcula en el script)

DESTROY EVENT
Código: [Seleccionar]
if ds_exists(choises,ds_type_list) ds_list_destroy(choises) //Elimina la lista del cache
if surface_exists(surface) surface_free(surface) //Elimina la surface del cache
instance_activate_all() //Re-activa todas las instancias (un falto efecto de despausa)

/*La respuesta seleccionada está en la variable "answer", la puedes usar para tomar decisiones aquí
ej: ejecutar un script o pasarle la variable a otro objeto, etc.*/

STEP EVENT
Código: [Seleccionar]
if keyboard_check_pressed(vk_down) {
answer += 1 //elige la opción de abajo
if answer > ds_list_size(choises)-1 answer -= ds_list_size(choises) //si ya no había más opciones, vuelve al inicio
}
if keyboard_check_pressed(vk_up) {
answer -= 1 //eliga la opción de arriba
if answer < 0 answer += ds_list_size(choises) //si no había más opciones, salta al final
}

if keyboard_check_pressed(vk_enter) { instance_destroy() } //Seleccionas la respuesta

GAME END EVENT
Código: [Seleccionar]
if ds_exists(choises,ds_type_list) ds_list_destroy(choises) //elimina la lista del cache
if surface_exists(surface) surface_free(surface) //elimina la surface del cache

DRAW EVENT
Código: [Seleccionar]
draw_surface(surface,view_xview[0],view_yview[0]) //Dibuja el "frame anterior" (para dar el efecto de pausa)
var xx = view_xview[0]+(view_wview[0]/2)-width //Arregla este código, no supe calcular el centro de la pantalla jajajaj
var yy = view_yview[0]+(view_hview[0]/2)-height //lo mismo aca
var offset = string_height(question) //es la cantidad de pixeles que se salta para dibujar la siguiente línea
draw_set_colour(c_dkgray)
draw_rectangle(xx,yy,xx+width,yy+offset,false) //dibuja un rectangulo gris oscuro donde va la pregunta
draw_set_colour(c_white)
draw_rectangle(xx,yy+offset,xx+width,yy+height,false) //dibuja un rectangulo blanco donde van las respuestas
draw_set_colour(c_black)
draw_rectangle(xx,yy,xx+width,yy+height,true) //dibuja un borde negro en el recuadro
draw_text(xx,yy,question) //Escribe el texto de la pregunta
for (var i=0; i<ds_list_size(choises); i+=1) { //for loop con la cantidad de respuestas
var resp = ds_list_find_value(choises,i) //recibe la respuesta como string
draw_line(xx,yy+offset,xx+width,yy+offset) //dibuja una línea separadora arriba
draw_text(xx,yy+offset,resp) //Escribe el texto de la respuesta
if answer = i { //checkea si estoy seleccionando esta respuesta
    draw_set_alpha(0.4)
    draw_set_colour(c_aqua)
    draw_rectangle(xx,yy+offset,xx+width,yy+offset+string_height(resp),false) //dibuja un rectángulo azul para indicar que estoy seleccionando esta respuesta
    draw_set_alpha(1)
    draw_set_colour(c_black)
}
offset += string_height(resp) //varía la posición de dibujo para dibujar la siguiente respuesta justo debajo de la respuesta anterior
}

Este objeto lo crearemos desde un script, yo lo he llamado "scr_question()", pero tu le puedes poner como quieras

SCRIPT "SCR_QUESTION()"
Código: [Seleccionar]
///scr_question(pregunta,respuesta1,[respuesta2],...)
var args = argument_count //cuenta la cantidad de argumentos del script
var pregunta = argument[0] //recibe la pregunta como string
var inst = instance_create(0,0,obj_msg_box) //Crea y ejecuta el create event del objeto msg box
with inst { //aplica el siguiente código al objeto recién creado
question = pregunta //le pasa la pregunta al objeto de texto
width = string_width(pregunta) //calcula el ancho del cuadro de texto
height = string_height(pregunta) //calcula el alto del cuadro de texto
for (var i=1; i<args; i+=1) { //crea un for loop para cada respuesta
ds_list_add(choises,argument[i]) //le pasa las respuestas al objeto de texto
width = max(width,string_width(argument[i])) //re-calcula el ancho del cuadro de texto
height += string_height(argument[i]) //re-calcula el alto del cuadro de texto
}
if ds_list_size(choises) = 0 instance_destroy() //Se auto_destruye si el script se llamó sin argumentos de respuesta.
}

Su uso: desde cualquier objeto del juego, usa scr_question(pregunta,respuesta1,respuesta2,respuesta3,etc)
Se creará el objeto "obj_msg_box" que creará un falso efecto de pausa y mostrará un cuadro en la pantalla con la pregunta y todas las respuestas hacia abajo. Usas las flechas para moverte entre las respuestas y pulsas Enter para elegir una respuesta, eso despausará el juego.

La variable que guarda la respuesta es "answer" y la tiene el objeto "obj_msg_box", una vez que se destruye, pierdes la respuesta. Por favor notar que no le puse ningún código para que realice acciones según la respuesta elegida, ese código lo debes crear tu, tu eres el que sabe que debe hacer cada respuesta.

PD: Cada línea del código tiene su comentario al lado que explica su función

Saludos

 
Los siguientes usuarios dieron las gracias a este tema: Marcusmaniacus