Regarding the grid method:
You don't have to clear the grid each frame. Another way is to simply remove objects from a grid square when they move out of it or are eliminated and then to add objects to a grid square when they are created or move across a grid boundary.
You don't have to clear the grid each frame. Another way is to simply remove objects from a grid square when they move out of it or are eliminated and then to add objects to a grid square when they are created or move across a grid boundary.