SKReferenceNode缩放后,Swift碰撞无效

时间:2016-08-02 23:53:27

标签: ios swift xcode sprite-kit

我有一个奇怪的问题,我的SKReferenceNode在放大后没有正确碰撞。它在中心很好地碰撞,但它忽略了边缘上的碰撞和接触。

Here is the first photo of the scene。 SKReferenceNode显着放大,如this照片所示,不会在边缘上正确碰撞。 PhysicsBody似乎是正确的(打开showPhysics),但球拒绝碰撞。

SKReferenceNode正在使用alpha碰撞遮罩,因为我需要在将来将其更改为更大的精灵来制作动画等。此外,非缩放对象完全正常。最后,在球与中心碰撞后,该中心确实起作用,并且块被重置,碰撞再次开始按预期工作。修复它的代码可能在重置函数中,但我在加载关卡之前重置了所有内容,所以这没有意义。这是我的重置代码的一部分:

func reset() {
    physicsWorld.gravity = CGVectorMake(0, -9.8)
    for grav in gravityBlock {
        grav.reset()
    }

    gravity = -9.8

    //Resets blocks
    for blocks in destroyedBlocks { //the blocks are stored in destroyedBlocks when collided with
        blocks.reset()
    }

    destroyedBlocks = []

    /*Irrelevant code removed*/
    }

这是我的blocks.reset()函数:

    override func reset() {
    super.reset()

    self.physicsBody?.categoryBitMask = 1
    removeAllActions()

    self.texture = self.text
    shadow.hidden = false

    self.alpha = 0
    shadow.alpha = 0

    let appear = SKAction(named: "Appear")!
    self.runAction(appear)
    shadow.runAction(SKAction.fadeInWithDuration(0.25))
}

这是super.reset()

    func reset() {
    self.hidden = false
    state = .NotBroken
}

非常感谢!

1 个答案:

答案 0 :(得分:0)

当你缩放精灵时,你只是改变了它的视觉表现。物理机构保持不变。这就是为什么你得到这个"奇怪的"在碰撞期间。

您可以看到在场景中显示物理用途,只需打开GameViewController并添加此行

skView.showsPhysics = true

viewDidLoad内,就在这一行之后

skView.showsNodeCount = true

然后再次运行您的游戏,现在将突出显示物理边界。