26 de novembro de 2014

Como criar Transição de Tela

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])

Step Event

surface_set_target(surface)

switch (estado)
{
case inicio:
   draw_clear_alpha(c_black, alpha)
   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.

Nenhum comentário :

Postar um comentário