2017-07-19 79 views
0

因此,我在我的世界中創建了兩個球體,一個球體和一個平面。由於重力作用,球落在表面並與其碰撞。如何檢測我的球體是否碰到另一個靜態球體

我以爲我在正確的軌道上使用EventsBody.isSensor(),但我似乎無法從我的事件偵聽器得到哪些屍體已經隱藏,即屍體名稱。

sketch.js

var Engine = Matter.Engine, 
    Render = Matter.Render, 
    World = Matter.World, 
    Bodies = Matter.Bodies, 
    Events = Matter.Events; 

var engine = Engine.create(); 

var render = Render.create({ 
    element: document.body, 
    engine: engine 
}); 

var surface = Bodies.rectangle(250, 250, 400, 100, { isStatic: true }); 

var ball = Bodies.circle(200, 0, 11, { 
     density: 0.05, 
     restitution: 0.7, 
     inertia: Infinity 
    }); 

Events.on(engine, 'collisionStart', function(event) { 
    console.log('collisionStart'); 
    var pairs = event.pairs; 
    console.log(pairs); 
    }); 

World.add(engine.world, [surface, ball]); 
Engine.run(engine); 
Render.run(render); 

該事件被觸發但是沒有什麼在對變量。我究竟做錯了什麼?

另外,當我打開isSensor: true時,球看起來會穿過靜態物體。

JS小提琴:https://jsfiddle.net/qk3yLfyq/12/

+1

沒有使用過''matter.js'',但是從記錄''event''我看到''event.source.pairs''是一個包含有關主體和碰撞狀態信息的對象。那是你在找什麼? – McLemore

+0

我認爲這是,但我不知道它應該在那裏! –

+0

是的,''event.pairs''也存在,但正如你所說,它只是一個空的數組。 – McLemore

回答

1

您是在正確的道路上所得到的事件對象,並使用它,你只需要分析一些更多的信息。試試這個,例如,在後一種情況下與

Events.on(engine, 'collisionStart', function(event) { 
    event.pairs.forEach(function(obj){ 
     console.log('BodyA is static: ' + obj.bodyA.isStatic + '. BodyB is static: ' + obj.bodyB.isStatic) 
    }) 
    }); 

更換

Events.on(engine, 'collisionStart', function(event) { 
console.log('collisionStart'); 
var pairs = event.pairs; 
console.log(pairs); 
}); 

我只是從解析對象更多的信息通過該事件返回。

+0

是的,我設法做到這一點,根據我的問題的評論。然而爲什麼'event.source.pairs'已經被填充並且'event.pairs'不是? –

+0

它被填充,在我的代碼中我使用event.pairs。 Pairs是一個數組,我使用forEach函數檢查並記錄event.pairs [0]或其他bodyA.isStatic和bodyB.isStatic屬性。 – rjreed

+0

不在我的測試案例中,請參閱我的jsfiddle。 event.pairs是一個空數組。 Array(0) –

相關問題