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
- 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
Scriptsscr_mostrar_animacion(cant.lineas,linea1,linea2,linea3,...,linea6)
Con este script inicializamos la animación
argumento[1]=argument1
argumento[2]=argument2
argumento[3]=argument3
argumento[4]=argument4
argumento[5]=argument5
argumento[6]=argument6
game_save('parttemp')
ini_open('datos.temp')
ini_write_real('Animacion','lineas',argument0)
for (i=1; i<argument0+1; i+=1)
{
ini_write_string('Animacion','linea'+string(i),argumento[i])
};
ini_close()
room_goto(animacion)
scr_leer_animacion()
Este script es abierto por el objeto en el Create, no hace falta hacer nada con él
ini_open('datos.temp')
cantlineas=ini_read_real('Animacion','lineas',0)
for (i=1; i<cantlineas+1; i+=1)
{
linea[i-1]=ini_read_string('Animacion','linea'+string(i),'ERROR :(')
dibujarlinea[i-1]=''
};
scr_cerrar_animacion()
Bueno, es cortito pero es para ordenar mejor las cosas, lo abre el objeto al terminar la animación
game_load('parttemp')
obj_control_animacionEsto es lo importante, modificando este objeto modificas como se verá en la pantalla
Create
lineas_completadas=0
pantalla=1
terminado=0
scr_leer_animacion()
switch cantlineas
{
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
}
Step
if keyboard_check_pressed(vk_enter) and terminado=1
{
scr_cerrar_animacion()
}
if keyboard_check(vk_enter) lineas_completadas+=1
if mouse_check_button(mb_left) lineas_completadas+=1
if lineas_completadas=0
{
for (i=0; i<2; i+=1)
{
for (j=0; j<string_length(linea[i])+1; j+=1)
{
dibujarlinea[i]=string_copy(linea[i],0,j)
pantalla=1
screen_redraw()
sleep(40)
}
}
lineas_completadas=1
if cantpantallas=1 terminado=1
io_clear()
}
if cantlineas<=2 exit
if lineas_completadas=2
{
for (i=2; i<4; i+=1)
{
for (j=0; j<string_length(linea[i])+1; j+=1)
{
dibujarlinea[i]=string_copy(linea[i],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[i])+1; j+=1)
{
dibujarlinea[i]=string_copy(linea[i],0,j)
pantalla=3
screen_redraw()
sleep(40)
}
}
show_debug_message('Terminada linea')
lineas_completadas=5
if cantpantallas=3 terminado=1
io_clear()
}
Draw
draw_set_font(font_terminal_6)
draw_set_color(c_white)
if pantalla=1
{
draw_text(5,214,dibujarlinea[0])
draw_text(5,225,dibujarlinea[1])
}
if pantalla=2
{
draw_text(5,214,dibujarlinea[2])
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)
draw_sprite(spr_anim_test,-1,5,5)
Listo!Debido 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