SKPhysicsBody 对象碰撞未对齐

SKPhysicsBody objects collisions are not aligned

我有一个播放器。他必须跳过一些街区。

但是,SKPhysicsBody(rectangleOfSize: ... ) 似乎没有正确对齐。当角色击中方块的上半部分时,它只是穿过而他不能从下方穿过,因为它与不可见的 SKPhysicsBody.

相撞

根据我放置锚点的方式,有时甚至会发生物理体在它的左侧或右侧 SKSpriteNode

我的积木代码:

    self.smallBlock.anchorPoint = CGPointMake(0.5, 0.5)
    self.smallBlock.position = CGPointMake(CGRectGetMaxX(self.frame) + self.smallBlock.size.width, CGRectGetMinY(self.frame) + self.runningBar.size.height * 2)

    self.smallBlock.physicsBody = SKPhysicsBody(rectangleOfSize: self.smallBlock.size)
    self.smallBlock.physicsBody?.dynamic = false
    self.smallBlock.physicsBody?.categoryBitMask = colliderType.Block.rawValue
    self.smallBlock.physicsBody?.contactTestBitMask = colliderType.Character.rawValue
    self.smallBlock.physicsBody?.collisionBitMask = colliderType.Character.rawValue
    self.smallBlock.physicsBody?.usesPreciseCollisionDetection = true

    self.addChild(self.smallBlock)

    self.character.anchorPoint = CGPointMake(0, 0.25)
    self.character.position = CGPointMake(CGRectGetMinX(self.frame) - self.character.size.width, CGRectGetMinY(self.frame) + self.character.size.height)
    self.initPosX = CGRectGetMinX(self.frame) + (self.character.size.width * 1.25)

角色代码

    self.character.anchorPoint = CGPointMake(0, 0.25)
    self.character.position = CGPointMake(CGRectGetMinX(self.frame) - self.character.size.width, CGRectGetMinY(self.frame) + self.character.size.height)
    self.initPosX = CGRectGetMinX(self.frame) + (self.character.size.width * 1.25)

    self.character.physicsBody = SKPhysicsBody(rectangleOfSize: self.character.size)
    self.character.physicsBody?.affectedByGravity = true
    self.character.physicsBody?.categoryBitMask = colliderType.Character.rawValue
    self.character.physicsBody?.contactTestBitMask = colliderType.Block.rawValue
    self.character.physicsBody?.collisionBitMask = colliderType.Block.rawValue
    self.character.physicsBody?.usesPreciseCollisionDetection = true
    self.character.physicsBody?.affectedByGravity = true
    self.character.physicsBody?.allowsRotation = false

    self.addChild(self.character)

解决方案:

我已将 skView.showsPhysics = true 添加到我的视图控制器。当您 运行 模拟器中的应用程序时,它将勾勒出每个对象的轮廓,如图所示 here

事实证明,设置自定义锚点会弄乱 rectangleOfSize 位置。