Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Mgbu en Junio 25, 2012, 07:53:53 PM

Título: Esperar hasta que presione enter
Publicado por: Mgbu en Junio 25, 2012, 07:53:53 PM
Estoy en una parte en donde no se lo que hago realmente XD, estoy modificando un poco el bucle principal del juego que impone GM de "step y despues draw"

Estoy haciendo una pantalla en donde muestra un poco la historia del juego, en donde hay un texto y una imagen
El texto se va escribiendo progresivamente como los juegos retro y me encanta, el problema es que quiero esperar hasta que el jugador presione enter para seguir contando la historia

Lo unico importante es que quiero hacer un ciclo infinito hasta que uno presione enter, lo que hice fue esto:

[gml]
cerrado=false
while cerrado=false
    {
    if keyboard_check_pressed(vk_enter) cerrado=true
    show_debug_message('Esperando enter')
    screen_redraw()
    }
[/gml]

Supuestamente ese código espera a que presiones enter para continuar con el evento, step en este caso:

[gml]
for (i=0; i<2; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=1
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
if cantlineas<=2 exit
/*cerrado=false
while cerrado=false
    {
    if keyboard_check_pressed(vk_enter) break
    show_debug_message('Esperando enter')
    screen_redraw()
    }*/
for (i=2; i<4; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=2
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
if cantlineas<=4 exit
/*cerrado=false
while cerrado=false
    {
    if keyboard_check_pressed(vk_enter) break
    show_debug_message('Esperando enter')
    screen_redraw()
    }*/
for (i=4; i<6; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=3
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
[/gml]
Lo comentado es el código que muestro arriba (que no funciona)
Yo quiero esperar a que presiones enter en esos 2 lugares

Descomentando eso queda esperando a que apretes enter y muestra los síntomas clásicos de un ciclo infinito :-\
Título: Re:Esperar hasta que presione enter
Publicado por: Mgbu en Junio 25, 2012, 09:45:31 PM
Bueno, lo arreglé, abajo escribo el código pero si alguien sabe la respuesta de lo que pregunté arriba se lo agradecería para ordenar un poco el código

Acá está el resultado sin un ciclo que espere, es más complicado con tantas variables pero funciona :D
[gml]
if keyboard_check_pressed(vk_enter) and terminado=1
   {
   scr_cerrar_animacion()
   }
if keyboard_check(vk_enter) completado+=1
if mouse_check_button(mb_left) completado+=1
if completado=0
{
for (i=0; i<2; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=1
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
completado=1
if cantpantallas=1 terminado=1
io_clear()
}
if cantlineas<=2 exit

if completado=2
{
for (i=2; i<4; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=2
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
completado=3
if cantpantallas=2 terminado=1
io_clear()
}
if cantlineas<=4 exit

if completado=4
{
for (i=4; i<6; i+=1)
    {
    for (j=0; j<string_length(linea)+1; j+=1)
        {
        dibujarlinea=string_copy(linea,0,j)
        show_debug_message(dibujarlinea)
        pantalla=3
        screen_redraw()
        sleep(40)
        }
    }
show_debug_message('Terminada linea')
completado=5
if cantpantallas=3 terminado=1
io_clear()
}
[/gml]