I was handling that thing in a Castlevania style : layouts were filled with rectangles (tiled backgrounds that I named Zones) of different sizes which would have an influence on the camera scrolling.
On collision with one of these rectangles, the Camera Global Variable would change to fit that Zone's UID (you have to make sure your player can't collide into several zones at once by spacing them, for instance, I had 16 pixels between each zones). Once that's set, another event would go :
"If Camera Global Variable=Zone.UID"
-->"Set scrolling X to Clamp(Player.X, Zone.X+[half of your resolution's width to ensure that you don't see the empty space], Zone.X+Zone.Width-[half of your resolution's width]. For the Y coordinate, just change X to Y and Width to Height.
Now with that out of the way, I would have spawners everywhere I'd want enemies to appear (With a Text variable to decide what enemy spawns, a Zone variable that would be set to the UID of the Zone they're overlapping on start of layout, along with a few others, to have enemies behave differently for example).
On collision with a Zone, a function would be called to have spawners do their thing : spawn enemies (which would also be given a Zone variable, set to the Spawner's own Z.V., when created) and destroy spawned enemies whose Z.V. isn't equal to the global variable anymore, if you avoided them or ran away for example.
I'll try uploading a .capx if it's too confusing to read.