As transições de tela servem para deixar o jogo com uma aparência mais profissional e mais bonita. Se não há uma transição leve entre as salas, a impressão que temos é a de que ao invés de termos nos movido a um lugar diferente, o lugar que se moveu até nós. Ensinarei neste tutorial como criar transições de tela no Game Maker.
Apesar deste ser um tutorial simples, é necessário alguns conhecimentos prévios, principalmente sobre como criar surfaces e máquina de estados finitos. Caso tenha dúvidas sobre os códigos usados, veja os outros tutoriais já publicados no site.
Objetos: Jogador, Portal e Transição
obj_portal
Create Event
ativado = false
proxima_room = room0
Step Event
if !ativado && place_meeting(x, y, obj_jogador)
{
ativado = true
transicao = instance_create(x, y, obj_transicao)
transicao.proxima_room = proxima_room
transicao.portal_id = id
}
obj_transicao
Create Event
alpha = 0
n = 0.05
inicio = 0
troca_de_room = 1
fim = 2
estado = inicio
surface = surface_create(view_wview[0], view_hview[0])
surface = surface_create(view_wview[0], view_hview[0])
Step Event
surface_set_target(surface)
surface_set_target(surface)
switch (estado)
{
case inicio:
draw_clear_alpha(c_black, alpha)
alpha += n
alpha += n
if alpha >= 1
{
estado = troca_de_room
}
break;
case troca_de_room:
portal_id.ativado = false
room_goto(proxima_room)
estado = fim
break;
case fim:
draw_clear_alpha(c_black, alpha)
alpha -= n
if alpha <= 0
{
surface_free(surface)
instance_destroy()
}
break;
}
surface_reset_target()
if surface_exists(surface)
{
draw_surface(surface, view_wview[0], view_hview[0])
}
else
{
surface = surface_create(view_wview[0], view_hview[0])
}
No obj_portal é necessário definir a próxima room e uma variável para controlar a ativação do objeto, que será modificada no obj_transicao, para que o portal não seja ativado diversas vezes. Quando ativado, fazemos com que o portal armazene em variáveis do obj_transicao a próxima room e sua id, para que possamos alterar a variável "ativado".
No obj_transicao precisamos definir e inicializar os estados e as variáveis "alpha", que define quão escuro a tela estará, e "n", que é a velocidade da transição. No Step Event defnimos quando ocorrem as trocas de estado e, ao fim, limpamos a surface utilizada e destruímos o obj_transicao.
Lembrando que é necessário que a opção "persistent" do obj_transicao esteja marcada, caso contrário a execução será interrompida assim que occorrer a troca de room.
break;
case troca_de_room:
portal_id.ativado = false
room_goto(proxima_room)
estado = fim
break;
case fim:
draw_clear_alpha(c_black, alpha)
alpha -= n
if alpha <= 0
{
surface_free(surface)
instance_destroy()
}
break;
}
surface_reset_target()
if surface_exists(surface)
{
draw_surface(surface, view_wview[0], view_hview[0])
}
else
{
surface = surface_create(view_wview[0], view_hview[0])
}
No obj_portal é necessário definir a próxima room e uma variável para controlar a ativação do objeto, que será modificada no obj_transicao, para que o portal não seja ativado diversas vezes. Quando ativado, fazemos com que o portal armazene em variáveis do obj_transicao a próxima room e sua id, para que possamos alterar a variável "ativado".
No obj_transicao precisamos definir e inicializar os estados e as variáveis "alpha", que define quão escuro a tela estará, e "n", que é a velocidade da transição. No Step Event defnimos quando ocorrem as trocas de estado e, ao fim, limpamos a surface utilizada e destruímos o obj_transicao.
Lembrando que é necessário que a opção "persistent" do obj_transicao esteja marcada, caso contrário a execução será interrompida assim que occorrer a troca de room.
Nenhum comentário :
Postar um comentário