Obtener una nube 2D de "píxeles" para seguir a un mouse

10

Estoy trabajando en un juego 2D tratando de obtener una "nube" de unos cientos de cubos o discos pequeños para seguir el cursor de mi mouse sin superponerse entre sí.

Sin embargo, el uso del motor de física introduce una lentitud en el rendimiento a medida que aumenta el número de discos y la detección de colisión es generalmente inestable.

¿Hay una manera fácil de optimizar el motor para este tipo de cosas? Si no, ¿estaría mejor simplemente apagando el motor y escribiendo algo propio? (Agarrando pajitas aquí, pero :) ¿Hay algún buen recurso o ejemplos sobre cómo hacer esto?

Autio
fuente

Respuestas:

13

Sí, usar un motor de física para eso sería un poco exagerado. Le sugiero que implemente un algoritmo de flocado. Los conceptos básicos son:

  • Separación: evite abarrotar a los compañeros locales

  • Alineación: Diríjase hacia el rumbo promedio de los compañeros locales.

  • Cohesión: dirigir para avanzar hacia la posición promedio de los compañeros locales

Puede verlo en acción aquí y obtener algunos detalles sobre su implementación . Hará algunos ajustes menores para incluir la aplicación de una fuerza hacia el puntero del mouse.

MichaelHouse
fuente
1
Puede utilizar una cuadrícula dinámica virtual u otra partición espacial para hacer que el agrupamiento sea eficiente si tiene muchos boids que no puede procesar ingenuamente también. Muchas formas de optimizar.
Sean Middleditch