¿Cómo determinar si el personaje ha caído en la brecha en un corredor / saltador infinito?

12

Estoy construyendo un corredor infinito 2D. En el juego, el personaje salta de un pilar a otro y los pilares se generan aleatoriamente. Tengo esto funcionando. Pero, ¿cómo determinar si el personaje no saltó a un pilar y cayó en la brecha entre los pilares? Un pilar es de forma rectangular ordinaria.

SanSolo
fuente
OT: Pensé que esta pregunta fue publicada en rpg.SE y pensé "¿Qué tipo de explotación de reglas se ha encontrado ahora? ¿Ejecución infinita cómo?"
o0 '.

Respuestas:

20

Agregue una región rectangular en la parte inferior del nivel, más baja que la altura mínima permitida de una plataforma. Si el jugador ha cruzado esta región, se ha caído de una plataforma.

mklingen
fuente
1
¿Y hacer que este rectángulo sea hijo de una cámara para que se mueva con la cámara y esté siempre presente? Eso es muy facil. Gracias.
SanSolo
Incluso si el jugador no debe ser capaz de superar el nivel, creo que esta es una buena protección si de alguna manera se las arregla.
mucaho
55
Si literalmente está verificando la intersección, asegúrese de que su personaje no pueda caer tan rápido como para atravesar la superficie (es decir, uno del personaje completamente arriba y el siguiente cuadro completamente abajo).
wchargin
2
Sí, el rect debería extenderse tanto como sea necesario para evitar esto. Además, solo comprobar la altura funcionará, pero esto le brinda la flexibilidad de cambiar el tamaño de la "región de eliminación" según el nivel.
mklingen
66
Para evitar "recortar" a través del rectángulo, ¿por qué no un simple if (playerPos.x < minHeight)?
Cole Johnson
24

Si tu juego solo se desplaza horizontalmente, puedes verificar si la posición vertical del personaje está debajo del borde inferior del escenario.

Si su juego también se desplaza verticalmente (probablemente hacia arriba), puede verificar si el jugador ha caído por debajo del borde inferior de la vista (es decir, el área del escenario que está en pantalla o enfocada en la cámara).

En general, la condición de muerte es si el personaje no puede permanecer "en la cámara". Al controlar el movimiento de su cámara, podrá ajustar su juego. Por ejemplo, si en una etapa de desplazamiento vertical solo permite que su cámara "gire" un poco hacia abajo, mientras permite un movimiento completo hacia arriba, penalizará caídas profundas fuera de la pantalla.

Jelle van Campen
fuente
Sí, esa también es una manera fácil. Solo necesito encontrar la posición más baja. Y que el personaje puede ser.
SanSolo
1
¡Correcto! en el caso de un desplazamiento horizontal, simplemente puede verificar el tamaño vertical de la etapa en su editor de mapas. En el caso de un desplazamiento vertical, puede asegurarse de que la cámara solo se mueva hacia arriba. De esa manera, si el personaje se cae, terminará debajo de la vista de la cámara. Luego, simplemente puede verificar si la posición vertical del personaje cae por debajo del límite inferior de la vista.
Jelle van Campen
@JellevanCampen: No es necesario limitar la cámara al movimiento hacia arriba necesariamente. Puedes matar personajes que no permanecen "en la cámara", o hacer que la cámara los siga.
Mooing Duck
No me gusta tanto esta respuesta porque vincula la cámara directamente a los límites de nivel. La respuesta de mklingen funciona incluso si los límites del nivel tienen más de una altura de pantalla. La cámara puede moverse hacia arriba y hacia abajo para enfocarse en el personaje, pero no existe el riesgo de que el personaje se caiga más rápido que la cámara, permanezca en el nivel, pero aun así colisiona con el cuadro delimitador conectado directamente a la cámara.
Kevin
2
@Kevin: Estoy de acuerdo con los juegos generales, pero no con los scrollers infinitos generados por procedimientos. Por ejemplo, en un desplazamiento vertical, tendrías que seguir generando nuevos cuadros y desaparecer de los cuadros de la pantalla, o tendrías que seguir actualizando los cuadros a medida que la cámara se mueve. Como la condición de muerte está directamente relacionada con "no permanecer en la cámara", tiene sentido vincular la condición a la cámara. También es más eficiente realizar una verificación de límites de la cámara, en lugar de generar nuevos objetos y recurrir a la verificación de colisiones.
Jelle van Campen
2

Como alternativa a la verificación de la coordenada vertical , puede verificar la velocidad vertical. Si el personaje está cayendo más rápido que algún umbral, la conclusión de que están muertos (incluso si no es un poco de plataforma baja lo suficiente como para llegar aún, el impacto sería fatal).

Por supuesto, esto solo funciona si su juego implementa adecuadamente la física básica de caída libre, es decir, la velocidad hacia abajo en realidad aumenta durante la caída, como lo hace en realidad (hasta la velocidad terminal).

a la izquierda
fuente
1

Si tiene altura de pilares, puede encontrar la más baja existente y compararla con la posición vertical del jugador. Si está por debajo del pilar más bajo, no hay posibilidad de que pueda volver. Puede limitar esta comprobación solo a los pilares detrás y delante del jugador.

Ejemplo: tenemos 3 pilares, con alturas [10, 20, 40]. El jugador saltó sobre el pilar con una altura de 40, salta hacia adelante a 20. Se sintió en un espacio entre 40 y 20, ahora está en la altura 15. Eso significa que se sintió. Para un control menos estricto, espere hasta que tenga menos de 10.

Polan
fuente
Todos los pilares son del mismo tamaño. Es la brecha horizontal entre dos pilares que varía :)
SanSolo
0

Mantenga un recuento de cuánto tiempo ha caído un personaje. (es decir, cuánto tiempo han estado moviéndose "hacia abajo"). Una vez que han caído más de una pantalla llena de tiempo, por definición se han caído del escenario, ¿sí?

Allen Gould
fuente