El jugador se mueve hacia arriba, ¿está saltando o trepando?

11

En un juego de plataformas en 2D basado en la física que tiene escaleras, ¿cómo se determina si el jugador que sube es causado por un salto o si sube una escalera, de modo que sepa qué animación jugar?

Y, en general, obviamente, el vector de dirección no es suficiente para determinar la animación que se reproducirá: ¿cómo se determina también la causa del movimiento (para saber el sprite correcto para usar)?

Paul Manta
fuente
1
Si un jugador está en una escalera, ¿está realmente en el aire?
Derek

Respuestas:

15

Tengo un problema de lógica personal de forma regular que parece estar expresando aquí. Es que a veces estás mirando la lógica y la programación desde la dirección incorrecta por completo. En este caso, parece que no se está dando cuenta de que desde el principio sabe qué está sucediendo, debido al código lógico. Ya debería saber, programáticamente hablando, si está en la escalera o no.

Piénselo (como dije, a menudo tengo este problema). La lógica de los juegos debería saber que estás en la escalera, suponiendo que estás siendo un programador inteligente. Para una mejor explicación, tengo un tipo de archivo de archivos, y desperdicié aproximadamente una hora del día tratando de averiguar cómo obtener el tamaño de los datos y nunca me detuve a pensar que, cuando cargo el archivo, ahora saber su tamaño: P.

La razón por la cual esto se relaciona tan exclusivamente, es que lo estás viendo como "Ahora que estoy en el aire, ¿cómo puedo saber si estoy en una escalera o saltando?" ... Cuando realmente deberías piense "Estoy a punto de salir al aire, pero por qué método PRIMERO, para poder usarlo para las animaciones".

Joshua Hedges
fuente
Simple, por ejemplo: OnJump()cambie su valor jumpingbooleano a verdadero, y luego, si está en el aire y jumpinges falso, se está cayendo o está en una escalera, etc.
Joshua Hedges
6

El sistema de física no sabe ni le importa por qué el jugador se está moviendo en una dirección particular. Es su juego el que causó que el sistema de física moviera al jugador de esa manera, y por lo tanto, es responsabilidad de su juego hacer un seguimiento de eso. La entidad del jugador debería tener algún estado que diga si está saltando, trepando, corriendo, etc. No deberías tratar de resolver esto en función de lo que sucedió con el sistema de física.

Nicol Bolas
fuente
2

Parece que cualquier evento que se desencadene en la colisión que establece la velocidad vertical de los jugadores también podría usarse para establecer una bandera que especifique qué animación usar.

Si está utilizando una biblioteca de terceros que es demasiado restrictiva con la información que le brinda, sería posible rodear la escalera con un rectángulo y si el jugador se mueve hacia arriba y está contenido en ese rectángulo, haga la animación de escalada.

Trueno clásico
fuente
En realidad, esto trae a colación un buen punto que abordaría más adelante en mi propio desarrollo de juegos, y es cómo cambiar la velocidad de una animación basada en la física. Tengo personajes que quiero agitar sus brazos de manera procesal, más rápido en función de lo rápido que caen. Y nunca había pensado en una buena manera de hacerlo en profundidad (estaba pensando en el tiempo), pero tu idea de velocidad es mucho mejor. +1 para una respuesta utilizable general, y no ser específico solo para su caso.
Joshua Hedges
1

Al establecer la velocidad de salto, también establezca el estado de los caracteres en STATE_JUMPING. Al hacer esto, siempre sabe en qué estado se encuentra el jugador y puede actuar en consecuencia al verificar el estado de los jugadores.

crisi
fuente