Cocos2d iPHone SDK ccPhysicsCollisionPreSolve 在访问对象属性时崩溃

Cocos2d iPHone SDK ccPhysicsCollisionPreSolve crashing while accessing object properties

我正在开发 Cocos2d iphone SDK,但遇到了一个问题。在这里查看我的代码。

Obstacle Class

@objc class Obstacle: CCNode {
    weak var __pipe: CCSprite!
    var ignoreCollision:Bool = false

    override init!() {
        super.init()
        //NSLog("init plain")
        userInteractionEnabled = true
        ignoreCollision = false
    }

    func didLoadFromCCB() {
        ...
    }
}

我放置碰撞委托方法的主要场景。一旦玩家对象与障碍物对象发生碰撞,就会调用该方法。

func ccPhysicsCollisionPreSolve(pair: CCPhysicsCollisionPair!, hero: Player!, platform: Obstacle!) -> ObjCBool {
    if !isGameOn {
        NSLog("PLATFORM: Game finished")
        return false
    }

    if platform.ignoreCollision {
        platform.ignoreCollision = !platform.ignoreCollision
        // For score updates
        hudLayer.updatePlatform(++scorePlatforms)
    }

    return true
}

现在,我只是尝试使用 platform 对象中的简单 Bool 属性,但我得到的是崩溃。我的应用程序在我使用 属性 的 if... 条件语句上崩溃。我无法得到这个是什么,因为我只是使用对象中的 属性。

我检查了对象,发现 platform 显示我的类型是 Some 而不是 ob Obstacle。我试过使用

var p: Obstacle = platform as Obstacle

并将所有 platform 替换为 p 但我仍然面临崩溃。我认为该类型现在向我显示了一些随机的十六进制数,这可能是问题所在。

任何人都可以在这里帮助我,因为我无法找出我应该如何从 ccPhysicsCollisionPreSolve 方法中的这个 platform 对象访问 属性?

抱歉给大家带来了麻烦,但这是我的错误。我理解错了。

Obstacle class 表示 platform 及其背景层具有设备屏幕的三倍高度。但是我的球只与 Obstacle class 中的 __pipe 精灵碰撞,我指的是整个 Obstacle class 这是错误的。

我用了platform.parent!.ignoreCollision,问题解决了。 :) 这个小小姐让我花了3-4天的研发和额外的工作。