Correct, right now adding invisible actors with a fixed collision type on top of the TileMap is probably your quickest option to get full collision support with minimal effort.
Depending on how far you want to go this could be implemented as a full feature in the current Excalibur physics systems.
To interact with the current physics system, you need to use a physics Body and/or CollisionArea.
* The body is used for calculating physical position, motion, rotation, and, acceleration before/during/after a collision
* the collision area defines the collidable geometry and how to know if 2 geoms are colliding.
The approach I was planning on taking to add full featured collision support to TileMaps to excalibur:
* Carve a TileMap into a set of convex polygons and create a set of collision areas for them (our collision algorithm SAT only works on convex shapes), technically each tile is a rectangle so a first pass at implementation may just create collision area for each tile, it may be possible to then merge those.
* Refactor Body to not be coupled with actor, but to instead allow interfaces around these properties so that physics Body can be applied to anything
* Refactor Body to allow multiple CollisionAreas at a time or make a meta CollisionArea that is composed other collision areas (THIS WOULD BE A HUGE WIN), this will require a change in CollisionContact & DynamicTreeCollisionBroadphase to support treating multiple areas as 1 collidable object
* If CollisionPairs and CollisonContacts are generated correctly, it should just work.
Apologies on this feature gap! Let me know if there is an issue with the workaround above, or if you want to tackle this feature.
Erik