当前位置: 首页 > news >正文

完整教程:Flutter 中, Flame + flame_forge2d世界坐标和屏幕坐标对齐

一、核心概念(先对齐心智模型)

  • Forge2D 的单位是米(m),你的刚体 Body/Fixture 的位置与尺寸都是米。
  • Flame 的渲染单位是逻辑像素(px)SpriteComponent/PositionComponentsize/position 默认用像素。
  • 需要一个**像素/米比例(PPM, pixels-per-meter)**把两者连起来,例如 PPM = 10 表示 1 米 = 10 像素。

只要你在“计算、事件输入、渲染尺寸”三个点都用同一套 PPM,就不会错位。


二、固定写法(推荐模板)

1)定义全局比例

const double PPM = 10.0; // 1m = 10px,可按需求调整
Vector2 worldToScreen(Vector2 w) => w * PPM;
Vector2 screenToWorld(Vector2 s) => s / PPM;

2)摄像机与坐标转换

  • 用户触摸/输入要落到世界坐标

    
    bool onTapDown(TapDownInfo info) {
    
    final screenPos = info.eventPosition.global;          // 屏幕像素
    final worldPos  = camera.viewfinder.screenToWorld(screenPos);
    // worldPos 现在是米(配合你设定的 PPM/zoom)
    return true;
    }
  • 在代码里不要自己写一套 camera 变换同时又用 PPM,否则会“双重缩放”。
    建议:用 Flame Camera 的 screenToWorld/worldToScreen 作为最终裁判。PPM 只用于「物理 ↔ 渲染尺寸」。

3)刚体与精灵对齐

  • 刚体:用米(Forge2D)
  • 精灵:用像素(Flame)
  • 关键:渲染尺寸 = 物理尺寸(米) × PPM
class Player extends BodyComponent {

final Vector2 sizeInMeters = Vector2(1.2, 0.8); // 物理尺寸:1.2m x 0.8m
late final SpriteComponent sprite;

Future<void> onLoad() async {await super.onLoad
http://www.jsqmd.com/news/285499/

相关文章:

  • 即插即用系列 | CVPR 2025 SegMAN: Mamba与局部注意力强强联合,多尺度上下文注意力的新SOTA
  • 自行车出口美国GCC认证16 CFR 1512标准解读
  • 1.22随笔
  • AT_arc108_e [ARC108E] Random IS
  • 美国亚马逊UL产品标准检测报告要点
  • 如何高效盘点电脑文件并实现内容级搜索?文件清单盘点与文档内容深度搜索实践
  • Python 异步下载文件实战:使用 asyncio + aiohttp 实现高并发下载
  • ASTM F1989-05(R2013) 烹饪用灭火毯标准
  • wait和notify
  • 5 大用例设计笔试大题,附超详细解析!
  • 第八天|151.翻转字符串里的单词 55.右旋转字符串 459.重复的子字符串
  • 程序员棋谱之一——单例模式
  • rpc节点: synchronized (this) + 双检锁,在 race condition 的情况下分析
  • 二进制不同位数【牛客tracker 每日一题】
  • MAC 怎样加密压缩 zip 包?
  • 救命神器10个AI论文写作软件,助本科生轻松搞定毕业论文!
  • Pixels 医疗影像一站式解决方案从入门到精通
  • Linux 内存管理中的 Overcommit(过度分配)机制及OOM Killer 的处理逻辑详解
  • MySQL InnoDB Cluster升级到MySQL 8.4.x
  • LangGraph MCP Tool Calling Agent:让企业级智能体开发不再头大
  • 2026年电动刮研刀厂家推荐,提升生产效率与加工精度
  • 做自媒体3年,终于找到稳定免费图床:CloudFlare-ImgBed实测
  • Mac Mouse Fix:让几十块的普通鼠标也能拥有丝滑触控板体验
  • 数列分块入门学习笔记
  • FastScheduler:让 Python 定时任务变得优雅简单
  • HanaVerse:把本地大模型变成二次元虚拟女友,这才是我们想要的 AI
  • 2026年物业管理行业发展核心趋势解析:服务升级与价值重塑
  • 从 0 到 1 认识大模型:核心原理与价值应用指南
  • Qt国际化实战指南:使用翻译官实现多语言应用
  • 实用指南:spark的静态内存管理机制