特点
- 将分块地图层合并到组件中,以单个图像的形式渲染。这可以提高大地图的性能
- 使用“类型”参数作为键,将每个瓦片映射到dart类或处理函数
- 从瓦片中提取动画,允许渲染带有动画瓦片的地形。
- 将相同类型的动画瓦片合并到一个大型SpriteAnimation组件中。这可以提高大型动画地块的性能。
用法
合并静态图层
而不是像往常一样渲染瓦片地图
final mapComponent = await TiledComponent.load('map.tmx', Vector2.all(16));
add(mapComponent);
将其转换为特殊组件
final mapComponent = await TiledComponent.load('map.tmx', Vector2.all(16));
final imageCompiler = ImageBatchCompiler();
final ground = await imageCompiler.compileMapLayer(tileMap: mapComponent.tileMap, layerNames: ['ground']);
ground.priority = RenderPriority.ground.priority;
add(ground);
layerNames变量允许您指定要转换的图层。当不同的地图图层应具有不同的优先级时,这很有用。
将瓦片映射到组件
如果您需要单独处理每个瓦片,请使用TileProcessor
final mapComponent = await TiledComponent.load('map.tmx', Vector2.all(16));
TileProcessor.processTileType(
tileMap: mapComponent.tileMap,
processorByType: <String, TileProcessorFunc>{
'water': ((tile, position, size) {
/// Create here a new object, save tile data or process it
/// a way your game logics need
}),
},
layersToLoad: [
'water',
]);
TileProcessorFunc的第一个参数是TileProcessor类的实例。
提取瓦片数据
在TileProcessorFunc中使用TileProcessor的实例来访问所有必要的数据
tile.getSprite()以获取瓦片的Sprite对象tile.getSpriteAnimation()以获取瓦片的SpriteAnimation对象。它带来了瓦片动画地图的支持——一个缺失但强烈需要的功能tile.getCollisionRect()允许加载RectangleHitbox,如果Tiled编辑器中指定了碰撞矩形。该库仅支持矩形形状。
渲染大型动画瓦片字段
将多个小型动画瓦片合并成一个大瓦片比为每个瓦片渲染相同的动画更划算。这可以通过结合TileProcessor.processTileType和AnimationBatchCompiler来实现
final mapComponent = await TiledComponent.load('map.tmx', Vector2.all(16));
final animationCompiler = AnimationBatchCompiler();
TileProcessor.processTileType(
tileMap: tiledComponent.tileMap,
processorByType: <String, TileProcessorFunc>{
'water': ((tile, position, size) {
animationCompiler.addTile(position, tile);
}),
},
layersToLoad: [
'water',
]);
final animatedWater = await animationCompiler.compile();
animatedWater.priority = RenderPriority.water.priority;
add(animatedWater);