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

时间:2015-11-25 18:58:35

标签: ios swift cocos2d-iphone cocos2d-x-3.0 chipmunk

我正在研究Cocos2d iphone SDK并遇到问题。在这里查看我的代码。

  

障碍类

@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
}

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

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

var p: Obstacle = platform as Obstacle

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

任何人都可以在这里帮助我,因为我无法了解如何在platform方法中访问此ccPhysicsCollisionPreSolve对象的属性?

1 个答案:

答案 0 :(得分:0)

对不起家伙的麻烦,但这是我的错误。我错误地理解了这一点。

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

我使用了platform.parent!.ignoreCollision,问题解决了。 :) 这个小小的错过了我3-4天的R& D并且额外工作。