31 de agosto de 2014

Top-Down Shooter - Projéteis

Este tutorial tem como objetivo ensinar como criar projéteis em jogos de tiro com vista superior (Top-Down Shooter) de uma maneira simples. Para tal, faremos uso principalmente das funções lengthdir_x e lengthdir_y.

A grande diferença entre simplesmente criar um projétil, como visto no Tutorial de Como Criar Projéteis, e criar projéteis para jogos Top-Down Shooter é que sprite de personagem muda de acordo com o ângulo entre a posição do mouse e do personagem, portanto a origem do tiro deve acompanhar essa rotação e também obedecer o tamanho da arma.

Para isso utilizaremos as funções lengthdir_x e lengthdir_y, que são basicamente a projeção de uma reta nos eixos x e y. As funções completas são: lengthdir_x(n, m) e lengthdir_y(n, m), sendo n e m, respectivamente, o tamanho desta reta e sua direção. Para quem está familiarizado com trigonometria, lengthdir_x dará o valor da projeção da hipotenusa em x e lengthdir_y o valor da projeção em y.

Exemplo:

Create Event:

raio = 100

Step Event:

image_angle = point_direction(xy, mouse_xmouse_y)
if mouse_check_button_pressed(mb_left)
{
   instance_create(x + lengthdir_x(raio, image_angle), y + lengthdir_y(raio, image_angle), obj_projetil)
}

Esse código altera a localização onde o projétil será criado. Para saber como o obj_projetil deve estar programado veja o Tutorial sobre Projéteis.

Em Create Event definimos a distância entre a origem do sprite do jogador e a ponta da arma. Em Step Event fazemos com que o sprite do jogador rotacione de acordo com a posição do mouse, como explicado na parte de rotação do Tutorial sobre Sprites, e definimos que o Projétil será criado de acordo essa angulação toda vez que clicarmos com o botão esquerdo do mouse. Portanto, seguindo este exemplo, caso atirássemos para cima, lengthdir_x seria igual a 0 e lengthdir_y igual a -100 (pois no Game Maker o eixo y é negativo para cima).

O valor para "raio" utilizado neste código é apenas um exemplo, pois será necessário fazer com que esse valor dependa da arma utilizada, já que cada uma tem seu próprio tamanho.

Nenhum comentário :

Postar um comentário