En primer lugar, tenga en cuenta que quiero entender el principio, por lo que preferiría explicaciones en inglés simple (pero, por supuesto, no tengo nada en contra de algún código para complementar estas explicaciones).
Me pregunto cuál es la forma de hacer que un personaje camine correctamente en una pendiente, comencemos con dos capturas de pantalla del juego Limbo para mostrarle lo que quiero decir:
Entonces, como puede ver en estas imágenes, parece la columna vertebral de la columna vertebral el personaje es en realidad perpendicular al horizonte y no a la superficie del suelo y esta observación me lleva a mi pregunta:
¿Cómo puede reproducir tal comportamiento con Sprite Kit? Porque si adjunto un cuerpo físico a un nodo, tengo la posibilidad de dejar que gire, por lo que obtendría algo como esto:
Si desactivo la rotación, obtendría algo más como esto:
como puede ver, estas formas de hacerlo presentan problemas importantes y no se ven naturales en absoluto. Entonces, ¿cómo debo hacer para que se vea natural? Pensé en crear varios sprites y varios cuerpos de física y luego unirlos todos con juntas. No creo que se vea natural porque si miras esto:
aunque puedo vincular físicamente estos nodos, ¿cómo haré para hacerlos? parece real gráficamente? Porque en la realidad, por ejemplo, el muslo y la pantorrilla están unidos por una rodilla ...
Algunas ideas ?
Respuestas:
Para ampliar la respuesta de Josh Petrie, encontrar el ángulo del pie también es bastante sencillo.
El ángulo de los pies es igual al ángulo de la superficie inclinada. Como convenientemente tenemos dos puntos en esa pendiente, podemos encontrar el ángulo de inclinación (también es posible usar dos esquinas de la forma triangular de la pendiente, pero las pendientes graduales se volverían demasiado complicadas; para colinas onduladas, esta es la mejor solución). Finalmente, la pendiente será H / P (suponiendo que el talón de la pierna doblada esté directamente debajo de la cadera correspondiente) o arctan (H / P) rad. Usando cosenos, uno puede encontrar fácilmente que H = (F + T) - (Fcosθ + Tcosφ).
El ángulo del pie se convierte en arctan ((F (1-cosθ) + T (1-cosφ)) / P)
PD: si realmente quieres entrar, también puedes encontrar el ancho agregado a P.
PSS: el pie solo se doblará demasiado, así que tenlo en cuenta antes de intentar subir una pendiente de 80 grados.
PSSS: Las personas no suben las colinas sobre sus talones, pero sí descansan sobre ellas. Mantener el pie perfectamente plano hacia arriba de la colina podría representar con precisión al jugador parado sobre las puntas de los dedos de los pies, y permitir que el talón se hunda en el suelo mientras está inactivo podría generar un movimiento muy realista.
fuente
Hay soluciones y trucos simples que puedes usar (por ejemplo, si todas tus pendientes serán un ángulo fijo, solo crea sprites adicionales para el movimiento inclinado e inactivo, proporciona un mecanismo para que el código del juego sepa si estás en una superficie inclinada, y renderizar en consecuencia: esto es generalmente lo que hicieron los juegos basados en sprites más antiguos).
Una solución general, expandiendo su idea de sprite de articulaciones múltiples, es usar una cinemática inversa para resolver la ubicación de los pies de los caracteres ( ver también ).
Esto implica definir una estructura esquelética lógica para tus personajes, representada visualmente por varios sprites distintos (para el torso, todas las partes de las piernas que necesites y el pie). El efector final en este sistema es la posición del pie del personaje en la pendiente, que se puede calcular a partir de la posición del torso (fija) y una idea de qué pie está al frente, según el marco del ciclo de caminata actual. Entre esas dos posiciones conocidas, un sistema IK puede resolver los parámetros de las articulaciones de las piernas y crear una aproximación razonable de cómo cualquier bípedo real podría estabilizarse en una superficie inclinada.
IK a menudo se expresa como un problema 3D, pero se puede reducir al espacio 2D con relativa facilidad. En 2D no es necesario andar con tantas restricciones de rotación de articulaciones para crear un movimiento realista como lo haría en 3D, lo cual es bueno.
Este es el método utilizado por muchos juegos 2D modernos, especialmente dada la tendencia de las composiciones de sprites basadas en esqueletos para los personajes, en lugar de la técnica más antigua de autoría manual de cada cuadro.
fuente