¿Cómo puedo hacer que un personaje se pare en las pendientes?

8

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: Limbo personaje principal parado en una pendiente Limbo personaje principal de pie sobre un terreno plano
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: Podemos ver que el sprite sigue el suelo sobre el que se encuentra, por lo que los pies del personaje están en el piso pero su columna vertebral no es perpendicular al horizonte, sino más al suelo.

Si desactivo la rotación, obtendría algo más como esto: Aquí la columna vertebral es perpendicular al horizonte, pero los pies del personaje no tocan el piso.  De hecho, solo hay una esquina del sprite que toca el piso
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: ingrese la descripción de la imagen aquí
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 ?

Trevör
fuente
1
Intente pararse en una pendiente usted mismo y vea cómo va eso. Cuando pones una pierna delante de la otra, la pierna más alta tiene que doblarse para compensar la pendiente. Por lo tanto, su enfoque con múltiples articulaciones es una buena opción.
Eejin
@Eejin Ok, gracias, ¿y qué pasa con el realismo gráfico a nivel de las articulaciones? ¿Qué puedo hacer para vincularlos naturalmente? ¿Para que no parezca que hay varios nodos?
Trevör
Depende de algunos aspectos de tu juego. Por supuesto, las partes del cuerpo bien dibujadas ayudan. ¿Podría darnos un poco más de información sobre los tamaños y la importancia de los detalles perfectos?
Eejin
Si su suelo es siempre, digamos, hierba alta, solo usar el punto bajo del sprite podría estar bien, ya que las patas de los personajes estarán oscurecidas hasta el punto en que no podría decir cómo estaban parados.
jzx
No sé acerca de SpriteKit, pero muchos juegos representan al jugador como una forma de "cápsula" o "píldora" en lugar de un rectángulo. Además, el objeto físico suele ser más pequeño que el propio sprite.
Thane Brimhall

Respuestas:

6

Para ampliar la respuesta de Josh Petrie, encontrar el ángulo del pie también es bastante sencillo.

ingrese la descripción de la imagen aquí

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.

igrad
fuente
5

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