三精灵节点碰撞

Posted

技术标签:

【中文标题】三精灵节点碰撞【英文标题】:Three sprite node collision 【发布时间】:2015-11-15 05:27:10 【问题描述】:

我有一个射击应用程序在子弹击中两个重叠节点时崩溃。我已经尝试了一切,我尝试检查身体是否为零,但它不允许我,我不知道如何让这项工作了。这是代码:

 func didBeginContact(contact: SKPhysicsContact) 
        var firstBody:SKPhysicsBody
        var secondBody:SKPhysicsBody

        if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) 
            firstBody = contact.bodyA
            secondBody = contact.bodyB

        
        else 
            firstBody = contact.bodyB
            secondBody = contact.bodyA
        

        if ((firstBody.categoryBitMask & photonCategory) != 0 && (secondBody.categoryBitMask & alientCategory) != 0)
            aliensCollideWithBullets(firstBody.node as! SKSpriteNode, alien: secondBody.node as! SKSpriteNode)
            //            firstBody.node?.removeFromParent()
            //            secondBody.node?.removeFromParent()
        



    
    func aliensCollideWithBullets(torpedo:SKSpriteNode, alien:SKSpriteNode) 

        print("hit")

        torpedo.removeFromParent()
        alien.removeFromParent()
        aliensDestroyed++
        trumpsDestroyedLabel.text = "\(aliensDestroyed) Trumps"

        if (aliensDestroyed > 10) 
        
    

线路崩溃是:

if ((firstBody.categoryBitMask & photonCategory) != 0 && (secondBody.categoryBitMask & alientCategory) != 0)
            aliensCollideWithBullets(firstBody.node as! SKSpriteNode, alien: secondBody.node as! SKSpriteNode)
            //            firstBody.node?.removeFromParent()
            //            secondBody.node?.removeFromParent()
        

感谢任何帮助。

【问题讨论】:

应用崩溃时的实际错误信息是什么? 【参考方案1】:

检查 bodyA 和 bodyB 是否为零。我遇到了同样的问题,用这行代码解决了:

if contact.bodyA.node != nil && contact.bodyB.node != nil 

【讨论】:

以上是关于三精灵节点碰撞的主要内容,如果未能解决你的问题,请参考以下文章

Sprite Kit 碰撞发生在精灵之外的几个点

Swift 3 Sprite 节点接触/碰撞行为不正常

子精灵的精灵套件碰撞检测

Unity精灵动画 2D碰撞

精灵面具碰撞不起作用(直接碰撞工作)

pygame之精灵碰撞检测