Como fazer jogos de plataforma baseado em gravidade

1
Published on 19 Aug, 2013. Last updated 25 Feb, 2019

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!

  • 0 Comments

Want to leave a comment? Login or Register an account!