JavaScript,Matter.js:禁用一个主体的冲突

时间:2015-09-20 20:13:36

标签: javascript matterjs

正如标题中已经提到的,我正在寻找一种方法来禁用Matter.js中身体的每次碰撞。它仍然可以与Constraints链接,并且应该有可能在一段时间后再次启用碰撞。有没有办法做到这一点?关于它的难点在于,对象不应该与任何其他对象发生碰撞,但所有其他对象应该相互碰撞。

3 个答案:

答案 0 :(得分:6)

您可以使用collision filters执行此操作。您可以在collision filtering demosource code中看到它们的示例。

他们的工作方式类似于他们在Box2d中所做的工作,因为有一个很好的article可以用来了解它们的工作原理。

答案 1 :(得分:2)

您可以使用碰撞过滤器,如下所示:

Function SelectedShapesToArray(ShRange As ShapeRange) As Variant

    Dim aTemparray() As Shape
    ReDim aTemparray(1 To ShRange.Count)
    Dim x As Long

    For x = 1 To ShRange.Count
        Set aTemparray(x) = ShRange(x)
    Next

    SelectedShapesToArray = aTemparray

End Function

Sub Test()

    Dim x As Long
    Dim ShArray() As Shape

    ShArray = SelectedShapesToArray(ActiveWindow.Selection.ShapeRange)

    ' Test: do we have all the shapes we expected?
    For x = LBound(ShArray) To UBound(ShArray)
        Debug.Print ShArray(x).Name
    Next

    ' Here you could sort ShArray on ShArray(x).top

End Sub

从文档中

“如果两个实体的冲突过滤器.group的值相同且非零,则它们将始终碰撞,如果该值为正,则它们将始终发生碰撞,如果该值为负,则它们将永远不会发生碰撞。”

“使用类别/掩码规则,如果两个实体A和B各自在其掩码中包含对方的类别,则它们会发生冲突,即(categoryA&maskB)!== 0和(categoryB&maskA)!== 0都为真。”

答案 2 :(得分:1)

Matter.IBodyDefinition.isSensor

为了禁用Body的物理碰撞。 Body仍然可以用作碰撞传感器。