Obtenir un nuage 2D «pixel» pour suivre une souris

10

Je travaille sur un jeu 2D essayant d'obtenir un "nuage" de quelques centaines de minuscules cubes ou disques pour suivre le curseur de ma souris sans se chevaucher.

Cependant, l'utilisation du moteur physique introduit un ralentissement des performances à mesure que le nombre de disques augmente et que la détection des collisions est généralement bancale.

Existe-t-il un moyen simple d'optimiser le moteur pour ce genre de chose? Sinon, serais-je mieux de simplement couper le moteur et écrire quelque chose de moi-même? (Se serrant les pailles ici, mais :) Y a-t-il de bonnes ressources ou des exemples sur la façon de procéder?

Autio
la source

Réponses:

13

Oui, utiliser un moteur physique pour cela serait un peu exagéré. Je vous suggère d'implémenter un algorithme de flocage. Les bases dont sont:

  • Séparation: Évitez d'encombrer les copains locaux

  • Alignement: orientez-vous vers le cap moyen des copains locaux

  • Cohésion: s'orienter vers la position moyenne des copains locaux

Vous pouvez le voir en action ici et obtenir des détails sur sa mise en œuvre . Vous ferez quelques ajustements mineurs pour inclure l'application d'une force vers le pointeur de la souris.

MichaelHouse
la source
1
Vous pouvez utiliser une grille dynamique virtuelle ou un autre partitionnement spatial pour rendre le flocage efficace si vous avez beaucoup de boids que vous ne pouvez pas traiter naïvement également. De nombreuses façons d'optimiser.
Sean Middleditch