Houve um pouco de interesse e intriga sobre como eu fiz a mecânica de gravidade em AirScape. Então eu decidi escrever o meu primeiro tutorial de como eu fiz isso e mostrar como realmente é simples.
A primeira coisa que eu devo dizer é que este método foi idealizado pelo Yann Granjon. Eu não sugeri a idéia, eu simplesmente a implementei. Ele ajudou muito com a produção do jogo e não seria o mesmo sem ele!
Os conceitos básicos
A coisa mais importante a se considerar nesse trabalho é a habilidade do comportamento de plataforma em mudar o ângulo de gravidade. Uma vez que nós sabemos como funciona, a coisa mais importante a se considerar é como o jogo irá saber qual é direção de gravidade
Então Yann sugeriu e eu implementei as zonas de gravidades.
(Desculpe pelas fotos borradas, elas parecem ter perdido qualidade no upload)
Aqui você pode ver um panorama do level 1-1. A principal coisa que nós estamos interessados é as zonas coloridas ao redor das massas de terra.
Estas formas são todos frames de um mesmo objeto, 'gravzone'. Existem cerca de 5 formas, todas para diferentes propósitos.
Existem dois tipos de gravzone. "Relativa" e "Não Relativa." isto é apenas decidido por um boolean.
O código
O código é muito simples. Aqui estão os princípios básicos:
Basicamente, existe um ângulo para cada gravzone. Este ângulo é determinado baseado se a gravzone é relativa ou não.
Geralmente, as gravzones arredondadas são relativas, e os em linha retas não são. A diferença é que as gravzones relativas atrai para um único ponto, o que permitem as superfícies arredondadas, enquanto que gravzones não arredondadas somente atrai para um ângulo específico (este ângulo é geralmente apenas especificado por um ângulo da própria gravzone.)
Enfim, de volta ao código. Tudo que ele faz é, para cada gravzone que o jogador está sobreposto, determine o ângulo(determinado por gravzone.a para não relativas ou ângulo(player.x, player.y, gravzone.x, gravzone.y) para relativas) e, em seguida, transforma esse ângulo em dois vetores.
Isso é para que eu possa sobrepor duas ou mais gravzones e acabar puxando para média dos seus ângulos.
Lançando 180
Surge um pequeno problema quando lançamos 180 graus. Basicamente, a média dos ângulos é anulada e o jogador cai em uma direção estranha. Então eu integrei outro objeto invisível, o flip_assist.
Isso substitui a programação da gravidade tradicional, enquanto o jogador está sobrepondo o flip_assist.
Esse código basicamente muda o ângulo da gravidade para um ângulo manualmente colocado pelo flip-assist, e depois deixa-lo voltar ao normal quando o jogador não está mais em uma sobreposição
Existem atualmente dois flip_assists para todas as barras amarelas que você ver, de modo que o jogador pode virar para trás e para frente. Isto torna necessário um booleano ‘cannot_reset_flip’ para o jogo não ficar confuso.
E isso é o que eu quero. Com um pouco de ângulos lerping:
Nós temos as mecânicas básicas do jogo.
Aqui estão alguns exemplos para você ter uma melhor idéia:
Espero que você tenha curtido o tutorial. Certifique-se de me dizer se eu esqueci algo!