Tout d'abord, notez que je veux comprendre le principe, donc je préférerais des explications en anglais simple (mais bien sûr, je n'ai rien contre un code pour compléter ces explications).
Je me demande quelle est la façon de faire marcher correctement un personnage sur une pente, commençons par deux captures d'écran du jeu Limbo pour vous montrer ce que je veux dire:
Donc, comme vous pouvez le voir sur ces photos, cela ressemble à la colonne vertébrale du le personnage est en fait perpendiculaire à l'horizon et non à la surface du sol et cette observation m'amène à ma question:
comment reproduire un tel comportement avec Sprite Kit? Parce que si j'attache un corps physique à un nœud, j'ai la possibilité de le laisser tourner, donc j'obtiendrais quelque chose comme ceci:
Si je désactive la rotation, j'obtiendrais quelque chose comme ceci:
Comme vous pouvez le voir, ces façons de faire présentent des problèmes importants et ne semblent pas du tout naturelles. Alors, comment dois-je faire pour le rendre naturel? J'ai pensé à créer plusieurs sprites et plusieurs corps physiques, puis à les attacher tous ensemble avec des articulations, je ne pense pas que cela semblera naturel, car si vous regardez ceci: bien
que je puisse physiquement lier ces nœuds, comment vais-je faire pour les faire regarder graphiquement réel? Parce que dans la réalité, par exemple, la cuisse et le mollet sont liés par un genou ...
Des idées ?
Réponses:
Pour développer la réponse de Josh Petrie, trouver l'angle du pied est également assez simple.
L'angle des pieds est égal à l'angle de la surface inclinée. Étant donné que nous avons commodément deux points sur cette pente, nous pouvons trouver l'angle d'inclinaison (il est également possible d'utiliser deux coins de la forme triangulaire de la pente, mais les pentes progressives deviendraient trop compliquées; pour les collines, c'est la meilleure solution). En fin de compte, la pente sera H / P (en supposant que le talon de la jambe pliée est directement sous la hanche correspondante), ou arctan (H / P) rad. En utilisant des cosinus, on peut facilement trouver que H = (F + T) - (Fcosθ + Tcosφ).
L'angle du pied devient arctan ((F (1-cosθ) + T (1-cosφ)) / P)
PS: Si vous voulez vraiment entrer, vous pouvez également trouver la largeur ajoutée à P.
PSS: Le pied ne se pliera que trop haut, alors gardez cela à l'esprit avant d'essayer de gravir une pente de 80 degrés.
PSSS: Les gens ne gravissent pas les collines sur leurs talons, mais ils se reposent sur eux. Garder le pied parfaitement à plat sur la colline pourrait dépeindre de façon assez précise le joueur debout sur la pointe des pieds et permettre au talon de s'enfoncer au sol pendant la marche au ralenti pourrait permettre un mouvement très réaliste.
la source
Il existe des solutions et des astuces simples que vous pouvez utiliser (par exemple, si vos pentes auront toutes un angle fixe, créez simplement des sprites supplémentaires pour les mouvements en pente et au ralenti, fournissez un mécanisme pour que votre code de jeu sache si vous êtes sur une surface en pente, et rendre en conséquence - c'est généralement ce que faisaient les anciens jeux basés sur les sprites).
Une solution générale, développant votre idée de sprite multi-articulé, consiste à utiliser la cinématique inverse pour résoudre le placement des pieds d'un personnage ( voir également ).
Cela implique de définir une structure squelettique logique pour vos personnages, représentée visuellement par plusieurs sprites distincts (pour le torse, autant de parties de jambes que nécessaire et de pied). L'effecteur terminal de ce système est la position du pied du personnage sur la pente, qui peut être calculée à partir de la position du torse (fixe) et une idée du pied devant, sur la base du cadre de cycle de marche actuel. Entre ces deux positions connues, un système CI peut résoudre les paramètres des articulations des jambes et créer une approximation raisonnable de la façon dont tout bipède réel pourrait se stabiliser sur une surface en pente.
Le CI est souvent exprimé comme un problème 3D, mais il peut être réduit à l'espace 2D relativement facilement. En 2D, vous n'avez pas besoin de jouer avec presque autant de contraintes de rotation des articulations pour créer un mouvement réaliste que vous le feriez en 3D, ce qui est bien.
C'est la méthode utilisée par de nombreux jeux 2D modernes, en particulier compte tenu de la tendance des compositions de sprites basées sur le squelette pour les personnages, plutôt que de l'ancienne technique de création à la main de chaque image.
la source