Nombre del creador:
Lo he hecho totalmente yo, Mgbu
Función:
Es un sistema para parar la partida y mostrar una pantalla con un texto y una imagen, sirve para hacer pausas en el juego e ir contando la historia, para darle consejos o objetivos al jugador
Consiste en una pantalla negra con una imágen estática y dos líneas de texto, de 51 caracteres de largo cada una, con 3 pantallas, lo que permite mostrar 3 imágenes y 6 lineas de texto.
La gracia de esto es que el texto se va escribiendo progresivamente, eso es lo que lo hace más dificil de hacer
Esto es un engine no muy optimizado, funciona para pocas lineas, para mostrar animaciones en vez de fotos podrías tener problemas...
Debes cargar los 3 scripts, crear un objeto configurando el Create, Step y Draw como dice abajo, y crear una room (yo usé una de 320x240) con solo el objeto creado anteriormente
Versión de GM utilizada:
Sólo lo he probado con GM 8.0
Código:
Esto consiste de 3 scripts, un objeto, y una room vacía. Les cuento rapido como funciona
Bueno, ahora lo importante, el código
Scripts
scr_mostrar_animacion(cant.lineas,linea1,linea2,linea3,...,linea6)
Con este script inicializamos la animación
[gml]
//argument0=cantidad de lineas
//argument1=linea1
//argument2=linea2
//argument3=...
//argument6=linea6
argumento[1]=argument1 //Para cambiar el argumento en el for...
argumento[2]=argument2
argumento[3]=argument3
argumento[4]=argument4
argumento[5]=argument5
argumento[6]=argument6
game_save('parttemp') //Guardamos la partida
ini_open('datos.temp') //Abrimos el ini
ini_write_real('Animacion','lineas',argument0) //Escribimos la cantidad de lineas
for (i=1; i<argument0+1; i+=1)
{
ini_write_string('Animacion','linea'+string(i),argumento) //Vamos escribiendo las lineas
};
ini_close() //Cerramos el ini y vamos a la room de la animacion
room_goto(animacion)
[/gml]
scr_leer_animacion()
Este script es abierto por el objeto en el Create, no hace falta hacer nada con él
[gml]
ini_open('datos.temp') //Abrimos el ini
cantlineas=ini_read_real('Animacion','lineas',0) //Leemos la cantidad de lineas
for (i=1; i<cantlineas+1; i+=1)
{
linea[i-1]=ini_read_string('Animacion','linea'+string(i),'ERROR :(') //Vamos leyendo las lineas
dibujarlinea[i-1]='' //Vamos guardando espacio en memoria para no tener el error de 'Array out of bounds'
};
[/gml]
scr_cerrar_animacion()
Bueno, es cortito pero es para ordenar mejor las cosas, lo abre el objeto al terminar la animación
[gml]
game_load('parttemp') //Cargamos la partida y listo
[/gml]
obj_control_animacion
Esto es lo importante, modificando este objeto modificas como se verá en la pantalla
Create
[gml]
lineas_completadas=0 //Cantidad de lineas terminadas de escribir, contando las lineas de pantallas anteriores, Se cuenta como una linea a los dos renglones de la pantalla
pantalla=1 //Numero de pantalla
terminado=0 //Si se ha terminado de dibujar todas las pantallas
scr_leer_animacion() //Obtener la información del .ini
switch cantlineas //Para saber la cantidad de pantallas
{
case 1: cantpantallas=1 break
case 2: cantpantallas=1 break
case 3: cantpantallas=2 break
case 4: cantpantallas=2 break
case 5: cantpantallas=3 break
case 6: cantpantallas=3 break
}
[/gml]
Step
[gml]
if keyboard_check_pressed(vk_enter) and terminado=1
{
scr_cerrar_animacion() //Si apretas enter cuando se treminaron de dibujar todas las pantallas se vuelve al juego
}
if keyboard_check(vk_enter) lineas_completadas+=1 //Al apretar enter se avanza de pantalla
if mouse_check_button(mb_left) lineas_completadas+=1
if lineas_completadas=0
{
for (i=0; i<2; i+=1) //Un for para saber el renglón
{
for (j=0; j<string_length(linea)+1; j+=1) //Otro for para el carácter
{
dibujarlinea=string_copy(linea,0,j) //Se copia hasta el caracter actual (j) de la linea actual (i)
pantalla=1
screen_redraw() //Se redibuja la pantalla, para ver los cambios, redibujar es ejecutar el evento Draw
sleep(40) //Hacer una pausa para enfatizar la animacion
}
}
lineas_completadas=1 //Se ha terminado un par de renglones
if cantpantallas=1 terminado=1 //Si la animación solo tiene una pantalla ya hemos terminado
io_clear() //Se borran los estados del teclado, para prevenir errores
}
if cantlineas<=2 exit //Si hay una o dos lineas se sale del step
if lineas_completadas=2
{
for (i=2; i<4; i+=1) //Un for igual al anterior, se comienza con i=2 porque ya se han dibujado dos lineas
{
for (j=0; j<string_length(linea)+1; j+=1) //Esto ya es todo igual
{
dibujarlinea=string_copy(linea,0,j)
pantalla=2
screen_redraw()
sleep(40)
}
}
lineas_completadas=3
if cantpantallas=2 terminado=1
io_clear()
}
if cantlineas<=4 exit
if lineas_completadas=4
{
for (i=4; i<6; i+=1)
{
for (j=0; j<string_length(linea)+1; j+=1)
{
dibujarlinea=string_copy(linea,0,j)
pantalla=3
screen_redraw()
sleep(40)
}
}
show_debug_message('Terminada linea')
lineas_completadas=5
if cantpantallas=3 terminado=1
io_clear()
}
[/gml]
Draw
[gml]
draw_set_font(font_terminal_6) //Seteamos los estilos...
draw_set_color(c_white)
if pantalla=1
{
draw_text(5,214,dibujarlinea[0]) //Si es la primer pantalla dibujamos las 2 primeras lineas
draw_text(5,225,dibujarlinea[1])
}
if pantalla=2
{
draw_text(5,214,dibujarlinea[2]) //Si es la segunda pantalla dibujamos las 2 segundas lineas
draw_text(5,225,dibujarlinea[3])
}
if pantalla=3
{
draw_text(5,214,dibujarlinea[4])
draw_text(5,225,dibujarlinea[5])
}
draw_rectangle(4,4,315,205,1) //Agregamos una foto linda arriba
draw_sprite(spr_anim_test,-1,5,5)
[/gml]
Listo!
Lo he hecho totalmente yo, Mgbu
Función:
Es un sistema para parar la partida y mostrar una pantalla con un texto y una imagen, sirve para hacer pausas en el juego e ir contando la historia, para darle consejos o objetivos al jugador
Consiste en una pantalla negra con una imágen estática y dos líneas de texto, de 51 caracteres de largo cada una, con 3 pantallas, lo que permite mostrar 3 imágenes y 6 lineas de texto.
La gracia de esto es que el texto se va escribiendo progresivamente, eso es lo que lo hace más dificil de hacer
Esto es un engine no muy optimizado, funciona para pocas lineas, para mostrar animaciones en vez de fotos podrías tener problemas...
Debes cargar los 3 scripts, crear un objeto configurando el Create, Step y Draw como dice abajo, y crear una room (yo usé una de 320x240) con solo el objeto creado anteriormente
Versión de GM utilizada:
Sólo lo he probado con GM 8.0
Código:
Esto consiste de 3 scripts, un objeto, y una room vacía. Les cuento rapido como funciona
Citar- Por un evento X se guarda la partida, se guardan las caracteristicas de la presentacion en un ini
- Inmediatamente se va a una room vacía con el fondo preferido tuyo y sólo un objeto (el controlador)
- Ahí el controlador lee el .ini y guarda los datos en variables
// Acá empieza el dibujado//
- Con 2 for anidados va copiando partes del string que tiene la linea de texto a dibujar, así primero copia la primera letra, luego la primera y segunda, luego la primera, segunda y tercera... etc. Mientras va dibujando el texto copiado
- Cuando termina ese renglón pasa al siguiente haciendo lo mismo
- Cuando termina los dos renglones de la pantalla espera a que aprietes enter para continuar con la segunda pantalla (si hace falta)
- Cuando termine todas las pantallas simplemente carga el juego guardado, así cuando vuelva va a estar todo exactamente como estaba antes
Bueno, ahora lo importante, el código
Scripts
scr_mostrar_animacion(cant.lineas,linea1,linea2,linea3,...,linea6)
Con este script inicializamos la animación
[gml]
//argument0=cantidad de lineas
//argument1=linea1
//argument2=linea2
//argument3=...
//argument6=linea6
argumento[1]=argument1 //Para cambiar el argumento en el for...
argumento[2]=argument2
argumento[3]=argument3
argumento[4]=argument4
argumento[5]=argument5
argumento[6]=argument6
game_save('parttemp') //Guardamos la partida
ini_open('datos.temp') //Abrimos el ini
ini_write_real('Animacion','lineas',argument0) //Escribimos la cantidad de lineas
for (i=1; i<argument0+1; i+=1)
{
ini_write_string('Animacion','linea'+string(i),argumento) //Vamos escribiendo las lineas
};
ini_close() //Cerramos el ini y vamos a la room de la animacion
room_goto(animacion)
[/gml]
scr_leer_animacion()
Este script es abierto por el objeto en el Create, no hace falta hacer nada con él
[gml]
ini_open('datos.temp') //Abrimos el ini
cantlineas=ini_read_real('Animacion','lineas',0) //Leemos la cantidad de lineas
for (i=1; i<cantlineas+1; i+=1)
{
linea[i-1]=ini_read_string('Animacion','linea'+string(i),'ERROR :(') //Vamos leyendo las lineas
dibujarlinea[i-1]='' //Vamos guardando espacio en memoria para no tener el error de 'Array out of bounds'
};
[/gml]
scr_cerrar_animacion()
Bueno, es cortito pero es para ordenar mejor las cosas, lo abre el objeto al terminar la animación
[gml]
game_load('parttemp') //Cargamos la partida y listo
[/gml]
obj_control_animacion
Esto es lo importante, modificando este objeto modificas como se verá en la pantalla
Create
[gml]
lineas_completadas=0 //Cantidad de lineas terminadas de escribir, contando las lineas de pantallas anteriores, Se cuenta como una linea a los dos renglones de la pantalla
pantalla=1 //Numero de pantalla
terminado=0 //Si se ha terminado de dibujar todas las pantallas
scr_leer_animacion() //Obtener la información del .ini
switch cantlineas //Para saber la cantidad de pantallas
{
case 1: cantpantallas=1 break
case 2: cantpantallas=1 break
case 3: cantpantallas=2 break
case 4: cantpantallas=2 break
case 5: cantpantallas=3 break
case 6: cantpantallas=3 break
}
[/gml]
Step
[gml]
if keyboard_check_pressed(vk_enter) and terminado=1
{
scr_cerrar_animacion() //Si apretas enter cuando se treminaron de dibujar todas las pantallas se vuelve al juego
}
if keyboard_check(vk_enter) lineas_completadas+=1 //Al apretar enter se avanza de pantalla
if mouse_check_button(mb_left) lineas_completadas+=1
if lineas_completadas=0
{
for (i=0; i<2; i+=1) //Un for para saber el renglón
{
for (j=0; j<string_length(linea)+1; j+=1) //Otro for para el carácter
{
dibujarlinea=string_copy(linea,0,j) //Se copia hasta el caracter actual (j) de la linea actual (i)
pantalla=1
screen_redraw() //Se redibuja la pantalla, para ver los cambios, redibujar es ejecutar el evento Draw
sleep(40) //Hacer una pausa para enfatizar la animacion
}
}
lineas_completadas=1 //Se ha terminado un par de renglones
if cantpantallas=1 terminado=1 //Si la animación solo tiene una pantalla ya hemos terminado
io_clear() //Se borran los estados del teclado, para prevenir errores
}
if cantlineas<=2 exit //Si hay una o dos lineas se sale del step
if lineas_completadas=2
{
for (i=2; i<4; i+=1) //Un for igual al anterior, se comienza con i=2 porque ya se han dibujado dos lineas
{
for (j=0; j<string_length(linea)+1; j+=1) //Esto ya es todo igual
{
dibujarlinea=string_copy(linea,0,j)
pantalla=2
screen_redraw()
sleep(40)
}
}
lineas_completadas=3
if cantpantallas=2 terminado=1
io_clear()
}
if cantlineas<=4 exit
if lineas_completadas=4
{
for (i=4; i<6; i+=1)
{
for (j=0; j<string_length(linea)+1; j+=1)
{
dibujarlinea=string_copy(linea,0,j)
pantalla=3
screen_redraw()
sleep(40)
}
}
show_debug_message('Terminada linea')
lineas_completadas=5
if cantpantallas=3 terminado=1
io_clear()
}
[/gml]
Draw
[gml]
draw_set_font(font_terminal_6) //Seteamos los estilos...
draw_set_color(c_white)
if pantalla=1
{
draw_text(5,214,dibujarlinea[0]) //Si es la primer pantalla dibujamos las 2 primeras lineas
draw_text(5,225,dibujarlinea[1])
}
if pantalla=2
{
draw_text(5,214,dibujarlinea[2]) //Si es la segunda pantalla dibujamos las 2 segundas lineas
draw_text(5,225,dibujarlinea[3])
}
if pantalla=3
{
draw_text(5,214,dibujarlinea[4])
draw_text(5,225,dibujarlinea[5])
}
draw_rectangle(4,4,315,205,1) //Agregamos una foto linda arriba
draw_sprite(spr_anim_test,-1,5,5)
[/gml]
Listo!
CitarDebido a un bug que no es muy necesario arreglar en el script scr_mostrar_animacion, debes poner una cantidad de lineas par, por ejemplo si quieres mostrar una sola linea en el argument0 escribes 2, total la segunda linea no va a contener texto, lo mismo se debe hacer para 3 o 5 lineas