19 de abril de 2015

Como criar Movimento Radial

O movimental radial é usado principalmente em jogos Top Down (vista superior). Ele serve para garantir que o jogador se mova na mesma velocidade para qualquer direção. Neste tutorial veremos o movimento radial para movimento em 8 direções.

Como vimos no Tutorial sobre Movimento em 8 Direções, existem diversas maneiras de se criar um código para tal movimento, por exemplo:

vertical = keyboard_check(ord('S')) - keyboard_check(ord('W'))
horizontal = keyboard_check(ord('D')) - keyboard_check(ord('A'))

if !(vertical = 0 && horizontal = 0// Checa se há movimento na vertical ou na horizontal
{
    horizontal *= velocidade
    vertical *= velocidade
    if !place_meeting(x + horizontal, yobj_wall)
    {
        x += horizontal
    }
    if !place_meeting(xy + vertical, obj_wall)
    {
        y += vertical
    }
}

Esse código fará com o personagem se mova para 8 direções, porém, quando mover-se na diagonal ele irá mais rápido se compararmos o quanto ele se distancia do ponto de partida.

Para corrigir essa diferença podemos usar este código:

Create Event

seno45 = sin(45)

Step Event

vertical = keyboard_check(ord('S')) - keyboard_check(ord('W'))
horizontal = keyboard_check(ord('D')) - keyboard_check(ord('A'))

if !(vertical = 0 && horizontal = 0) // Checa se há movimento na vertical ou na horizontal
{
    vertical *= velocidade
    horizontal *= velocidade
    if vertical != 0 && horizontal != 0 // Checa se há movimento na vertical e horizontal simultâneamente
    {
        vertical *= seno45 // Reduz o movimento vertical
        horizontal *= seno45 // Reduz o movmento horizontal
    }
    if !place_meeting(x + horizontal, y, obj_wall)
    {
        x += horizontal
    }
    if !place_meeting(xy + vertical, obj_wall)
    {
        y += vertical
    }
}

O fator de correção é o seno de 45 graus pois este é o ângulo do movimento feito quando nos movemos na diagonal.

Um comentário :