Juego de plataformas
Quieres un personaje que cae, aterriza en el suelo, salta y no atraviesa paredes.
En el editor
Sección titulada «En el editor»- 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.
- En el objeto del jugador, en la sección Física, pon Gravidade (gravedad) en
0.25y Queda máxima (caída máxima) en4.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.
En el código
Sección titulada «En el código»void Player::onUpdate() { hspeed = axis("esquerda", "direita") * 1.5f; if (pressed("pular") && onGround()) vspeed = -4.5f; moveAndStop();}Cómo funciona
Sección titulada «Cómo funciona»axis("esquerda", "direita")da la dirección:-1,0o1. 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.5flanza al jugador hacia arriba (laycrece hacia abajo). La gravedad se encarga de traerlo de vuelta.moveAndStop()aplica la gravedad y avanza porhspeedyvspeed, deteniéndose cuando toca un sólido. Llámala una vez por paso.
Variaciones
Sección titulada «Variaciones»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;Mira también
Sección titulada «Mira también»- Movimiento: gravedad, fricción y
moveAndStop. - Colisiones.
- Cámara siguiendo al jugador.
