Не буду говорить, что есть оптимизация коллизий, что мир можно делить на квады и что такое широкая фаза.
Скажу лишь про то, что все выстрелы (не могу назвать системой частиц) — можно рисовать не через spritebatch, а напрямую работая с одним примитивом и отрисовывая его с разными матрицами.
Я когда использовал регулярную сеть делал сторону квадрата равной степени двойки, тогда если сторона=2^n, то получить ячейку в которой находится объект можно используя побитовые сдвиги
Xc=Xr>>n
Yc=Yr>>n
, где Xc,Yc — координаты ячейки, Xr,Yr — реальные координаты объекта. В итоге избавляетмся от делений, и получаем очень быстрое определение столкновений.
Размещаем до 2000 юнитов (XNA)