I'm impressed that the tilemap renders so fast with 1x1 tiles. This has potential, and I do enjoy optimizing.
I took your forth capx and added a text object to store the average time it takes the function to clear a circle.
https://www.dropbox.com/s/mwjxctu4vhx7w ... .capx?dl=0
So now I have something to compare against. For an initial test I went for circle clearing with as few events as possible. The algorithm I used is just the graph of a circle. Bresenham's algorithm probably will be faster but I haven't fiddled with your events with the same stuff I did with mine.
https://www.dropbox.com/s/t8mizv3e6hugt ... .capx?dl=0
Compared to the two "simple.capx" is about 3 times faster. Here are some things I did and my reasoning. Note that I wasn't profiling as I went along so I'm unsure of the boost each gave, if any.
* I changed the function so x,y and radius are passed as parameters. This to eliminate the need to re-pick the bullet in the function. Actually this probably was a negligible change. It was more of a style preference.
* I used "erase tile range" instead of "erase tile". This likely was the biggest boost since it eliminated a loop level since we can just erase spans of tiles at a time.
* I didn't use the "Tilemap.PositionToTile" functions since with 1x1 tiles pixel position is the same as tile position. A little flexibility is lost doing this since the tilemap object has to be at position 0,0.
That's about it. Next I'll have tinker with your events to see avoiding a sqrt() with some more events perform better.