Yes! That is exactly what I was looking for. I think I'm on the right track now.
I'm not sure if your solution is slower because it still maintains 60 fps. I monitored this on the game screen with (text (str (int (current-frame-rate))) 10 30)
On my current box I did not take an fps hit by using the big map. I'll definitely have to see how it scales.
So the next thing I need to do is write some functions so I can compose state. Going with the example in Chris Granger's talk at the 2012 Conj, I would want to take ball-x and ball-y and generalize that as the component "position" like:
(component position [x y]
:x x
:y y)
then my render would have
(defn render-ball [ent]
(letc ent [pos :position
letc is the neat macro that lets you just specify the entity once and pass in a vector of components to look up for it
It's a rough example to try to follow because he was targeting node and had to write everything in 48 hours, but I think it's a good way to write games, so I'm hoping after this weekend I'll come away with a greater understanding of Quil and the component entity system so that I could write a library for using Quil in this way.
Anyway, thanks for taking the time to write that example. I don't know how I missed the state functions, but that was exactly what I needed.