J'ai récemment changé mon moteur de jeu des comportements de direction au mouvement basé sur les impulsions avec une résolution de collision appropriée en fonction du temps. Cela a résolu tant de problèmes (plus de tunneling, oui) et a rendu la simulation beaucoup plus stable. Cependant, avec la stabilité est venu un nouveau problème.
Les trois balles ont commencé leur voyage vers le bas de l'image, leur cible était l'endroit où la balle rose s'est arrêtée. Sur le chemin, les boules rouges et vertes se sont collées au point d'étranglement dans le mur.
Avant, je pouvais compter sur des erreurs en virgule flottante et l'instabilité générale des comportements de direction pour que les boules vertes et rouges se bousculent jusqu'à ce qu'elles parviennent à franchir le point d'étranglement. Maintenant, avec une résolution de collision appropriée, les forces agissant sur les billes s'annulent, ce qui fait que les billes restent parfaitement immobiles.
Quelles méthodes sont couramment utilisées pour résoudre de telles situations? Peut-être qu'une sorte de système de mise en file d'attente prioritaire fonctionnerait, bien que je puisse le voir devenir complexe une fois que je dois décider de la priorité entre plus de 2 objets.
la source
Réponses:
Attribuez à chaque objet mobile un index unique et interdisez à un objet avec un index supérieur de déplacer un agent avec un index inférieur. Cela permettra aux objets «plus anciens» de pousser les «plus récents», mais pas l'inverse, ce qui représente moins de surcharge que la mise en file d'attente. Essentiellement, l'indice agit comme une priorité de mouvement.
la source
ajouter du temps à la recherche de chemin
voici un article qui parle de ce cube temporel: http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Applications_files/coop-path-AIWisdom.pdf
et voici une implémentation Objective-C: http://allseeing-i.com/ASIPathFinder
la source
En fait, je ne pense pas que vous devriez le réparer. Si (je peux deviner) les flèches indiquent des vecteurs de force appliqués à n'importe quelle sphère, à n'importe quelle position dans la grille (probablement interpolés "bi-linéairement" ou de même, ou en quelque sorte plus "analogiques" que d'être simplement 0/1), eh bien alors le le comportement est physiquement correct et vous devez vous féliciter d'avoir une solution qui se comporte bien.
Les 2 sphères sont bien équilibrées, car elles sont là et se détestent. Apparemment, s'ils se déplacent un peu vers la droite, la "flèche de force" vers la droite affecte un peu plus la sphère droite (et vice versa sur la sphère gauche; un peu moins), et ainsi ils reviennent à l'équilibre. Ça devrait être comme cela.
À mon humble avis, que devrait être fixé, c'est le mur, ou la taille des sphères, ou quelque chose d'autre parmi les pierres de construction elles-mêmes. Vous avez créé une impossibilité et le comportement correct dans cette situation est donc une impasse (désolé pour avoir abusé des mots, j'espère que vous les obtiendrez quand même :-)).
Peut-être au lieu de cela désactiver les flèches de force gauche / droite les plus proches, ou les disposer d'une autre manière qui n'est pas symétrique et n'encourage pas à s'équilibrer ?
Je pense que ce serait une mauvaise solution de le réparer artificiellement ... deviendrait poilu trop tôt.
la source