"Matter.js body documentation"에 설명 된대로 충돌 필터링을 사용하려고합니다. 그러나, 내 프로젝트에 대한 다른 합성 개체 간의 충돌을 해제해야합니다. 따라서 동일한 합성물에있는 물체 만 충돌해야합니다. 필자는 32 개 이상의 Composites (32 개는 Matter.js가 제공하는 충돌 범주의 최대량 임)를 가질 계획입니다. 나는 이것을 어떻게 얻을 수 있을까?Matter.js가 서로 다른 합성물 간의 충돌을 차단합니다
// module aliases
var Engine = Matter.Engine,
Render = Matter.Render,
World = Matter.World,
Bodies = Matter.Bodies,
Body = Matter.Body,
Vector = Matter.Vector,
Composite = Matter.Composite,
Constraint = Matter.Constraint,
MouseConstraint = Matter.MouseConstraint;
// create an engine
var engine = Engine.create();
// create a renderer
var container = document.getElementById("container");
var canvas = document.getElementById("maincanvas");
var render = Render.create({
element: container,
canvas: canvas,
engine: engine,
options: {
height: 400,
width: 400,
wireframes: false
}
});
// This makes collision much easier to test
engine.world.gravity = {x:0, y:0};
// Add a mouseconstraint to test
var mc = MouseConstraint.create(engine, {
element: render.canvas
});
Composite.add(engine.world, mc);
var bodies1 = []
var bodies2 = []
var xpos = 30
var ypos = 30
for (var i = 0; i < 5; i++){
bodies1.push(Bodies.circle(xpos, ypos, 10, {
collisionFilter: {
group:-1
},
render: {
fillStyle: "blue"
}
})
);
xpos += 30;
}
for (var i = 0; i < 5; i++){
bodies2.push(Bodies.circle(xpos, ypos, 10, {
collisionFilter: {
group:-1
},
render: {
fillStyle: "red"
}
})
);
xpos += 30;
}
var composite1 = Composite.create();
Composite.add(composite1, bodies1);
var composite2 = Composite.create();
Composite.add(composite2, bodies2);
Composite.add(engine.world, [composite1, composite2]);
Engine.run(engine);
Render.run(render);
이렇게하면 합성물 간의 충돌을 비활성화 할 수 있지만이 또한 합성물의 '내부'충돌을 비활성화합니다. collisionFilter.category
시스템을 사용하여이 작업을 수행 할 수 있지만 32 개 이상의 복합체에서 어떻게 작동합니까?