尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

3 行代码加载你的第一张瓦片地图:flame_tiled 实战笔记

3 行代码加载你的第一张瓦片地图:flame_tiled 实战笔记 3 行代码加载你的第一张瓦片地图flame_tiled 实战笔记【免费下载链接】flameA Flutter based game engine.项目地址: https://gitcode.com/GitHub_Trending/fl/flame屏幕上那张在地牢格子里拼出来的 16×16 瓦片地图已经摆进游戏画面镜头缓缓横移对象层里的金币逐帧翻转。下面用 Flame 引擎的 flame_tiled 桥接包从 3 行加载代码开始把一张 Tiled 地图做进游戏里。 先跑起来先在pubspec.yaml加一行flame_tiled依赖版本以仓库 pubspec 为准把.tmx地图和瓦片图放进assets并在flutter: assets:里声明。然后final map await TiledComponent.load( assets/tiles/map.tmx, // Tiled 导出的地图文件 Vector2.all(16), // 每个瓦片 16×16 像素 ); world.add(map); // 挂进游戏整张地图立刻出现在屏幕上第一行把 TMX 解析成可渲染的组件第二行把它放进场景树。跑通之后你会发现相机、金币这些活的东西其实都可以从地图里读出来。官方示例的运行效果瓦片地图 横移相机 对象层金币动画 拆给你看TMX 文件Tiled 编辑器导出的 XML像一张图纸记录瓦片怎么摆、分几层、对象放哪。瓦片集Tileset把它想成一张贴纸墙游戏只取其中一格反复用所以几百格地图也只存一张小图。图层Layer一张地图是一摞透明胶片背景、前景、碰撞各自独立用getLayerT按名字取走任意一层。对象层地图上的地址簿记着出生点、金币坐标运行时读坐标就能生成组件。Tiled 编辑器分层、对象标注、瓦片集都在这里编辑导出即 TMX 玩起来把一列瓦片抠出来晃一晃。TileStack 支持对某一列瓦片加位置类特效地图本体不受影响final stack map.tileMap.tileStack(4, 0, named: {floor_under}); // 按坐标瓦片名取一列 stack.add( SequenceEffect([ MoveEffect.by(Vector2(5, 0), NoiseEffectController(duration: 1, frequency: 20)), // 噪声抖动 MoveEffect.by(Vector2.zero(), LinearEffectController(2)), // 复位 ], repeatCount: 3) ..onComplete () stack.removeFromParent(), // 抖完 3 轮自动移除 ); map.add(stack);效果是一列地面左右震 3 轮再归位——水下地板传送门预警这类微交互就靠它。TileStack 单列移动后的渲染效果让金币长在对象层上。官方示例的玩法是读对象层坐标逐个摆组件final coinsLayer map.tileMap.getLayerObjectGroup(AnimatedCoins); for (final obj in coinsLayer!.objects) { world.add(MyCoin()..position Vector2(obj.x, obj.y)); }设计师以后改关卡只动 Tiled 里的标记代码一行不用改。⚡ 大地图不卡如果你的地图有多个瓦片集、Web 端出现掉批次 → 默认图集上限不够调大final map await TiledComponent.load( map.tmx, Vector2.all(32), atlasMaxX: 8192, // 图集宽度上限Web 默认 4096 ignoreFlip: true, // 大纹理含翻转瓦片会掉帧用不到翻转就关掉 );如果切了多张大地图后内存只涨不降 → 缓存有两层两张都要清见下条踩坑。 踩坑备忘Q瓦片之间出现发丝细的缝隙A浮点精度导致把组件整体挪半像素吸附一下即可。TiledComponent(tileMap: tileMap, position: Vector2(0.5, 0.5));Q切换地图后内存不释放A图像缓存分两层换成完全不同的瓦片集时两层都要清。Flame.images.clearCache(); TiledAtlas.clearCache(); // 别漏了图集这一层QgetLayer总是返回 nullA名字必须和 Tiled 里一模一样包括大小写别靠记忆拼。final layer map.tileMap.getLayerObjectGroup(collision); // 与 Tiled 图层名一致往哪走想看完整演示相机横移 对象层金币动画packages/flame_tiled/example/图层类型、透明度、视差等支持的完整清单doc/bridge_packages/flame_tiled/layers.md想让地图参与物理碰撞接上物理桥接包packages/flame_forge2d/【免费下载链接】flameA Flutter based game engine.项目地址: https://gitcode.com/GitHub_Trending/fl/flame创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表