TiledMap
has tilesetArray
, from where one can read different tilesets, including external, but if several tilesets are wanted in one layer, one needs to merge them. I have some big old snippet for this:
var tileMap: TiledMap = new TiledMap(Xml.parse(tmxFile), "assets/data/");
//mapColliders = new FlxGroup();
var tileSize: FlxPoint = FlxPoint.get(tileMap.tileWidth, tileMap.tileHeight);
// merge tilesets into one
var tilesetTileFrames: Array<FlxTileFrames> = new Array<FlxTileFrames>();
var tilesetProperties: Map<Int, TiledPropertySet> = new Map<Int, TiledPropertySet>();
var removeTilesets: Bool = false;
var firstGid: Int = tileMap.tilesetArray[0].firstGID;
for (tileset in tileMap.tilesetArray)
{
//trace(tileset.properties.keys);
if (tileset.properties.keys.exists("remove"))
removeTilesets = true;
if (!removeTilesets)
{
var width = tileset.numCols * tileset.tileWidth;
var height = tileset.numRows * tileset.tileHeight;
tilesetTileFrames.push(FlxTileFrames.fromRectangle(Resource.LoadBitmap("assets/data/" + tileset.imageSource, width, height, 0xAA8A5A46, false), tileSize));
//tilesetTileFrames.push(Resource.LoadBitmapInAtlas("assets/data/" + tileset.imageSource, width, height, 0xAA8A5A46, atlas));
//trace("tileset.tileProps.length: " + tileset.tileProps.length);
}
for (i in 0...tileset.tileProps.length)
{
var propertySet = tileset.getProperties(i);
if (propertySet != null)
{
tilesetProperties[i + tileset.firstGID] = propertySet;
//trace(i);
}
}
}
var tileSpacing: FlxPoint = FlxPoint.get(0, 0);
//var tileBorder: FlxPoint = FlxPoint.get(2, 2);
var tileBorder: FlxPoint = FlxPoint.get(0, 0);
var mergedTileset = FlxTileFrames.combineTileFrames(tilesetTileFrames/*, tileSpacing, tileBorder*/);
var node: FlxNode = atlas.addNode(mergedTileset.parent.bitmap, "combined tiles");
var combinedTileSize: FlxPoint = new FlxPoint(tileSize.x /*+ tileBorder.x * 2*/, tileSize.y /*+ tileBorder.y * 2*/);
var combinedTileFramesFromAtlas: FlxTileFrames = node.getTileFrames(combinedTileSize/*, tileSpacing, tileBorder*/);
for (i in 0...tilesetTileFrames.length)
{
FlxG.bitmap.remove(tilesetTileFrames[i].parent);
tilesetTileFrames[i] = null;
}
FlxG.bitmap.remove(mergedTileset.parent);
mergedTileset = combinedTileFramesFromAtlas;
tileSize.put();
tileSpacing.put();
tileBorder.put();
for (tileset in tileMap.tilesetArray)
{
FlxG.bitmap.removeByKey("assets/data/" + tileset.imageSource);
}