Ottenere un cloud "pixel" 2D per seguire un mouse


10

Sto lavorando a un gioco 2D cercando di ottenere una "nuvola" di alcune centinaia di piccoli cubi o dischi per seguire il cursore del mouse senza sovrapporsi.

Tuttavia, l'utilizzo del motore fisico introduce una riduzione delle prestazioni man mano che aumenta il numero di dischi e il rilevamento delle collisioni è generalmente instabile.

C'è un modo semplice per ottimizzare il motore per questo tipo di cose? In caso contrario, starei meglio spegnendo il motore e scrivendo qualcosa di mio? (Stringendo a cannucce qui, ma :) Ci sono buone risorse o esempi su come farlo?

Risposte:


13

Sì, usare un motore fisico per questo sarebbe un po 'eccessivo. Ti suggerisco di implementare un algoritmo di floccaggio. Le basi di cui sono:

  • Separazione: sterzare per evitare affollati compagni di gregge locali

  • Allineamento: orientati verso la rotta media dei compagni di gregge locali

  • Coesione: sterzare per spostarsi verso la posizione media dei compagni di gregge locali

Puoi vederlo in azione qui e ottenere alcuni dettagli sulla sua implementazione . Farai alcune piccole modifiche per includere l'applicazione di una forza verso il puntatore del mouse.


1
Puoi usare una griglia dinamica virtuale o altri partizionamenti spaziali per rendere efficiente il floccaggio se hai molti boids che non puoi elaborare in modo ingenuo. Tanti modi per ottimizzare.
— Sean Middleditch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.