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,
isColidingWithGround
yisJumping
Cuando el usuario presiona el botón de salto, si
isColidingWithGround
estrue
yisJumping
es falso, entonces llame a lojump()
que se estableceisJumping
entrue
Si la
y
velocidad del jugador es positiva, entoncesisJumping
es igualfalse
Si el jugador está colisionando con el suelo, entonces isColidingWithGround es igual
true
, de lo contrarioisColidingWithGround
es 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
isJumping
booleano 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 == false
les 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,
isJumping
seguirá siéndolofalse
. Puede solucionar esto con elEndContact
método de Contact Listener (consulte la sección 9.4 Documentos de Box2D . Solo necesita establecer laisJumping
propiedadtrue
cuando cese la colisión con el mundo.fuente
isJumping
seráfalse
, pero todavía no se les debe permitir saltarEndContact
en 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