5 votes

Empêcher le joueur box2d d'appuyer sur les murs en plein vol

J'ai installé un monde box2d avec un joueur contrôlé par un clavier. Le joueur peut marcher et sauter. Comment puis-je empêcher le joueur de "coller" aux murs lorsqu'il saute et appuie sur la touche directionnelle vers un objet ?

enter image description here

9voto

zaynyatyi Points 725

Faites du corps du joueur un groupe de corps (ajoutez des fixations sur les côtés gauche et droit) ? et définissez la friction à 0. enter image description here

3voto

Vous devez changer la façon dont vous affectez le corps du personnage. Quelle méthode utilisez-vous pour le déplacer de gauche à droite ? Essayez applyLinearImpulse sur le corps et assurez-vous que la friction dans la définition du corps n'est pas trop élevée.

1voto

satanas Points 514

Vous pouvez définir la friction de votre joueur à 0 et ensuite exécuter dans chaque boucle une fonction qui définit votre vitesse en X à zéro lorsque l'utilisateur n'appuie pas sur les touches de mouvement. Dans votre méthode pour vérifier les événements, vous devriez ajouter :

if (event.type == KeyReleased) {
    if (!isKeyPressed(Keyboard::Left) && !isKeyPressed(Keyboard::Right)) {
        player.stop();
     }
}

Et dans votre player.stop() vous devriez faire quelque chose comme :

b2Vec2 vel = body->GetLinearVelocity();
vel.x = 0;
body->SetLinearVelocity(vel);

Cela fera que votre joueur aura une friction 0 avec les plateformes avec le patinage sur glace.

0voto

felipemaia Points 2881

Tout dépend de la façon dont votre physique fonctionne actuellement, car il y a beaucoup de possibilités. La façon la plus simple de le faire, à mon avis, est de diviser le corps représenté en 4 parois (haut, gauche, droite, bas) et de faire en sorte que seul le sol praticable (haut) produise de la friction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X