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

matter.js中自定义凹形图形缺口无法显示的问题求助

解决Matter.js中带缺口形状不显示的问题

问题出在你对带孔洞(缺口)形状的顶点定义方式上:Matter.js要求带缺口的形状必须通过多个独立的顶点路径来定义(外部轮廓+内部缺口),且内部路径的顶点缠绕方向必须和外部轮廓相反(顺时针/逆时针反向),否则引擎会将所有点视为单一闭合轮廓,自动填充缺口。

修正后的代码

const logoBottom = Matter.Bodies.fromVertices(
    150,
    150,
    [
        // 外部轮廓:顺时针顺序
        [
            Matter.Vector.create(13.06, 22.53),
            Matter.Vector.create(66.94, 22.53),
            Matter.Vector.create(66.94, 69),
            Matter.Vector.create(13.06, 69),
        ],
        // 内部缺口:逆时针顺序(与外部方向相反)
        [
            Matter.Vector.create(39.03, 37.54),
            Matter.Vector.create(58.24, 37.54),
            Matter.Vector.create(48.64, 54.1),
            Matter.Vector.create(40, 69),
        ]
    ],
    { 
        isStatic: true,
        // 可选:确保渲染样式正确,避免填充异常
        render: {
            fillStyle: '#000',
            strokeStyle: '#000',
            lineWidth: 1
        },
        // 可选:防止引擎自动移除小路径或合并共线点
        removeCollinear: false,
        minimumArea: 1
    }
);

关键注意事项

  • 路径拆分:必须将外部轮廓和内部缺口拆分为两个独立的子数组,不能混在同一个数组中。
  • 缠绕方向:外部轮廓用顺时针顶点顺序,内部缺口用逆时针(反之亦可,但必须反向),Matter.js通过方向判断哪些是孔洞。
  • 顶点闭合:Matter.js会自动闭合每个路径,无需手动添加起点作为终点。
  • 渲染配置:如果仍看不到缺口,检查render.fillStyle是否设置,确保填充样式正确显示孔洞效果。

内容的提问来源于stack exchange,提问作者PixelPage

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:38:25