Jogador subindo, ele está pulando ou subindo?

11

Em um jogo de plataformas 2D baseado em física que contém escadas, como você determina se o jogador subindo é causado por um salto ou se ele sobe uma escada, de modo que você saiba qual animação jogar?

E, em geral, obviamente o vetor de direção não é suficiente para determinar a animação a ser reproduzida: como você também determina a causa do movimento (para saber o sprite correto a ser usado)?

Paul Manta
fonte
1
Se um jogador está em uma escada, ele está realmente no ar?
Derek

Respostas:

15

Eu tenho um problema de lógica pessoal regularmente que você parece expressar aqui. Às vezes, você está olhando a lógica e a programação da direção errada. Nesse caso, você parece não perceber que, desde o início, sabe o que está acontecendo, por causa do código lógico. Você já deve saber, programaticamente falando, se ele está na escada ou não.

Pense nisso (como eu disse, muitas vezes tenho esse problema). A lógica dos jogos deve saber que você está na escada, supondo que você esteja sendo um programador inteligente. Para uma explicação melhor, eu tenho um tipo de arquivo morto e desperdicei cerca de uma hora do dia tentando descobrir como obter o tamanho dos dados e nunca parei para pensar que, quando carrego o arquivo, agora conheça seu tamanho: P.

A razão pela qual isso se relaciona tão exclusivamente é que você está vendo como "Agora que estou no ar, como posso descobrir se estou em uma escada ou pulando?" ... Quando você realmente deveria pense "Estou prestes a entrar no ar, mas com qual método PRIMEIRO, para que eu possa usá-lo para o uso das animações".

Joshua Hedges
fonte
Por exemplo simples: OnJump()mudar a sua jumpingbooleano como true e, em seguida, se você está no ar e jumpingé falsa, então ou você está caindo ou em uma escada, etc.
Joshua Hedges
6

O sistema de física não sabe nem se importa por que o jogador está se movendo em uma direção específica. É o seu jogo que fez com que o sistema de física movesse o jogador dessa maneira e, portanto, é responsabilidade do seu jogo acompanhar isso. A entidade do jogador deve ter algum estado que diga se está pulando, subindo, correndo, etc. Você não deve tentar descobrir isso com base no que aconteceu com o sistema de física.

Nicol Bolas
fonte
2

Parece que qualquer evento que seja acionado na colisão que define a velocidade vertical dos jogadores também pode ser usado para definir um sinalizador especificando qual animação usar.

Se você estiver usando uma biblioteca de terceiros que seja muito restritiva com as informações fornecidas, será possível cercar a escada com um retângulo e, se o jogador estiver subindo e contido nesse retângulo, faça a animação de escalada.

ClassicThunder
fonte
Isso na verdade traz um bom ponto que eu abordaria mais tarde no meu próprio desenvolvimento de jogos, e é assim que mudar a velocidade de uma animação baseada na física. Eu tenho personagens que eu quero agitar seus braços processualmente, mais rápido com base na rapidez com que eles estão caindo. E eu nunca tinha pensado em uma boa maneira de fazer isso em profundidade (pensava com o tempo), mas sua ideia de velocidade é muito melhor. +1 para uma resposta utilizável geral e não sendo específico apenas ao caso dele.
Joshua Hedges
1

Ao definir a velocidade do salto, defina também o estado dos caracteres para STATE_JUMPING. Fazendo isso, você sempre sabe em que estado o jogador está e pode agir em conformidade, verificando o estado do jogador.

crisi
fonte