Ir al contenido
Descargar

Juego de plataformas

Quieres un personaje que cae, aterriza en el suelo, salta y no atraviesa paredes.

  1. En el objeto del suelo y de las paredes, marca Sólido en el Inspector. O pinta el suelo con tiles sólidos: mira Escenario con tiles.
  2. En el objeto del jugador, en la sección Física, pon Gravidade (gravedad) en 0.25 y Queda máxima (caída máxima) en 4.5.

La gravedad tira del jugador hacia abajo en cada paso, y la caída máxima impide que caiga cada vez más rápido.

void Player::onUpdate() {
hspeed = axis("esquerda", "direita") * 1.5f;
if (pressed("pular") && onGround()) vspeed = -4.5f;
moveAndStop();
}
  • axis("esquerda", "direita") da la dirección: -1, 0 o 1. Mira acciones.
  • onGround() es verdadero cuando hay un sólido 1 píxel debajo del jugador. Sin esa comprobación, saltaría en el aire.
  • vspeed = -4.5f lanza al jugador hacia arriba (la y crece hacia abajo). La gravedad se encarga de traerlo de vuelta.
  • moveAndStop() aplica la gravedad y avanza por hspeed y vspeed, deteniéndose cuando toca un sólido. Llámala una vez por paso.

Girar hacia el lado al que camina. flipX espeja el dibujo y la caja de colisión, sin tocar la escala:

if (hspeed != 0) flipX = hspeed < 0;

Un enemigo que va y vuelve. Después de moveAndStop(), hitWall() dice si chocó con una pared:

void Enemy::onUpdate() {
hspeed = flipX ? -0.5f : 0.5f;
moveAndStop();
if (hitWall()) flipX = !flipX;
}

Hacer algo al aterrizar. hitFloor() vale en el paso en que el jugador tocó el suelo; hitCeiling(), cuando se golpeó la cabeza con el techo:

moveAndStop();
if (hitFloor()) Audio::play("pouso");

Que la caja de colisión no cambie con la animación. Si el sprite de correr es más ancho que el de estar quieto, el jugador puede quedar atascado en una pared al cambiar de animación. En el Inspector del objeto, elige un sprite en Máscara: la colisión pasa a usar siempre su caja.

Salto más bajo al soltar el botón.

if (released("pular") && vspeed < 0) vspeed *= 0.5f;