如何通过id检索获取Matter.js中的矩形对象
Matter.js 通过ID检索Body对象的实现方法
Matter.js 没有提供内置的直接通过ID查询对应Body对象的API,你可以通过以下两种方式实现需求:
方法1:遍历世界内所有Body匹配(适合小规模场景)
调用Matter.Composite.allBodies获取当前物理世界内的所有Body对象,再过滤匹配目标ID即可,示例代码如下:
/** * 根据ID查询对应Body对象 * @param {Matter.Engine} engine Matter.js 引擎实例 * @param {number} targetId 目标Body的ID值 * @returns {Matter.Body|undefined} 匹配到的Body对象,未匹配到返回undefined */ function getBodyById(engine, targetId) { return Matter.Composite.allBodies(engine.world).find(body => body.id === targetId); } // 调用示例:查询ID为5的矩形对象 const targetRect = getBodyById(yourEngineInstance, 5);
方法2:自建ID映射表(适合大规模、高频检索场景)
如果你的物理世界内Body数量较多、检索频率高,遍历的性能开销较大,可以自行维护一个ID到Body的映射表,检索时直接取值即可,示例代码如下:
// 维护ID-Body映射表 const bodyIdMap = new Map(); // 创建Body时存入映射表 const rect = Matter.Bodies.rectangle(200, 200, 60, 60); bodyIdMap.set(rect.id, rect); // 把Body添加到物理世界 Matter.Composite.add(engine.world, rect); // 检索示例:直接取ID为5的对象 const targetRect = bodyIdMap.get(5);
补充说明:Matter.js 自动为每个Body分配的ID是全局唯一的自增数值,不会出现重复,上述两种匹配方式都不会出现冲突问题。
内容的提问来源于stack exchange,提问作者Ren Lowsphere
相关产品推荐
相关产品推荐

