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.
Propriedades
Seção intitulada “Propriedades”| 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ções
Seção intitulada “Funções”| 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.
Observações
Seção intitulada “Observações”- 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
moveAndStopanda no passo, o movimento automático porhspeed/vspeedé pulado nesse passo, para não andar duas vezes. moveAndStopanda 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.
