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
相关产品推荐
相关产品推荐

