J'ai un contrôleur de personnage de base configuré pour un jeu de plateforme 2D avec Box2D, et je commence à le peaufiner pour essayer de le rendre agréable. Les moteurs physiques ont beaucoup de commandes à modifier, et ce n'est pas clair pour moi d'écrire avec un moteur physique pour la première fois, lesquels sont ceux que je devrais utiliser. Le saut doit-il exercer une force sur plusieurs tiques? Une impulsion? Définir directement la vitesse? Comment puis-je empêcher l'avatar de coller aux murs sans lui enlever tout son frottement (ou est-ce que je supprime tout mon frottement, mais seulement dans les airs)? Devrais-je modéliser le personnage sous forme de capsule? Une boîte aux coins arrondis? Une boite à deux roues? Juste une grande roue? Je me sens comme si quelqu'un devait l'avoir fait avant!
Il semble y avoir très peu de ressources disponibles sur le Web qui ne soient pas la "première physique de bébé", qui sont toutes interrompues là où j'espère que quelqu'un a déjà résolu les problèmes. La plupart des exemples de moteurs physiques pour plateformes sont dotés de commandes flottantes, de sauts dans l'air ou d'un comportement facilement exploitable lorsque la pénétration temporaire est trop élevée, etc.
Quelques exemples de ce que je veux dire:
- Un petit coup de saut saute une courte distance; un long coup saute plus haut.
- Court dérapage lors de l’arrêt ou du retournement de direction à grande vitesse.
- Debout de manière stable sur les pentes (mais peut-être en les glissant quand vous vous éloignez).
- Vitesse analogique lors de l'utilisation d'un contrôleur analogique.
- Toutes les autres choses qui séparent les bons joueurs de plate-forme des mauvais.
- Oserais-je suggérer, des plates-formes mobiles stables?
Je ne cherche pas vraiment "hé, fais ça." De toute évidence, la bonne chose à faire dépend de ce que je veux dans le jeu. Mais j'espère que quelqu'un, quelque part, a passé en revue les possibilités et dit: "bien, la technique A présente bien X, la technique B fonctionne bien, mais cela ne fonctionne pas avec C", ou présente des exemples plus performants que "if (key = = espace) character.impulse (0, 1) "
Honnêtement, je ne pense pas que l'utilisation d'un moteur physique soit la bonne approche pour un domaine de cette taille avec des exigences extrêmement strictes.
Il suffit d'écrire tout vous-même. Vous obtiendrez de bien meilleurs résultats en disant "déplacez le personnage de x unités dans cette forme de parabole lorsque vous maintenez le bouton de saut enfoncé pour la longueur y" plutôt que d'avoir plusieurs boutons à ajuster.
la source
J'ai écrit une série d'articles sur la création d'un jeu de plateforme à partir de rien, à l'aide de technologies modernes, et expliquant comment j'ai géré la physique simple:
http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-platform-game-part-2-collision-detection/
Cependant, si vous voulez quelque chose de plus high-tech, il est tout à fait possible de l'aborder en utilisant un moteur physique complet. Voici une technique que vous pouvez utiliser (de Little Big Planet) pour intégrer pleinement le personnage du moteur physique:
Au lieu d'appliquer des impulsions ou de définir des vitesses pour déplacer le joueur comme "entrées externes" dans le moteur physique, vous pouvez développer une contrainte qui contrôle le personnage.
Donc, cette contrainte aura la vitesse et la direction désirées du joueur comme entrée (du jeu) et modélisera des choses comme la force et la vitesse maximales du joueur. La contrainte essayera de déplacer le joueur en fonction de ses entrées (et obéissant aux maximums), et comme c'est une contrainte, elle appliquera une force égale et opposée sur l'objet sur lequel se trouve le joueur, permettant ainsi au joueur de se tenir sur des plateformes en mouvement. et pour affecter les choses qu'il déplace.
Faire des choses comme cela signifie que le joueur peut naturellement être capable de faire face à des situations telles que se trouver sous une énorme pile de boîtes ou sauter sur plusieurs plates-formes en mouvement, car il fait désormais partie intégrante du moteur physique.
J'espère que ça t'as aidé!
Salut, Paul.
la source
Cette question a fait l’objet de discussions approfondies sur les forums Box2D. En lisant les discussions sur le mouvement du personnage, le saut ou le jeu de plateforme, vous rencontrerez tous les problèmes possibles. Cependant, le problème est devenu suffisamment compliqué pour que le système de filtrage des collisions soit mis à jour et qu'un exemple de banc d'essai soit créé uniquement pour montrer comment procéder.
la source