whoa, thank you guys for the fast response!
BTW I'm trying to get the same effect with my framework here, thing is....I only load map on demand (when the player collides with a trigger, and that trigger call change_map() ). How am I going to do that? I can pre-load all maps but that might consume enormous amount of memory. So if you got any ideas, please share here....thanks!! 
If you got your maps in a grid (as many old console RPGs did) you can load all surrounding maps in a background thread,
Thus if you got zones like this:
01,02,03,04,05
06,07,08,09,10
11,12,13,14,15
16,17,18,19,20
21,22,23,24,25
and the player is in zone 12 you also load 11, 07, 17 and 13, (if he can exit diagonally you have to load those aswell) in a background thread.
If the player then moves into zone 07 you toss out zone 17,11 and 13 and load 02,06 and 08 instead, This means you always have the maps the player can reasonably enter in memory before they are needed and thus you get no load times at a fairly reasonable memory cost.
In your case since you have triggers what you should do is:
1) at game start you need a loading screen anyway, load the zone the player is in and then let him start playing.
2) Check all map change triggers in the current zone and load the zones they lead to in a background thread.
If the player hits a mapchange trigger you check if the map is loaded, if it is you simply change map immediatly, do step 2 to start loading the new zones you need and toss out the ones you no longer need.
This way you should only need a loading screen if for some reason the player is able to move through zones faster than you can load them.