11 de agosto de 2014

Eventos

Os eventos no Game Maker funcionam para ativar as linhas de código do objeto. Cada evento possui uma característica diferente quanto sua funcionalidade. Neste tutorial mostrarei para que serve cada evento do Game Maker e também quando e como cada um deve ser utilizado, a fim de evitar bugs e melhorar o desempenho dos jogos.

Observação:

Apesar de não deixar claro em todos eventos a sua ordem de execução, este tutorial visa seguir a ordem exata. Porém, às vezes pode ocorrer mudanças com relação a essa ordem com atualizações do Game Maker. A única garantia que temos é em relação aos grupos de eventos semelhantes como: Create Event, Creation Code, Game Start Event, ou como os eventos Draw; estes serão sempre executados entre si na ordem especificada.

Create Event

Este evento é ativado apenas uma vez, que é quando o objeto/instância é criado(a) no jogo. É útil para inicializar variáveis, guardar IDs, coordenadas, tempo, entre outros.

Exemplos

-Definir a vida, ataque e defesa inicial do personagem.
   vida = 100
   ataque = 25
   defesa = 30

-Guardar a coordenada inicial do objeto.
   coord_x = x
   coord_y = y


Creation Code

É ativado uma única vez, assim como o Create Event, porém, este evento é exlusivo para cada instância e só pode ser editado clicando sobre a instância desejada no editor de room. É extremamente útil pois evita que diversos objetos semelhantes sejam criados quando só há necessidade de alterar algumas linhas de código; o que aumenta a eficiência reduzindo o tamanho do produto final.

São diversas as situações em que esse evento pode ser utilizado. Uma delas é na criação de portais, bastando definir uma coordenada de destino x e y diferenciada para cada um deles, sem a necessidade de criar novos objetos.


Game Start Event

Executado apenas uma vez assim que o jogo é inicializado, este evento é útil para definir variáveis  e executar funções relacionadas ao menu de introdução do jogo e ações pertinentes ao save/load.


Room Creation Code

É executado apenas uma vez, quando a room é criada. Pode ser utilizado para inicializar variáveis pertinentes somente à mesma. É uma ótima maneira de manter-se organizado evitando incializar variáveis destinadas à room em outros objetos e ter dificuldade de encontrá-las futuramente.


Room Start Event

É executado logo após o Room Creation Event e juntamente com todas instâncias colocada na room através do editor.


Begin Step Event

É executado antes do Step Event. Pode ser utilizada para garantir que uma variável/ação seja executada antes de funções do Step Event de outro objeto, sem se importar com a ordem de criação das instâncias.


Step Event

É chechado uma certa quantidade de vez por segundo, sendo essa quantidade definida pela velocidade da room. Essa velocidade pode ser alterada em settings, no menu de criação da room ou utilizando a função room_speed.

Aqui devem ser escritos os códigos que necessitam de checagem instantânea. É muito difícil afirmar o que deve vir aqui ou não, mas é certo dizer que quanto menos usarem este evento melhor, pois como a checagem é feita a todo momento, se existitrem muitas informações neste evento a performance do jogo pode acabar sendo comprometida. Falaremos disso em um tutorial voltado à otimização das performance.

Exemplos

-Conferir se o personagem está morto e reiniciar o jogo, caso esteja.
   if vida <= 0
   {
      game_restart()
   }

-Saber a distância entre o monstro e o jogador (usando o código no Step Event do monstro).
   dist = distance_to_point(obj_player.x, obj_player.y)

-Checar se o personagem está no chão através da função de colisão.
   place_meeting(x, y + 1, obj_floor)


End Step Event

Executado logo após o Step Event, serve para fazer ajustes antes que outro step seja iniciado. É neste evento que o Game Maker reposiciona todas instâncias. As funções xprevious e yprevious, que, respectivamente, retornam a coordenada anterior x e y do objeto, só podem ser usadas neste evento, sendo útil para executar funções que somente são necessárias quando há uma mudança de posição.

Exemplo

-Redefinir a posição do obj_cavalo somente quando houver movimentação do jogador.
if x != xprevious || y != yprevious
{
   obj_cavalo.x = obj_jogador.x
   obj_cavalo.y = obj_jogador.y
}


Destroy Event

É ativado assim que uma instância é destruida, mas antes que eles saia completamente da memória do jogo. Pode ser usada para ativar códigos que gerem recompensa para o jogador por derrotar um monstro, ativar switches, entre outros.

Exemplos

-Recompensar o jogador.
   obj_player.exp += 100
   obj_player.dinheiro += 150

-Ativar switches.
   global.salasecreta = true



Mouse Event

Este evento é funciona de maneira diferente da função mouse_check, pois ele só é ativado se clicarmos em cima da instância que o utiliza. O subevento Global Mouse funciona da mesma maneira que mouse_check, ou seja, será ativado independentemente de onde clicarmos. Pode ser usada para usar um objeto, selecionar opções, atacar, entre outros.

Exemplos

-Atacar quando estiver a menos de 25 pixels de distância.
   if distance_to_point(obj_player.x, obj_player.y) < 25
   {
      vida -= 1
   }

-Estourar balões.
   instance_destroy()


Alarm Event

Executa o código presente no evento quando ativado. Para ativá-lo é necessário determinar um valor em steps e o número do alarme no Create Event, esse valor será reduzido (como uma contagem regressiva) e quando chegar a 0 o alarme será ativado.

Para exemplos veja o Tutorial de como usar Alarmes.


Collision Event

Colisão para o Game Maker significa o mesmo que "entrar em contato". A palavra pode dar a a falsa ideia de que os objetos precisam se tocar em alta velocidade, mas não é bem o caso. O Collision Event faz com que o programa verifique se há colisão (contato) entre o objeto que utiliza o evento e o objeto especificado.

Se a opção Physics do objeto estiver marcada o Game Maker utilizará a mascará de colisão definida em Physics Properties, caso contrário, a mascará utilizada para verificar se há colisão será a do sprite, definida na edição do mesmo.

Um comentário :