Pular para o conteúdo
Baixar

Movimento

A Brasa move as instâncias sozinha a cada passo: soma hspeed ao x e vspeed ao y, depois de aplicar gravidade e atrito. Você só define as velocidades.

Ângulos são em graus: 0 = direita, 90 = cima, 180 = esquerda, 270 = baixo.

Propriedade Tipo O que é
hspeed float Velocidade horizontal, em pixels por passo. Positivo = direita.
vspeed float Velocidade vertical, em pixels por passo. Positivo = baixo.
gravity float Aceleração por passo na direção gravityDirection. 0 = sem gravidade.
gravityDirection float Direção da gravidade em graus. Padrão 270 (para baixo).
friction float Quanto a velocidade total diminui por passo, até parar (sem inverter o sentido).
maxFallSpeed float O limite da queda: o vspeed para baixo nunca passa dele. A subida não é limitada. 0 = sem limite.

No editor, estes quatro ficam na seção Física do Inspetor do objeto e já chegam prontos ao onSpawn.

Função O que faz Exemplo
float speed() const A velocidade atual (o tamanho de hspeed e vspeed juntos). if (speed() > 4) ...
void setSpeed(float value) Muda a velocidade mantendo a direção. setSpeed(3);
float direction() const A direção do movimento, de 0 a 360 graus. float d = direction();
void setDirection(float degrees) Aponta o movimento para um ângulo, mantendo a velocidade. setDirection(90);
void push(float degrees, float force) Soma velocidade numa direção. push(90, 6); // impulso para cima
void moveToward(float targetX, float targetY, float velocity) Aponta para um ponto e define a velocidade. moveToward(player.x, player.y, 1.5f);
bool moveAndStop(float dx, float dy) Anda dx, dy pixel a pixel e para encostado num sólido, zerando a velocidade daquele eixo. Devolve true se bateu. moveAndStop(dx, 0);
bool moveAndStop() O padrão de plataforma: aplica gravidade e atrito e anda por hspeed/vspeed, parando nos sólidos. Chame uma vez no onUpdate. moveAndStop();
bool onGround() true se há um sólido 1 pixel abaixo da caixa de colisão. if (pressed("pular") && onGround()) vspeed = -4.5f;
bool hitFloor() const Depois de moveAndStop: bateu no chão, descendo. if (hitFloor()) ...
bool hitCeiling() const Depois de moveAndStop: bateu no teto, subindo. if (hitCeiling()) ...
bool hitWall() const Depois de moveAndStop: bateu numa parede, de qualquer lado. if (hitWall()) flipX = !flipX;
bool hitWallLeft() const, bool hitWallRight() const O mesmo, só para a parede da esquerda ou da direita. if (hitWallLeft()) ...

As funções hit... descrevem a última chamada de moveAndStop e valem até a próxima. Veja Jogo de plataforma.

  • A direção é lembrada mesmo com a instância parada, então setSpeed(2) depois de parar volta a andar para o mesmo lado.
  • Quando moveAndStop anda no passo, o movimento automático por hspeed/vspeed é pulado nesse passo, para não andar duas vezes.
  • moveAndStop anda no máximo 4096 pixels por eixo numa chamada. Quem começa dentro de um sólido consegue sair, mas não entrar mais.
  • Para paredes, marque Sólido no objeto da parede. Veja Colisões.