Movimiento
Brasa mueve las instancias sola en cada paso: suma hspeed a x y vspeed a y, después de aplicar gravedad y fricción. Tú solo defines las velocidades.
Los ángulos van en grados: 0 = derecha, 90 = arriba, 180 = izquierda, 270 = abajo.
Propiedades
Sección titulada «Propiedades»| Propiedad | Tipo | Qué es |
|---|---|---|
hspeed |
float |
Velocidad horizontal, en píxeles por paso. Positivo = derecha. |
vspeed |
float |
Velocidad vertical, en píxeles por paso. Positivo = abajo. |
gravity |
float |
Aceleración por paso en la dirección gravityDirection. 0 = sin gravedad. |
gravityDirection |
float |
Dirección de la gravedad en grados. Por defecto 270 (hacia abajo). |
friction |
float |
Cuánto disminuye la velocidad total por paso, hasta detenerse (sin invertir el sentido). |
maxFallSpeed |
float |
El límite de la caída: el vspeed hacia abajo nunca lo supera. La subida no está limitada. 0 = sin límite. |
En el editor, estos cuatro están en la sección Física del Inspector del objeto y ya llegan listos al onSpawn.
Funciones
Sección titulada «Funciones»| Función | Qué hace | Ejemplo |
|---|---|---|
float speed() const |
La velocidad actual (la magnitud de hspeed y vspeed juntos). |
if (speed() > 4) ... |
void setSpeed(float value) |
Cambia la velocidad manteniendo la dirección. | setSpeed(3); |
float direction() const |
La dirección del movimiento, de 0 a 360 grados. | float d = direction(); |
void setDirection(float degrees) |
Apunta el movimiento hacia un ángulo, manteniendo la velocidad. | setDirection(90); |
void push(float degrees, float force) |
Suma velocidad en una dirección. | push(90, 6); // impulso hacia arriba |
void moveToward(float targetX, float targetY, float velocity) |
Apunta hacia un punto y define la velocidad. | moveToward(player.x, player.y, 1.5f); |
bool moveAndStop(float dx, float dy) |
Avanza dx, dy píxel a píxel y se detiene contra un sólido, poniendo en cero la velocidad de ese eje. Devuelve true si chocó. |
moveAndStop(dx, 0); |
bool moveAndStop() |
El estándar de plataformas: aplica gravedad y fricción y avanza por hspeed/vspeed, deteniéndose en los sólidos. Llámalo una vez en el onUpdate. |
moveAndStop(); |
bool onGround() |
true si hay un sólido 1 píxel debajo de la caja de colisión. |
if (pressed("pular") && onGround()) vspeed = -4.5f; |
bool hitFloor() const |
Después de moveAndStop: tocó el suelo, bajando. |
if (hitFloor()) ... |
bool hitCeiling() const |
Después de moveAndStop: tocó el techo, subiendo. |
if (hitCeiling()) ... |
bool hitWall() const |
Después de moveAndStop: chocó con una pared, de cualquier lado. |
if (hitWall()) flipX = !flipX; |
bool hitWallLeft() const, bool hitWallRight() const |
Lo mismo, solo para la pared de la izquierda o de la derecha. | if (hitWallLeft()) ... |
Las funciones hit... describen la última llamada a moveAndStop y valen hasta la siguiente. Mira Juego de plataformas.
Observaciones
Sección titulada «Observaciones»- La dirección se recuerda incluso con la instancia detenida, así que
setSpeed(2)después de detenerse vuelve a avanzar hacia el mismo lado. - Cuando
moveAndStopavanza en el paso, el movimiento automático porhspeed/vspeedse omite en ese paso, para no avanzar dos veces. moveAndStopavanza como máximo 4096 píxeles por eje en una llamada. Quien empieza dentro de un sólido puede salir, pero no entrar más.- Para paredes, marca Sólido en el objeto de la pared. Mira Colisiones.
