第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何更改對象的碰撞過濾器,使其不再與 MouseConstraint (MatterJS) 交互

如何更改對象的碰撞過濾器,使其不再與 MouseConstraint (MatterJS) 交互

守著一只汪 2023-07-29 11:11:21
我正在制作Slingshot演示。問題是,在發(fā)射巖石后,仍然可以單擊并拖動它,我想禁用它。我在巖石上添加了一個(gè)過濾器:var rockOptions = {? density: 0.004,? restitution: 0.75,? collisionFilter: { mask: SOLID, category: NEXTBALL }};以及鼠標(biāo)約束:var mouse = Mouse.create(render.canvas),? mouseConstraint = MouseConstraint.create(engine, {? ? mouse: mouse,? ? collisionFilter: { category: NEXTBALL },? ? constraint: {? ? ? stiffness: 0.2,? ? ? render: {? ? ? ? visible: true? ? ? }? ? }? });然后在單擊事件中我嘗試更改該過濾器,因此它不應(yīng)再與鼠標(biāo)類別匹配:Events.on(engine, "afterUpdate", function () {? if (? ? mouseConstraint.mouse.button === -1 &&? ? (rock.position.x > shootPosition.x + 20 ||? ? ? rock.position.y < shootPosition.y - 20)? ) {? ? Composite.remove(engine.world, elastic);? ? rock.collisionFilter = {category: SOLID, mask: SOLID};? }});但它仍然是可拖動的。我猜問題是我如何更改巖石上的過濾器,但我在文檔中沒有看到任何建議更改它的方法。我不認(rèn)為這是因?yàn)槲以O(shè)置的類別,但在這里它們只是為了以防萬一(實(shí)體和圖像的確實(shí)有效,球不會與圖像的碰撞:const SOLID = 0x0001;const IMAGE = 0x0002;const NEXTBALL = 0x0003;幫我讓巖石不再可點(diǎn)擊
查看完整描述

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 交互。

查看完整回答
反對 回復(fù) 2023-07-29
?
拉風(fēng)的咖菲貓

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;


查看完整回答
反對 回復(fù) 2023-07-29
  • 2 回答
  • 0 關(guān)注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號