【问题标题】:Swift Collision Not Working After SKReferenceNode ScaleSKReferenceNode 缩放后 Swift 碰撞不起作用
【发布时间】:2016-08-03 08:18:12
【问题描述】:

我有一个奇怪的问题,我的 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
}

非常感谢!

【问题讨论】:

    标签: ios swift xcode sprite-kit


    【解决方案1】:

    当你缩放精灵时,你只是在改变它的视觉表现。物理体保持不变。这就是为什么在碰撞过程中你会感到“奇怪”。

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

    skView.showsPhysics = true
    

    viewDidLoad 内,就在这一行之后

    skView.showsNodeCount = true
    

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

    【讨论】:

    • 我实际上已经尝试过了,here 是图片的链接。 physicsBody 覆盖了整个方块,但它仍然没有碰撞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多