我有一个动态物理机构,称为“bo”,一个称为“leftBumper”。当它们碰撞时,我希望保险杠保持在原位,并且我希望Bo从保险杠弹起。

相反,当它们碰撞时,Bo继续移动,保险杠从屏幕上飞走。看来它们都是动态的。这是我的代码:

BO:

    bo.physicsBody?.dynamic = true
    bo.physicsBody?.categoryBitMask = boCategory // 3
    bo.physicsBody?.contactTestBitMask = chainsawCategory // 4
    bo.physicsBody?.collisionBitMask = noneCategory & bumperCategory
    addChild(bo)

保险杠:
 leftBumper.physicsBody?.dynamic = false
    leftBumper.physicsBody = SKPhysicsBody(rectangleOfSize: leftBumper.size)
    leftBumper.physicsBody?.categoryBitMask = bumperCategory
    leftBumper.physicsBody?.collisionBitMask = boCategory

    leftBumper.zPosition = 10

    addChild(leftBumper)

最佳答案

这是行不通的:

leftBumper.physicsBody?.dynamic = false
leftBumper.physicsBody = SKPhysicsBody(rectangleOfSize: leftBumper.size)

您可以在PhysicsBody为零(或之前的实体)时设置标志,然后创建该实体的新实例,默认情况下会将动态标志设置为true。首先,创建实体,然后更改其属性。

其次,在设置位掩码之前,请尝试使其在没有它们的情况下工作。您应该检查documentation它们如何工作。位掩码经常被误解。

在这种情况下,bo和保险杠都有自己的类别,但它们不会生成接触事件,因为bo的接触位掩码设置为保险杠根本不使用的链锯类别。如果要让它们接触和碰撞,则bo需要在其接触和碰撞位掩码中具有保险杠类别,而保险杠需要在其接触和碰撞位掩码中具有bo类别。

关于ios - 为什么我的动态物理 body 穿过我的静态物理 body ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26552419/

10-12 01:49