精灵套件在碰撞时获得零值

时间:2014-12-28 03:28:08

标签: ios swift sprite-kit

当我在我的精灵工具包游戏中检查碰撞时,当1个节点同时与其他2个节点发生碰撞时,我得到一个零值。基本上我有一些怪物'和一个火球有时候2个怪物在同一个位置,我从我的玩家射击的火球同时与两个怪物相撞,所以碰撞同时被检测到两次。

碰撞方法连续运行两次,但问题是它第一次运行时,我是从场景中移除火球,所以第二次碰撞得到了一个" nil"对于火球,或者它似乎是这样。

继承人代码:

    func projectileDidCollideWithMonster(projectile:SKNode, monster:SKNode) {
        println("Hit")

        (monster as Character).negativeEffect.runningSpeed = (projectile as FireBall).negativeEffect.getRunningSpeed()
        projectile.removeFromParent()
        println("finished hit")
    }

    func didBeginContact(contact: SKPhysicsContact) {

        // 1
        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
        }

        // 2
        if ((firstBody.categoryBitMask & PhysicsCategory.Monster != 0) &&
            (secondBody.categoryBitMask & PhysicsCategory.Projectile != 0)) {
                projectileDidCollideWithMonster(secondBody.node!, monster: firstBody.node!)
        }

    }

关于如何避免这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

做了一些研究和思考,我现在想出了以下修复,直到找到更好的修复方法(如果存在)

首先我做了第一个/第二个身体选项,然后我会在打开它们之前检查它们是否为零:

var firstBody: SKPhysicsBody?
var secondBody: SKPhysicsBody?

if (firstBody!.node! != nil && secondBody!.node! != nil) {
       if ((firstBody.categoryBitMask & PhysicsCategory.Monster != 0) &&
                (secondBody.categoryBitMask & PhysicsCategory.Projectile != 0)) {
                projectileDidCollideWithMonster(secondBody.node!, monster: firstBody.node!)
        }
}