我正在研究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
对象的属性?
答案 0 :(得分:0)
对不起家伙的麻烦,但这是我的错误。我错误地理解了这一点。
Obstacle
类表示platform
及其背景图层,其背景图层具有设备屏幕的三倍高度。但是我的球只与__pipe
类中的Obstacle
精灵发生碰撞,我指的是错误的整个Obstacle
类。
我使用了platform.parent!.ignoreCollision
,问题解决了。 :)
这个小小的错过了我3-4天的R& D并且额外工作。