Como fazer jogos de plataforma baseado em gravidade

1

Statistiques

7,106 visites, 7,619 vues

Outils

Partager

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

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!