Faire bouger un personnage le long d'une pente courbe dans un monde gravitationnel

10

J'ai vu ce jeu

Pantalon fantaisie 2 . Et ce que j'ai remarqué en dehors de la physique et des belles animations, c'est que le personnage se déplace le long des pentes, même des pentes courbes. J'ai peu d'expérience en Box2d, mais ce concept de pistes courbes est nouveau pour moi. Ce serait une grande aide pour moi si quelqu'un m'éclairait sur ce concept et sa mise en œuvre. Même si l'implémentation n'est pas dans box2d, elle est la bienvenue.

Vishnu
la source
2
Metanet, les gars qui ont fait N (qui est en Flash) ont un tutoriel sur la façon dont ils ont fait des collisions qui couvre la façon dont ils calculent les courbes: metanetsoftware.com/technique/tutorialA.html
CodexArcanum

Réponses:

5

Comment obtenez-vous des courbes dans Box2D?

Dans la version inédite de Box2D , il existe deux nouveaux types de formes, b2LoopShape et b2EdgeShape , qui vous permettent de créer des courbes à partir d'une séquence de segments de ligne.

Dans la version publiée, vous pouvez utiliser plusieurs petites boîtes placées sous des angles pour obtenir un effet similaire, mais les corps ont tendance à faire des choses instables et inattendues près des points de connexion. Je recommanderais donc d'utiliser la version non publiée.

Comment un personnage peut-il descendre la courbe?

Faites du personnage une roue! Ma question sur la physique des plateformes a une discussion à ce sujet , mais l'idée de base est de monter le corps de votre personnage sur une roue rotative et de se déplacer en appliquant une force de rotation à la roue. Même si (en fait, parce que) la roue a un frottement, la force descendante de la gravité la fera tourner sur des pentes - comme une vraie roue. En modifiant les paramètres du moteur du joint tournant , vous pouvez lui faire résister à la rotation autant que nécessaire pour éviter qu'il ne roule sur de petites pentes.

Communauté
la source
Je suis d'accord avec vous, en utilisant b2LoopShape, j'ai pu créer une pente selon mon désir. Mais, en suivant le lien que vous avez publié; Le problème est qu'il ne conduit pas à un port flash de box2d juste une version c ++. 1.) Avez-vous des suggestions à ce sujet? ou 2.) Connaissez-vous un autre moteur physique pour le flash permettant la création de pentes courbes?
Vishnu
Je ne pense pas que le port Flash de Box2D soit à jour avec les nouveaux types de joint / forme. Je n'ai aucune idée des moteurs physiques disponibles pour Flash autres que Box2D.
@ Joe: Si je vous le demande, si ce serait faisable si j'essayais d'écrire une classe AS pour b2LoopShape, afin de pouvoir l'intégrer dans l'API Flash Box2d. Où devrais-je commencer à me diriger.? Un indice?
Vishnu
1

Fancy Pants a été créé en Flash, et Flash a une méthode spécifique appelée `` hitTest '' qui vous permet de tester un pixel (dans ce cas, il effectue probablement des hitTests de 2-3 pixels en bas du caractère Fancy Pants) contre tout ce qui est dessiné dans un objet MovieClip désigné. Il peut être un peu difficile de se sentir bien, mais cette fonction intégrée est la raison pour laquelle tant de jeux Flash ont des collisions avec des pentes incurvées. Le processus est beaucoup plus compliqué pour la plupart des autres moteurs et doit généralement être effectué manuellement, mais il existe plusieurs méthodes différentes.

La méthode que je connais le mieux est que si votre moteur est basé sur des tuiles (pensez à Sonic the Hedgehog), les tuiles désignées comme incurvées pourraient chacune avoir une formule qui détermine la position de collision `` Y '' en fonction de la position actuelle `` X '' du personnage sur cette tuile. Vous devez déterminer la formule en fonction de la pente d'une pente et de la courbe que vous recherchez. Vous pouvez utiliser une calculatrice graphique ou un programme graphique pour expérimenter les formules. Vous pouvez avoir plusieurs tuiles avec différentes courbes et formules associées de cette façon.

Brian Cable
la source
Sonic n'a pas de formule de courbe pour les carreaux. Il utilise une carte de hauteur 2D pour chaque pixel.
AttackingHobo
@AttackingHobo: Pouvez-vous me dire quelle est la carte 2dheight pour chaque pixel ou pouvez-vous me diriger vers un endroit où je peux l'utiliser pour mes jeux flash?
Vishnu
2
info.sonicretro.org/Sonic_Physics_Guide Jetez un œil à ceci. Je ne sais pas si cela vous aidera si vous utilisez la case 2d. Vous devrez peut-être lancer votre propre moteur physique.
AttackingHobo
@Attacking Hobo: Y a-t-il un avantage ou une possibilité à "faire" des pentes courbes Si j'essaie de créer une classe AS 3.0 qui autorise les boucles dans l'api box2d?
Vishnu