Получение двумерного «пиксельного» облака за мышью

10

Я работаю над 2D-игрой, пытаясь получить «облако» из нескольких сотен крошечных кубиков или дисков, чтобы они следовали за курсором мыши, не перекрывая друг друга.

Тем не менее, использование физического движка приводит к замедлению производительности по мере роста количества дисков и обнаружения коллизий, как правило, неэффективно.

Есть ли простой способ оптимизировать двигатель для такого рода вещей? Если нет, то лучше ли было бы просто выключить двигатель и написать что-нибудь свое? (Цепляясь за соломинку, но :) Есть ли хорошие ресурсы или примеры того, как это сделать?

Аутио
источник

Ответы:

13

Да, использование физического движка для этого было бы немного излишним. Я предлагаю вам реализовать алгоритм флокирования. Основы которых:

  • Разлука: держаться подальше, чтобы избежать скопления местных обитателей флота

  • Выравнивание: Направляйтесь к среднему курсу местных флокматов

  • Сплоченность: держитесь, чтобы двигаться к среднему положению местных обитателей

Вы можете увидеть это в действии здесь и получить некоторые подробности о его реализации . Вы сделаете небольшую настройку, включив применение силы к указателю мыши.

MichaelHouse
источник
1
Вы можете использовать виртуальную динамическую сетку или другое пространственное разделение, чтобы сделать флокирование эффективным, если у вас много boids, которые вы также не можете обработать наивно. Множество способов оптимизации.
Шон Мидлдитч