我需要帮助来绘制从平铺(.tmx)创建的Map
版本信息
flame: 1.5.0
flame_tiled: 1.9.0
我想要的是先画背景,然后是运动员,最后是前景。
我现在有4层,
- 前景(平铺层)(顶层)。
- 繁殖(对象层)。
- shell (瓷砖层)。
- 平台(平铺层)。
已经工作与绘图背景和播放器和前景与此代码。但我需要保存Map数据2文件。
final currentMap = await TiledComponent.load(
'$mapName.tmx',
Vector2.all(16),
);
add(currentMap);
final spawnPointObject = currentMap.tileMap.getLayer<ObjectGroup>('spawn');
for (final spawnPoint in spawnPointObject!.objects) {
final positions = Vector2(
spawnPoint.x + (spawnPoint.width / 2),
spawnPoint.y + (spawnPoint.height / 2),
);
switch (spawnPoint.class_) {
case 'player':
_player = MyPlayer(
anchor: Anchor.center,
current: 'idle',
position: positions,
size: Vector2.all(16),
name: name,
);
add(_player);
break;
}
}
final currentForeground = await TiledComponent.load(
'${mapName}_foreground.tmx',
Vector2.all(16),
);
add(currentForeground);
我可以从对象层绘制,但采取这么多的情况下将很难更新后..所以有没有办法只绘制1层与火焰_平铺。?
这是样本图像,我希望我的球员,以提请背后的屋顶时,发挥。image
- already try with layer object and drawing base on object id, one by one. but take so much effort.
- try with 2 save file, but still hard to maintain (used now)
1条答案
按热度按时间k5ifujac1#
我个人对这个问题的结论是flame_tiled不够灵活,所以它能为你做的最好的事情就是解析Map文件。如果你需要一个灵活的渲染,你可以自己实现它,因为flame_tiled把所有的东西都渲染成一个大的平面sprite批。
也许你可以通过渲染RenderableTiledMap两次来做一个快速的修改。在第一次渲染时,你禁用了“roof”Map的图层(参见“setLayerVisibility”函数),并将所有内容渲染为图片/图像,并将其 Package 为具有“地面”优先级的组件。然后启用“屋顶”层并禁用“地面”,然后对另一图片/图像进行相同的渲染,并将其 Package 到具有“屋顶”优先级的另一组件中。
为了解决这个问题,我提出了两个解决方案,一个比较简单,另一个比较复杂,目前还在开发/调试阶段:
抱歉,这样的“longread”的答案=)