2 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
防止鼠標(biāo)操縱已經(jīng)射擊的巖石可以通過 // <---
下面代碼片段中所示的兩個(gè)簡單更改來實(shí)現(xiàn)。
rock.collisionFilter.category = 0b10;
將剛剛發(fā)射的任何巖石的類別設(shè)置為 2,然后創(chuàng)建新的巖石并rock
用要發(fā)射的下一塊巖石覆蓋變量。collisionFilter: {mask: 0b1},
將鼠標(biāo)約束上的遮罩設(shè)置為僅與類別 1 中的實(shí)體交互。由于禁用的巖石屬于類別 2 (?0b10
),因此鼠標(biāo)將不再與它們交互。
這是上下文中的代碼。我使用這個(gè)提交以防萬一發(fā)生任何變化。
Events.on(engine, 'afterUpdate', function() {
? if (mouseConstraint.mouse.button === -1 && (rock.position.x > 190 || rock.position.y < 430)) {
? ? rock.collisionFilter.category = 0b10; // <---
? ? rock = Bodies.polygon(170, 450, 7, 20, rockOptions);
? ? Composite.add(engine.world, rock);
? ? elastic.bodyB = rock;
? }
});
// add mouse control
var mouse = Mouse.create(render.canvas),
? mouseConstraint = MouseConstraint.create(engine, {
? ? mouse: mouse,
? ? collisionFilter: {mask: 0b1}, // <---
? ? constraint: {
? ? ? stiffness: 0.2,
? ? ? render: {
? ? ? ? visible: false
? ? ? }
? ? }
? });
默認(rèn)mask
值為 32 位全部設(shè)置,或4294967295
/?0xffffffff
。您可能希望更精確,并僅禁用鼠標(biāo)約束的第二位:0xfffffffd
。這使得鼠標(biāo)可以與除類別 2 之外的任何對象交互,而不僅僅是與類別 1 交互。

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
經(jīng)過多次重新開始、調(diào)整和檢查不同的演示后,終于弄清楚了。
首先,類別的位掩碼必須是 2 的冪,因此NEXTBALL
必須是0x0004
而不是0x0003
。
接下來,您不能將整個(gè)collisionFilter
對象設(shè)置在已建立的實(shí)體上,否則會破壞碰撞。相反,你必須使用rock.collisionFilter.category = NEXTBALL
;
添加回答
舉報(bào)