So, the FlxG collide method knows how to tell which tiles in a tilemap are walls or not walls, but the overlap method does not. If you write a simple custom collision with the overlap method and tell it to .separate()
, your sprite will collide with every tile in the map, not just the walls.
This is expected behavior, as there’s a note in the FlxG documentation that says:
this takes the entire area of FlxTilemaps into account (including “empty” tiles). Use FlxTilemap#overlaps() if you don’t want that.
On the other hand, the documentation for FlxTilemaps.overlaps() says:
Checks to see if some FlxObject overlaps this FlxObject object in world space. If the group has a LOT of things in it, it might be faster to use FlxG.overlaps().
In my scenario I have a lot of tilemaps and just one object to collide with them, the player. The way this is written, I’m thinking I have to call this method for EACH MAP, i.e. map1.overlaps(player)
, map2.overlaps(player)
, etc. Whereas with the FlxG method I can pass it the entire FlxGroup of maps as one parameter and the player as another parameter, which seems way better. I guess I could write a function with a loop that iterates through each map doing this one by one, and then call that in update()
, but I’m getting the impression that it might be really inefficient.
What’s the best approach here? Am I missing something obvious?
Update: Got it working for now, but I suspect it’s very inefficient!
So, for some context, I have a bunch of tilemaps right up against each other forming one large continuous world map made up of many small regions. I wanted the player to have random encounters that were specific to the region they’re crossing. In examples online, I saw that people will write custom collision behavior with
FlxG.overlap()
instead of the defaultFlxG.collide()
because they want different kinds of collisions to behave differently. I thought I could use that to fold my region-specific-encounters stuff into the collision-detection stuff. My thought was, It’s got to be more efficient to only check the player’s location once per update, rather than multiple times, right? Only, I never figured out how to do it…So instead, every update I’m using the default collide method, and also writing the player’s location to a singleton. When an encounter procs, another function uses that location to pick an appropriate encounter. And it works! But I’m checking the same thing twice per update… Surely that’s unnecessary right?