Jogo de plataforma
Você quer um personagem que cai, pousa no chão, pula e não atravessa paredes.
No editor
Seção intitulada “No editor”- No objeto do chão e das paredes, marque Sólido no Inspetor. Ou pinte o chão com tiles sólidos: veja Cenário com tiles.
- No objeto do jogador, na seção Física, ponha Gravidade em
0.25e Queda máxima em4.5.
A gravidade puxa o jogador para baixo a cada passo, e a queda máxima impede que ele caia cada vez mais rápido.
No código
Seção intitulada “No código”void Player::onUpdate() { hspeed = axis("esquerda", "direita") * 1.5f; if (pressed("pular") && onGround()) vspeed = -4.5f; moveAndStop();}Como funciona
Seção intitulada “Como funciona”axis("esquerda", "direita")dá a direção:-1,0ou1. Veja ações.onGround()é verdadeiro quando há um sólido 1 pixel abaixo do jogador. Sem essa checagem, ele pularia no ar.vspeed = -4.5fjoga o jogador para cima (oycresce para baixo). A gravidade cuida de trazê-lo de volta.moveAndStop()aplica a gravidade e anda porhspeedevspeed, parando quando encosta num sólido. Chame uma vez por passo.
Variações
Seção intitulada “Variações”Virar para o lado em que anda. flipX espelha o desenho e a caixa de colisão, sem mexer na escala:
if (hspeed != 0) flipX = hspeed < 0;Um inimigo que vai e volta. Depois do moveAndStop(), hitWall() diz se ele bateu numa parede:
void Enemy::onUpdate() { hspeed = flipX ? -0.5f : 0.5f; moveAndStop(); if (hitWall()) flipX = !flipX;}Fazer algo ao pousar. hitFloor() vale no passo em que o jogador bateu no chão; hitCeiling(), quando bateu a cabeça no teto:
moveAndStop();if (hitFloor()) Audio::play("pouso");A caixa de colisão não mudar com a animação. Se o sprite de correr é mais largo que o parado, o jogador pode ficar preso numa parede ao trocar de animação. No Inspetor do objeto, escolha um sprite em Máscara: a colisão passa a usar sempre a caixa dele.
Pulo mais baixo ao soltar o botão.
if (released("pular") && vspeed < 0) vspeed *= 0.5f;Veja também
Seção intitulada “Veja também”- Movimento: gravidade, atrito e
moveAndStop. - Colisões.
- Câmera seguindo o jogador.
