Conseguir que uma nuvem 2D de "pixels" siga um mouse

10

Estou trabalhando em um jogo 2D tentando obter uma "nuvem" de algumas centenas de cubos ou discos minúsculos para seguir o cursor do mouse sem se sobrepor.

No entanto, o uso do mecanismo de física introduz lentidão no desempenho à medida que o número de discos aumenta e a detecção de colisões geralmente é instável.

Existe uma maneira fácil de otimizar o mecanismo para esse tipo de coisa? Caso contrário, eu estaria melhor apenas desligando o motor e escrevendo algo próprio? (Segurando os canudos aqui, mas :) Existem bons recursos ou exemplos de como fazer isso?

Autio
fonte

Respostas:

13

Sim, usar um mecanismo de física para isso seria um pouco exagerado. Eu sugiro que você implemente um algoritmo de flocagem. Os princípios básicos são:

  • Separação: Dirija para evitar aglomerar companheiros de rebanho locais

  • Alinhamento: Direcione para a posição média dos companheiros de bando locais

  • Coesão: siga para a posição média dos companheiros de bando locais

Você pode vê-lo em ação aqui e obter alguns detalhes sobre sua implementação . Você fará alguns pequenos ajustes para incluir a aplicação de uma força em direção ao ponteiro do mouse.

MichaelHouse
fonte
1
Você pode usar uma grade dinâmica virtual ou outro particionamento espacial para tornar o flocagem eficiente se você tiver muitos boids que também não pode processar ingenuamente. Muitas maneiras de otimizar.
Sean Middleditch 21/02