Actualmente estoy usando Box2D y mi personaje es un montón de accesorios en Box2D. Me preguntaba si, para determinar si un jugador está cayendo, ¿sería apropiado detectar un cambio en la posición Y?
¿Hay quizás otras formas en las que no estoy pensando? ¿Cómo se suele detectar este tipo de cosas?

Respuestas:
(De mi comentario.) No estoy familiarizado con Box2D, pero normalmente un motor de física debería darle formas de verificar la normalidad de una colisión.
Si está "arriba", esto significa que su jugador está parado sobre algo y debería poder saltar.
Inversamente, si no está colisionando, o si ninguna de las normales de colisión apunta hacia arriba, entonces está cayendo.
fuente
Necesitas dos booleanos,
isColidingWithGroundyisJumpingCuando el usuario presiona el botón de salto, si
isColidingWithGroundestrueyisJumpinges falso, entonces llame a lojump()que se estableceisJumpingentrueSi la
yvelocidad del jugador es positiva, entoncesisJumpinges igualfalseSi el jugador está colisionando con el suelo, entonces isColidingWithGround es igual
true, de lo contrarioisColidingWithGroundes igualfalse.A veces, el jugador todavía está en contacto con el suelo después del impulso de salto inicial, y encuentro que al usar estas dos banderas, evita que se llame al salto () varias veces cuando se presiona el salto.
fuente
jump()vuelva a llamar .La forma en que manejo esto es que cada jugador tiene un valor
isJumpingbooleano que, cuando saltan, está configurado entrue. Cuando chocan con una superficie, compruebo si es algo de lo que podrían saltar y otras estipulaciones, como si están de pie, etc., y lo configurofalse.Luego, cuando intentan saltar, si la superficie en la que se encuentran es buena y
isJumping == falseles permito saltar, de lo contrario no pueden saltar. Creo que esto es mejor que calcular colisiones cada vez que quieres ver si están saltando.Edite
como @BlueRaja señaló a continuación, si el usuario se sale del borde,
isJumpingseguirá siéndolofalse. Puede solucionar esto con elEndContactmétodo de Contact Listener (consulte la sección 9.4 Documentos de Box2D . Solo necesita establecer laisJumpingpropiedadtruecuando cese la colisión con el mundo.fuente
isJumpingseráfalse, pero todavía no se les debe permitir saltarEndContacten 9.4 de los Documentos de Box2d . Editar respuesta actualizada.Mueva todos los componentes relevantes en su "grupo de accesorios" (que juntos hacen al jugador) hacia abajo en una pequeña cantidad, y verifique si hay colisiones con cualquier cosa que considere posible saltar. Si no hay colisión, el jugador está cayendo. De lo contrario, no lo es. No olvide volver a mover los componentes en la misma cantidad.
Si tu personaje es humanoide, probablemente deberías moverte y controlar solo los pies del personaje, de lo contrario, ¡tu personaje podría terminar saltando incluso de pie sobre su cabeza!
fuente
Esto puede o no aplicarse, pero detectaríamos una diferencia entre saltar / aterrizar y caer, por lo que sabíamos cuándo cambiar a una animación descendente, hacer daño por caer demasiado tiempo (no demasiado lejos;)) y similares.
Se hizo más o menos rastreando cuánto tiempo estuvo un objeto sin un punto de referencia. Cualquier cosa en el suelo, o cualquier otro objeto, tenía una referencia a lo que estaba parado ... ¿No parado sobre nada? Luego estabas en el aire, y después de 1-2 segundos, estabas 'cayendo' en lugar de aterrizar con gracia :)
fuente
De manera muy ingenua y simple, puedes comprobar si el jugador tiene una velocidad y (velocidad, no velocidad) que es> 0, suponiendo que estés usando (0,0) como arriba a la izquierda.
fuente