Uzyskiwanie chmury „piksela” 2D podążającej za myszą

10

Pracuję nad grą 2D, która próbuje uzyskać „chmurę” kilkuset małych kostek lub dysków, aby podążały za kursorem myszy, nie nakładając się na siebie.

Jednak korzystanie z silnika fizyki wprowadza powolność działania w miarę wzrostu liczby dysków, a wykrywanie kolizji jest zwykle niepewne.

Czy istnieje prosty sposób na zoptymalizowanie silnika do tego rodzaju rzeczy? Jeśli nie, czy lepiej byłoby po prostu wyłączyć silnik i napisać coś własnego? (Trzymam się tutaj za słomki, ale :) Czy są jakieś dobre zasoby lub przykłady, jak to zrobić?

Autio
źródło

Odpowiedzi:

13

Tak, użycie do tego silnika fizyki byłoby trochę przesadą. Sugeruję wdrożenie algorytmu flokowania. Podstawami są:

  • Separacja: Steruj, aby uniknąć zatłoczenia lokalnych stad

  • Wyrównanie: Kieruj się w stronę średniego kursu lokalnych towarzyszy stad

  • Spójność: Steruj, aby przejść w kierunku średniej pozycji lokalnych stad

Możesz zobaczyć go w akcji tutaj i uzyskać szczegółowe informacje na temat jego implementacji . Zrobisz drobne poprawki, aby zastosować siłę w kierunku wskaźnika myszy.

MichaelHouse
źródło
1
Kabina używa wirtualnej siatki dynamicznej lub innego podziału przestrzennego, aby flokowanie było wydajne, jeśli masz dużo boidów, których nie możesz naiwnie przetworzyć. Wiele sposobów optymalizacji.
Sean Middleditch