You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:15:02